微信公衆號支付功能

public function recharge()
    {
        $amount = (float)$this->request->post('amount');

        if (!$amount) return $this->jsonError('請選擇充值金額');
        $data = [
            'company_id' => $this->companyUser->company_id,
            'company_user_id' => $this->companyUser->id,
            'amount' => $amount,
        ];
        $orderNO = (new CompanyRecharge())->createOrder($data);

        // 微信支付單位爲分
        $amountFen = $amount * 100;
        $amountFormat = number_format($amount, 2);


        $tools = new JsApiPay();

        $input = new WxPayUnifiedOrder();
        $input->SetBody("一佈網絡充值:¥ " . $amountFormat);
        $input->SetAttach("一佈網絡充值:¥ " . $amountFormat);
        $input->SetOut_trade_no($orderNO);
        $input->SetTotal_fee($amountFen);
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("");
        $input->SetNotify_url(Config::get('notify_url'));
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($this->OauthAccessToken['openid']);
        $order = WxPayApi::unifiedOrder($input);

        $jsApiParameters = $tools->GetJsApiParameters($order);

        echo $jsApiParameters;
        die;
    }

WxPayUnifiedOrder 類

<?php
namespace Dragon\Wechat;

use  Dragon\Wechat\WxPayConfig;
use  Dragon\Wechat\WxPayException;
/**
* 2015-06-29 修復簽名問題
**/


/**
 * 
 * 數據對象基礎類,該類中定義數據類最基本的行爲,包括:
 * 計算/設置/獲取簽名、輸出xml格式的參數、從xml讀取數據對象等
 * @author widyhu
 *
 */
class WxPayDataBase
{
    protected $values = array();

    /**
    * 設置簽名,詳見簽名生成算法
    * @param string $value 
    **/
    public function SetSign()
    {
        $sign = $this->MakeSign();
        $this->values['sign'] = $sign;
        return $sign;
    }

    /**
    * 獲取簽名,詳見簽名生成算法的值
    * @return 值
    **/
    public function GetSign()
    {
        return $this->values['sign'];
    }

    /**
    * 判斷簽名,詳見簽名生成算法是否存在
    * @return true 或 false
    **/
    public function IsSignSet()
    {
        return array_key_exists('sign', $this->values);
    }

    /**
     * 輸出xml字符
     * @throws WxPayException
    **/
    public function ToXml()
    {
        if(!is_array($this->values) 
            || count($this->values) <= 0)
        {
            throw new WxPayException("數組數據異常!");
        }

        $xml = "<xml>";
        foreach ($this->values as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml; 
    }

    /**
     * 將xml轉爲array
     * @param string $xml
     * @throws WxPayException
     */
    public function FromXml($xml)
    {   
        if(!$xml){
            throw new WxPayException("xml數據異常!");
        }
        //將XML轉爲array
        //禁止引用外部xml實體
        libxml_disable_entity_loader(true);
        $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);      
        return $this->values;
    }

    /**
     * 格式化參數格式化成url參數
     */
    public function ToUrlParams()
    {
        $buff = "";
        foreach ($this->values as $k => $v)
        {
            if($k != "sign" && $v != "" && !is_array($v)){
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }

    /**
     * 生成簽名
     * @return 簽名,本函數不覆蓋sign成員變量,如要設置簽名需要調用SetSign方法賦值
     */
    public function MakeSign()
    {
        $config = config('wechat.' . config('wechat_account'));
        //簽名步驟一:按字典序排序參數
        ksort($this->values);
        $string = $this->ToUrlParams();
        //簽名步驟二:在string後加入KEY
        $string = $string . "&key=".$config['wechat_key'];
        //簽名步驟三:MD5加密
        $string = md5($string);
        //簽名步驟四:所有字符轉爲大寫
        $result = strtoupper($string);
        return $result;
    }

    /**
     * 獲取設置的值
     */
    public function GetValues()
    {
        return $this->values;
    }
}

/**
 * 
 * 接口調用結果類
 * @author widyhu
 *
 */
class WxPayResults extends WxPayDataBase
{
    /**
     * 
     * 檢測簽名
     */
    public function CheckSign()
    {
        //fix異常
        if(!$this->IsSignSet()){
            throw new WxPayException("簽名錯誤!");
        }

        $sign = $this->MakeSign();
        if($this->GetSign() == $sign){
            return true;
        }
        throw new WxPayException("簽名錯誤!");
    }

    /**
     * 
     * 使用數組初始化
     * @param array $array
     */
    public function FromArray($array)
    {
        $this->values = $array;
    }

    /**
     * 
     * 使用數組初始化對象
     * @param array $array
     * @param 是否檢測簽名 $noCheckSign
     */
    public static function InitFromArray($array, $noCheckSign = false)
    {
        $obj = new self();
        $obj->FromArray($array);
        if($noCheckSign == false){
            $obj->CheckSign();
        }
        return $obj;
    }

    /**
     * 
     * 設置參數
     * @param string $key
     * @param string $value
     */
    public function SetData($key, $value)
    {
        $this->values[$key] = $value;
    }

    /**
     * 將xml轉爲array
     * @param string $xml
     * @throws WxPayException
     */
    public static function Init($xml)
    {   
        $obj = new self();
        $obj->FromXml($xml);
        //fix bug 2015-06-29
        if($obj->values['return_code'] != 'SUCCESS'){
             return $obj->GetValues();
        }
        $obj->CheckSign();
        return $obj->GetValues();
    }
}

/**
 * 
 * 回調基礎類
 * @author widyhu
 *
 */
class WxPayNotifyReply extends  WxPayDataBase
{
    /**
     * 
     * 設置錯誤碼 FAIL 或者 SUCCESS
     * @param string
     */
    public function SetReturn_code($return_code)
    {
        $this->values['return_code'] = $return_code;
    }

    /**
     * 
     * 獲取錯誤碼 FAIL 或者 SUCCESS
     * @return string $return_code
     */
    public function GetReturn_code()
    {
        return $this->values['return_code'];
    }

    /**
     * 
     * 設置錯誤信息
     * @param string $return_code
     */
    public function SetReturn_msg($return_msg)
    {
        $this->values['return_msg'] = $return_msg;
    }

    /**
     * 
     * 獲取錯誤信息
     * @return string
     */
    public function GetReturn_msg()
    {
        return $this->values['return_msg'];
    }

    /**
     * 
     * 設置返回參數
     * @param string $key
     * @param string $value
     */
    public function SetData($key, $value)
    {
        $this->values[$key] = $value;
    }
}

/**
 * 
 * 統一下單輸入對象
 * @author widyhu
 *
 */
class WxPayUnifiedOrder extends WxPayDataBase
{   
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信支付分配的終端設備號,商戶自定義
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取微信支付分配的終端設備號,商戶自定義的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷微信支付分配的終端設備號,商戶自定義是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置商品或支付單簡要描述
    * @param string $value 
    **/
    public function SetBody($value)
    {
        $this->values['body'] = $value;
    }
    /**
    * 獲取商品或支付單簡要描述的值
    * @return 值
    **/
    public function GetBody()
    {
        return $this->values['body'];
    }
    /**
    * 判斷商品或支付單簡要描述是否存在
    * @return true 或 false
    **/
    public function IsBodySet()
    {
        return array_key_exists('body', $this->values);
    }


    /**
    * 設置商品名稱明細列表
    * @param string $value 
    **/
    public function SetDetail($value)
    {
        $this->values['detail'] = $value;
    }
    /**
    * 獲取商品名稱明細列表的值
    * @return 值
    **/
    public function GetDetail()
    {
        return $this->values['detail'];
    }
    /**
    * 判斷商品名稱明細列表是否存在
    * @return true 或 false
    **/
    public function IsDetailSet()
    {
        return array_key_exists('detail', $this->values);
    }


    /**
    * 設置附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據
    * @param string $value 
    **/
    public function SetAttach($value)
    {
        $this->values['attach'] = $value;
    }
    /**
    * 獲取附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據的值
    * @return 值
    **/
    public function GetAttach()
    {
        return $this->values['attach'];
    }
    /**
    * 判斷附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據是否存在
    * @return true 或 false
    **/
    public function IsAttachSet()
    {
        return array_key_exists('attach', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
    * @param string $value 
    **/
    public function SetFee_type($value)
    {
        $this->values['fee_type'] = $value;
    }
    /**
    * 獲取符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型的值
    * @return 值
    **/
    public function GetFee_type()
    {
        return $this->values['fee_type'];
    }
    /**
    * 判斷符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型是否存在
    * @return true 或 false
    **/
    public function IsFee_typeSet()
    {
        return array_key_exists('fee_type', $this->values);
    }


    /**
    * 設置訂單總金額,只能爲整數,詳見支付金額
    * @param string $value 
    **/
    public function SetTotal_fee($value)
    {
        $this->values['total_fee'] = $value;
    }
    /**
    * 獲取訂單總金額,只能爲整數,詳見支付金額的值
    * @return 值
    **/
    public function GetTotal_fee()
    {
        return $this->values['total_fee'];
    }
    /**
    * 判斷訂單總金額,只能爲整數,詳見支付金額是否存在
    * @return true 或 false
    **/
    public function IsTotal_feeSet()
    {
        return array_key_exists('total_fee', $this->values);
    }


    /**
    * 設置APP和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP。
    * @param string $value 
    **/
    public function SetSpbill_create_ip($value)
    {
        $this->values['spbill_create_ip'] = $value;
    }
    /**
    * 獲取APP和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP。的值
    * @return 值
    **/
    public function GetSpbill_create_ip()
    {
        return $this->values['spbill_create_ip'];
    }
    /**
    * 判斷APP和網頁支付提交用戶端ip,Native支付填調用微信支付API的機器IP。是否存在
    * @return true 或 false
    **/
    public function IsSpbill_create_ipSet()
    {
        return array_key_exists('spbill_create_ip', $this->values);
    }


    /**
    * 設置訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。其他詳見時間規則
    * @param string $value 
    **/
    public function SetTime_start($value)
    {
        $this->values['time_start'] = $value;
    }
    /**
    * 獲取訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。其他詳見時間規則的值
    * @return 值
    **/
    public function GetTime_start()
    {
        return $this->values['time_start'];
    }
    /**
    * 判斷訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。其他詳見時間規則是否存在
    * @return true 或 false
    **/
    public function IsTime_startSet()
    {
        return array_key_exists('time_start', $this->values);
    }


    /**
    * 設置訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則
    * @param string $value 
    **/
    public function SetTime_expire($value)
    {
        $this->values['time_expire'] = $value;
    }
    /**
    * 獲取訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則的值
    * @return 值
    **/
    public function GetTime_expire()
    {
        return $this->values['time_expire'];
    }
    /**
    * 判斷訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則是否存在
    * @return true 或 false
    **/
    public function IsTime_expireSet()
    {
        return array_key_exists('time_expire', $this->values);
    }


    /**
    * 設置商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠
    * @param string $value 
    **/
    public function SetGoods_tag($value)
    {
        $this->values['goods_tag'] = $value;
    }
    /**
    * 獲取商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠的值
    * @return 值
    **/
    public function GetGoods_tag()
    {
        return $this->values['goods_tag'];
    }
    /**
    * 判斷商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠是否存在
    * @return true 或 false
    **/
    public function IsGoods_tagSet()
    {
        return array_key_exists('goods_tag', $this->values);
    }


    /**
    * 設置接收微信支付異步通知回調地址
    * @param string $value 
    **/
    public function SetNotify_url($value)
    {
        $this->values['notify_url'] = $value;
    }
    /**
    * 獲取接收微信支付異步通知回調地址的值
    * @return 值
    **/
    public function GetNotify_url()
    {
        return $this->values['notify_url'];
    }
    /**
    * 判斷接收微信支付異步通知回調地址是否存在
    * @return true 或 false
    **/
    public function IsNotify_urlSet()
    {
        return array_key_exists('notify_url', $this->values);
    }


    /**
    * 設置取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定
    * @param string $value 
    **/
    public function SetTrade_type($value)
    {
        $this->values['trade_type'] = $value;
    }
    /**
    * 獲取取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定的值
    * @return 值
    **/
    public function GetTrade_type()
    {
        return $this->values['trade_type'];
    }
    /**
    * 判斷取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定是否存在
    * @return true 或 false
    **/
    public function IsTrade_typeSet()
    {
        return array_key_exists('trade_type', $this->values);
    }


    /**
    * 設置trade_type=NATIVE,此參數必傳。此id爲二維碼中包含的商品ID,商戶自行定義。
    * @param string $value 
    **/
    public function SetProduct_id($value)
    {
        $this->values['product_id'] = $value;
    }
    /**
    * 獲取trade_type=NATIVE,此參數必傳。此id爲二維碼中包含的商品ID,商戶自行定義。的值
    * @return 值
    **/
    public function GetProduct_id()
    {
        return $this->values['product_id'];
    }
    /**
    * 判斷trade_type=NATIVE,此參數必傳。此id爲二維碼中包含的商品ID,商戶自行定義。是否存在
    * @return true 或 false
    **/
    public function IsProduct_idSet()
    {
        return array_key_exists('product_id', $this->values);
    }


    /**
    * 設置trade_type=JSAPI,此參數必傳,用戶在商戶appid下的唯一標識。下單前需要調用【網頁授權獲取用戶信息】接口獲取到用戶的Openid。 
    * @param string $value 
    **/
    public function SetOpenid($value)
    {
        $this->values['openid'] = $value;
    }
    /**
    * 獲取trade_type=JSAPI,此參數必傳,用戶在商戶appid下的唯一標識。下單前需要調用【網頁授權獲取用戶信息】接口獲取到用戶的Openid。 的值
    * @return 值
    **/
    public function GetOpenid()
    {
        return $this->values['openid'];
    }
    /**
    * 判斷trade_type=JSAPI,此參數必傳,用戶在商戶appid下的唯一標識。下單前需要調用【網頁授權獲取用戶信息】接口獲取到用戶的Openid。 是否存在
    * @return true 或 false
    **/
    public function IsOpenidSet()
    {
        return array_key_exists('openid', $this->values);
    }
}

/**
 * 
 * 訂單查詢輸入對象
 * @author widyhu
 *
 */
class WxPayOrderQuery extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信的訂單號,優先使用
    * @param string $value 
    **/
    public function SetTransaction_id($value)
    {
        $this->values['transaction_id'] = $value;
    }
    /**
    * 獲取微信的訂單號,優先使用的值
    * @return 值
    **/
    public function GetTransaction_id()
    {
        return $this->values['transaction_id'];
    }
    /**
    * 判斷微信的訂單號,優先使用是否存在
    * @return true 或 false
    **/
    public function IsTransaction_idSet()
    {
        return array_key_exists('transaction_id', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,當沒提供transaction_id時需要傳這個。
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,當沒提供transaction_id時需要傳這個。的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,當沒提供transaction_id時需要傳這個。是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }
}

/**
 * 
 * 關閉訂單輸入對象
 * @author widyhu
 *
 */
class WxPayCloseOrder extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }
}

/**
 * 
 * 提交退款輸入對象
 * @author widyhu
 *
 */
class WxPayRefund extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信支付分配的終端設備號,與下單一致
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取微信支付分配的終端設備號,與下單一致的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷微信支付分配的終端設備號,與下單一致是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置微信訂單號
    * @param string $value 
    **/
    public function SetTransaction_id($value)
    {
        $this->values['transaction_id'] = $value;
    }
    /**
    * 獲取微信訂單號的值
    * @return 值
    **/
    public function GetTransaction_id()
    {
        return $this->values['transaction_id'];
    }
    /**
    * 判斷微信訂單號是否存在
    * @return true 或 false
    **/
    public function IsTransaction_idSet()
    {
        return array_key_exists('transaction_id', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆
    * @param string $value 
    **/
    public function SetOut_refund_no($value)
    {
        $this->values['out_refund_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆的值
    * @return 值
    **/
    public function GetOut_refund_no()
    {
        return $this->values['out_refund_no'];
    }
    /**
    * 判斷商戶系統內部的退款單號,商戶系統內部唯一,同一退款單號多次請求只退一筆是否存在
    * @return true 或 false
    **/
    public function IsOut_refund_noSet()
    {
        return array_key_exists('out_refund_no', $this->values);
    }


    /**
    * 設置訂單總金額,單位爲分,只能爲整數,詳見支付金額
    * @param string $value 
    **/
    public function SetTotal_fee($value)
    {
        $this->values['total_fee'] = $value;
    }
    /**
    * 獲取訂單總金額,單位爲分,只能爲整數,詳見支付金額的值
    * @return 值
    **/
    public function GetTotal_fee()
    {
        return $this->values['total_fee'];
    }
    /**
    * 判斷訂單總金額,單位爲分,只能爲整數,詳見支付金額是否存在
    * @return true 或 false
    **/
    public function IsTotal_feeSet()
    {
        return array_key_exists('total_fee', $this->values);
    }


    /**
    * 設置退款總金額,訂單總金額,單位爲分,只能爲整數,詳見支付金額
    * @param string $value 
    **/
    public function SetRefund_fee($value)
    {
        $this->values['refund_fee'] = $value;
    }
    /**
    * 獲取退款總金額,訂單總金額,單位爲分,只能爲整數,詳見支付金額的值
    * @return 值
    **/
    public function GetRefund_fee()
    {
        return $this->values['refund_fee'];
    }
    /**
    * 判斷退款總金額,訂單總金額,單位爲分,只能爲整數,詳見支付金額是否存在
    * @return true 或 false
    **/
    public function IsRefund_feeSet()
    {
        return array_key_exists('refund_fee', $this->values);
    }


    /**
    * 設置貨幣類型,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
    * @param string $value 
    **/
    public function SetRefund_fee_type($value)
    {
        $this->values['refund_fee_type'] = $value;
    }
    /**
    * 獲取貨幣類型,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型的值
    * @return 值
    **/
    public function GetRefund_fee_type()
    {
        return $this->values['refund_fee_type'];
    }
    /**
    * 判斷貨幣類型,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型是否存在
    * @return true 或 false
    **/
    public function IsRefund_fee_typeSet()
    {
        return array_key_exists('refund_fee_type', $this->values);
    }


    /**
    * 設置操作員帳號, 默認爲商戶號
    * @param string $value 
    **/
    public function SetOp_user_id($value)
    {
        $this->values['op_user_id'] = $value;
    }
    /**
    * 獲取操作員帳號, 默認爲商戶號的值
    * @return 值
    **/
    public function GetOp_user_id()
    {
        return $this->values['op_user_id'];
    }
    /**
    * 判斷操作員帳號, 默認爲商戶號是否存在
    * @return true 或 false
    **/
    public function IsOp_user_idSet()
    {
        return array_key_exists('op_user_id', $this->values);
    }
}

/**
 * 
 * 退款查詢輸入對象
 * @author widyhu
 *
 */
class WxPayRefundQuery extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信支付分配的終端設備號
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取微信支付分配的終端設備號的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷微信支付分配的終端設備號是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置微信訂單號
    * @param string $value 
    **/
    public function SetTransaction_id($value)
    {
        $this->values['transaction_id'] = $value;
    }
    /**
    * 獲取微信訂單號的值
    * @return 值
    **/
    public function GetTransaction_id()
    {
        return $this->values['transaction_id'];
    }
    /**
    * 判斷微信訂單號是否存在
    * @return true 或 false
    **/
    public function IsTransaction_idSet()
    {
        return array_key_exists('transaction_id', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置商戶退款單號
    * @param string $value 
    **/
    public function SetOut_refund_no($value)
    {
        $this->values['out_refund_no'] = $value;
    }
    /**
    * 獲取商戶退款單號的值
    * @return 值
    **/
    public function GetOut_refund_no()
    {
        return $this->values['out_refund_no'];
    }
    /**
    * 判斷商戶退款單號是否存在
    * @return true 或 false
    **/
    public function IsOut_refund_noSet()
    {
        return array_key_exists('out_refund_no', $this->values);
    }


    /**
    * 設置微信退款單號refund_id、out_refund_no、out_trade_no、transaction_id四個參數必填一個,如果同時存在優先級爲:refund_id>out_refund_no>transaction_id>out_trade_no
    * @param string $value 
    **/
    public function SetRefund_id($value)
    {
        $this->values['refund_id'] = $value;
    }
    /**
    * 獲取微信退款單號refund_id、out_refund_no、out_trade_no、transaction_id四個參數必填一個,如果同時存在優先級爲:refund_id>out_refund_no>transaction_id>out_trade_no的值
    * @return 值
    **/
    public function GetRefund_id()
    {
        return $this->values['refund_id'];
    }
    /**
    * 判斷微信退款單號refund_id、out_refund_no、out_trade_no、transaction_id四個參數必填一個,如果同時存在優先級爲:refund_id>out_refund_no>transaction_id>out_trade_no是否存在
    * @return true 或 false
    **/
    public function IsRefund_idSet()
    {
        return array_key_exists('refund_id', $this->values);
    }
}

/**
 * 
 * 下載對賬單輸入對象
 * @author widyhu
 *
 */
class WxPayDownloadBill extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信支付分配的終端設備號,填寫此字段,只下載該設備號的對賬單
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取微信支付分配的終端設備號,填寫此字段,只下載該設備號的對賬單的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷微信支付分配的終端設備號,填寫此字段,只下載該設備號的對賬單是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置下載對賬單的日期,格式:20140603
    * @param string $value 
    **/
    public function SetBill_date($value)
    {
        $this->values['bill_date'] = $value;
    }
    /**
    * 獲取下載對賬單的日期,格式:20140603的值
    * @return 值
    **/
    public function GetBill_date()
    {
        return $this->values['bill_date'];
    }
    /**
    * 判斷下載對賬單的日期,格式:20140603是否存在
    * @return true 或 false
    **/
    public function IsBill_dateSet()
    {
        return array_key_exists('bill_date', $this->values);
    }


    /**
    * 設置ALL,返回當日所有訂單信息,默認值SUCCESS,返回當日成功支付的訂單REFUND,返回當日退款訂單REVOKED,已撤銷的訂單
    * @param string $value 
    **/
    public function SetBill_type($value)
    {
        $this->values['bill_type'] = $value;
    }
    /**
    * 獲取ALL,返回當日所有訂單信息,默認值SUCCESS,返回當日成功支付的訂單REFUND,返回當日退款訂單REVOKED,已撤銷的訂單的值
    * @return 值
    **/
    public function GetBill_type()
    {
        return $this->values['bill_type'];
    }
    /**
    * 判斷ALL,返回當日所有訂單信息,默認值SUCCESS,返回當日成功支付的訂單REFUND,返回當日退款訂單REVOKED,已撤銷的訂單是否存在
    * @return true 或 false
    **/
    public function IsBill_typeSet()
    {
        return array_key_exists('bill_type', $this->values);
    }
}

/**
 * 
 * 測速上報輸入對象
 * @author widyhu
 *
 */
class WxPayReport extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信支付分配的終端設備號,商戶自定義
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取微信支付分配的終端設備號,商戶自定義的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷微信支付分配的終端設備號,商戶自定義是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }


    /**
    * 設置上報對應的接口的完整URL,類似:https://api.mch.weixin.qq.com/pay/unifiedorder對於被掃支付,爲更好的和商戶共同分析一次業務行爲的整體耗時情況,對於兩種接入模式,請都在門店側對一次被掃行爲進行一次單獨的整體上報,上報URL指定爲:https://api.mch.weixin.qq.com/pay/micropay/total關於兩種接入模式具體可參考本文檔章節:被掃支付商戶接入模式其它接口調用仍然按照調用一次,上報一次來進行。
    * @param string $value 
    **/
    public function SetInterface_url($value)
    {
        $this->values['interface_url'] = $value;
    }
    /**
    * 獲取上報對應的接口的完整URL,類似:https://api.mch.weixin.qq.com/pay/unifiedorder對於被掃支付,爲更好的和商戶共同分析一次業務行爲的整體耗時情況,對於兩種接入模式,請都在門店側對一次被掃行爲進行一次單獨的整體上報,上報URL指定爲:https://api.mch.weixin.qq.com/pay/micropay/total關於兩種接入模式具體可參考本文檔章節:被掃支付商戶接入模式其它接口調用仍然按照調用一次,上報一次來進行。的值
    * @return 值
    **/
    public function GetInterface_url()
    {
        return $this->values['interface_url'];
    }
    /**
    * 判斷上報對應的接口的完整URL,類似:https://api.mch.weixin.qq.com/pay/unifiedorder對於被掃支付,爲更好的和商戶共同分析一次業務行爲的整體耗時情況,對於兩種接入模式,請都在門店側對一次被掃行爲進行一次單獨的整體上報,上報URL指定爲:https://api.mch.weixin.qq.com/pay/micropay/total關於兩種接入模式具體可參考本文檔章節:被掃支付商戶接入模式其它接口調用仍然按照調用一次,上報一次來進行。是否存在
    * @return true 或 false
    **/
    public function IsInterface_urlSet()
    {
        return array_key_exists('interface_url', $this->values);
    }


    /**
    * 設置接口耗時情況,單位爲毫秒
    * @param string $value 
    **/
    public function SetExecute_time_($value)
    {
        $this->values['execute_time_'] = $value;
    }
    /**
    * 獲取接口耗時情況,單位爲毫秒的值
    * @return 值
    **/
    public function GetExecute_time_()
    {
        return $this->values['execute_time_'];
    }
    /**
    * 判斷接口耗時情況,單位爲毫秒是否存在
    * @return true 或 false
    **/
    public function IsExecute_time_Set()
    {
        return array_key_exists('execute_time_', $this->values);
    }


    /**
    * 設置SUCCESS/FAIL此字段是通信標識,非交易標識,交易是否成功需要查看trade_state來判斷
    * @param string $value 
    **/
    public function SetReturn_code($value)
    {
        $this->values['return_code'] = $value;
    }
    /**
    * 獲取SUCCESS/FAIL此字段是通信標識,非交易標識,交易是否成功需要查看trade_state來判斷的值
    * @return 值
    **/
    public function GetReturn_code()
    {
        return $this->values['return_code'];
    }
    /**
    * 判斷SUCCESS/FAIL此字段是通信標識,非交易標識,交易是否成功需要查看trade_state來判斷是否存在
    * @return true 或 false
    **/
    public function IsReturn_codeSet()
    {
        return array_key_exists('return_code', $this->values);
    }


    /**
    * 設置返回信息,如非空,爲錯誤原因簽名失敗參數格式校驗錯誤
    * @param string $value 
    **/
    public function SetReturn_msg($value)
    {
        $this->values['return_msg'] = $value;
    }
    /**
    * 獲取返回信息,如非空,爲錯誤原因簽名失敗參數格式校驗錯誤的值
    * @return 值
    **/
    public function GetReturn_msg()
    {
        return $this->values['return_msg'];
    }
    /**
    * 判斷返回信息,如非空,爲錯誤原因簽名失敗參數格式校驗錯誤是否存在
    * @return true 或 false
    **/
    public function IsReturn_msgSet()
    {
        return array_key_exists('return_msg', $this->values);
    }


    /**
    * 設置SUCCESS/FAIL
    * @param string $value 
    **/
    public function SetResult_code($value)
    {
        $this->values['result_code'] = $value;
    }
    /**
    * 獲取SUCCESS/FAIL的值
    * @return 值
    **/
    public function GetResult_code()
    {
        return $this->values['result_code'];
    }
    /**
    * 判斷SUCCESS/FAIL是否存在
    * @return true 或 false
    **/
    public function IsResult_codeSet()
    {
        return array_key_exists('result_code', $this->values);
    }


    /**
    * 設置ORDERNOTEXIST—訂單不存在SYSTEMERROR—系統錯誤
    * @param string $value 
    **/
    public function SetErr_code($value)
    {
        $this->values['err_code'] = $value;
    }
    /**
    * 獲取ORDERNOTEXIST—訂單不存在SYSTEMERROR—系統錯誤的值
    * @return 值
    **/
    public function GetErr_code()
    {
        return $this->values['err_code'];
    }
    /**
    * 判斷ORDERNOTEXIST—訂單不存在SYSTEMERROR—系統錯誤是否存在
    * @return true 或 false
    **/
    public function IsErr_codeSet()
    {
        return array_key_exists('err_code', $this->values);
    }


    /**
    * 設置結果信息描述
    * @param string $value 
    **/
    public function SetErr_code_des($value)
    {
        $this->values['err_code_des'] = $value;
    }
    /**
    * 獲取結果信息描述的值
    * @return 值
    **/
    public function GetErr_code_des()
    {
        return $this->values['err_code_des'];
    }
    /**
    * 判斷結果信息描述是否存在
    * @return true 或 false
    **/
    public function IsErr_code_desSet()
    {
        return array_key_exists('err_code_des', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,商戶可以在上報時提供相關商戶訂單號方便微信支付更好的提高服務質量。 
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,商戶可以在上報時提供相關商戶訂單號方便微信支付更好的提高服務質量。 的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,商戶可以在上報時提供相關商戶訂單號方便微信支付更好的提高服務質量。 是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置發起接口調用時的機器IP 
    * @param string $value 
    **/
    public function SetUser_ip($value)
    {
        $this->values['user_ip'] = $value;
    }
    /**
    * 獲取發起接口調用時的機器IP 的值
    * @return 值
    **/
    public function GetUser_ip()
    {
        return $this->values['user_ip'];
    }
    /**
    * 判斷髮起接口調用時的機器IP 是否存在
    * @return true 或 false
    **/
    public function IsUser_ipSet()
    {
        return array_key_exists('user_ip', $this->values);
    }


    /**
    * 設置系統時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則
    * @param string $value 
    **/
    public function SetTime($value)
    {
        $this->values['time'] = $value;
    }
    /**
    * 獲取系統時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則的值
    * @return 值
    **/
    public function GetTime()
    {
        return $this->values['time'];
    }
    /**
    * 判斷系統時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。其他詳見時間規則是否存在
    * @return true 或 false
    **/
    public function IsTimeSet()
    {
        return array_key_exists('time', $this->values);
    }
}

/**
 * 
 * 短鏈轉換輸入對象
 * @author widyhu
 *
 */
class WxPayShortUrl extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置需要轉換的URL,簽名用原串,傳輸需URL encode
    * @param string $value 
    **/
    public function SetLong_url($value)
    {
        $this->values['long_url'] = $value;
    }
    /**
    * 獲取需要轉換的URL,簽名用原串,傳輸需URL encode的值
    * @return 值
    **/
    public function GetLong_url()
    {
        return $this->values['long_url'];
    }
    /**
    * 判斷需要轉換的URL,簽名用原串,傳輸需URL encode是否存在
    * @return true 或 false
    **/
    public function IsLong_urlSet()
    {
        return array_key_exists('long_url', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }
}

/**
 * 
 * 提交被掃輸入對象
 * @author widyhu
 *
 */
class WxPayMicroPay extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置終端設備號(商戶自定義,如門店編號)
    * @param string $value 
    **/
    public function SetDevice_info($value)
    {
        $this->values['device_info'] = $value;
    }
    /**
    * 獲取終端設備號(商戶自定義,如門店編號)的值
    * @return 值
    **/
    public function GetDevice_info()
    {
        return $this->values['device_info'];
    }
    /**
    * 判斷終端設備號(商戶自定義,如門店編號)是否存在
    * @return true 或 false
    **/
    public function IsDevice_infoSet()
    {
        return array_key_exists('device_info', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置商品或支付單簡要描述
    * @param string $value 
    **/
    public function SetBody($value)
    {
        $this->values['body'] = $value;
    }
    /**
    * 獲取商品或支付單簡要描述的值
    * @return 值
    **/
    public function GetBody()
    {
        return $this->values['body'];
    }
    /**
    * 判斷商品或支付單簡要描述是否存在
    * @return true 或 false
    **/
    public function IsBodySet()
    {
        return array_key_exists('body', $this->values);
    }


    /**
    * 設置商品名稱明細列表
    * @param string $value 
    **/
    public function SetDetail($value)
    {
        $this->values['detail'] = $value;
    }
    /**
    * 獲取商品名稱明細列表的值
    * @return 值
    **/
    public function GetDetail()
    {
        return $this->values['detail'];
    }
    /**
    * 判斷商品名稱明細列表是否存在
    * @return true 或 false
    **/
    public function IsDetailSet()
    {
        return array_key_exists('detail', $this->values);
    }


    /**
    * 設置附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據
    * @param string $value 
    **/
    public function SetAttach($value)
    {
        $this->values['attach'] = $value;
    }
    /**
    * 獲取附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據的值
    * @return 值
    **/
    public function GetAttach()
    {
        return $this->values['attach'];
    }
    /**
    * 判斷附加數據,在查詢API和支付通知中原樣返回,該字段主要用於商戶攜帶訂單的自定義數據是否存在
    * @return true 或 false
    **/
    public function IsAttachSet()
    {
        return array_key_exists('attach', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,32個字符內、可包含字母, 其他說明見商戶訂單號是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置訂單總金額,單位爲分,只能爲整數,詳見支付金額
    * @param string $value 
    **/
    public function SetTotal_fee($value)
    {
        $this->values['total_fee'] = $value;
    }
    /**
    * 獲取訂單總金額,單位爲分,只能爲整數,詳見支付金額的值
    * @return 值
    **/
    public function GetTotal_fee()
    {
        return $this->values['total_fee'];
    }
    /**
    * 判斷訂單總金額,單位爲分,只能爲整數,詳見支付金額是否存在
    * @return true 或 false
    **/
    public function IsTotal_feeSet()
    {
        return array_key_exists('total_fee', $this->values);
    }


    /**
    * 設置符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
    * @param string $value 
    **/
    public function SetFee_type($value)
    {
        $this->values['fee_type'] = $value;
    }
    /**
    * 獲取符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型的值
    * @return 值
    **/
    public function GetFee_type()
    {
        return $this->values['fee_type'];
    }
    /**
    * 判斷符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型是否存在
    * @return true 或 false
    **/
    public function IsFee_typeSet()
    {
        return array_key_exists('fee_type', $this->values);
    }


    /**
    * 設置調用微信支付API的機器IP 
    * @param string $value 
    **/
    public function SetSpbill_create_ip($value)
    {
        $this->values['spbill_create_ip'] = $value;
    }
    /**
    * 獲取調用微信支付API的機器IP 的值
    * @return 值
    **/
    public function GetSpbill_create_ip()
    {
        return $this->values['spbill_create_ip'];
    }
    /**
    * 判斷調用微信支付API的機器IP 是否存在
    * @return true 或 false
    **/
    public function IsSpbill_create_ipSet()
    {
        return array_key_exists('spbill_create_ip', $this->values);
    }


    /**
    * 設置訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。詳見時間規則
    * @param string $value 
    **/
    public function SetTime_start($value)
    {
        $this->values['time_start'] = $value;
    }
    /**
    * 獲取訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。詳見時間規則的值
    * @return 值
    **/
    public function GetTime_start()
    {
        return $this->values['time_start'];
    }
    /**
    * 判斷訂單生成時間,格式爲yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示爲20091225091010。詳見時間規則是否存在
    * @return true 或 false
    **/
    public function IsTime_startSet()
    {
        return array_key_exists('time_start', $this->values);
    }


    /**
    * 設置訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。詳見時間規則
    * @param string $value 
    **/
    public function SetTime_expire($value)
    {
        $this->values['time_expire'] = $value;
    }
    /**
    * 獲取訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。詳見時間規則的值
    * @return 值
    **/
    public function GetTime_expire()
    {
        return $this->values['time_expire'];
    }
    /**
    * 判斷訂單失效時間,格式爲yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示爲20091227091010。詳見時間規則是否存在
    * @return true 或 false
    **/
    public function IsTime_expireSet()
    {
        return array_key_exists('time_expire', $this->values);
    }


    /**
    * 設置商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠
    * @param string $value 
    **/
    public function SetGoods_tag($value)
    {
        $this->values['goods_tag'] = $value;
    }
    /**
    * 獲取商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠的值
    * @return 值
    **/
    public function GetGoods_tag()
    {
        return $this->values['goods_tag'];
    }
    /**
    * 判斷商品標記,代金券或立減優惠功能的參數,說明詳見代金券或立減優惠是否存在
    * @return true 或 false
    **/
    public function IsGoods_tagSet()
    {
        return array_key_exists('goods_tag', $this->values);
    }


    /**
    * 設置掃碼支付授權碼,設備讀取用戶微信中的條碼或者二維碼信息
    * @param string $value 
    **/
    public function SetAuth_code($value)
    {
        $this->values['auth_code'] = $value;
    }
    /**
    * 獲取掃碼支付授權碼,設備讀取用戶微信中的條碼或者二維碼信息的值
    * @return 值
    **/
    public function GetAuth_code()
    {
        return $this->values['auth_code'];
    }
    /**
    * 判斷掃碼支付授權碼,設備讀取用戶微信中的條碼或者二維碼信息是否存在
    * @return true 或 false
    **/
    public function IsAuth_codeSet()
    {
        return array_key_exists('auth_code', $this->values);
    }
}

/**
 * 
 * 撤銷輸入對象
 * @author widyhu
 *
 */
class WxPayReverse extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }


    /**
    * 設置微信的訂單號,優先使用
    * @param string $value 
    **/
    public function SetTransaction_id($value)
    {
        $this->values['transaction_id'] = $value;
    }
    /**
    * 獲取微信的訂單號,優先使用的值
    * @return 值
    **/
    public function GetTransaction_id()
    {
        return $this->values['transaction_id'];
    }
    /**
    * 判斷微信的訂單號,優先使用是否存在
    * @return true 或 false
    **/
    public function IsTransaction_idSet()
    {
        return array_key_exists('transaction_id', $this->values);
    }


    /**
    * 設置商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no
    * @param string $value 
    **/
    public function SetOut_trade_no($value)
    {
        $this->values['out_trade_no'] = $value;
    }
    /**
    * 獲取商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no的值
    * @return 值
    **/
    public function GetOut_trade_no()
    {
        return $this->values['out_trade_no'];
    }
    /**
    * 判斷商戶系統內部的訂單號,transaction_id、out_trade_no二選一,如果同時存在優先級:transaction_id> out_trade_no是否存在
    * @return true 或 false
    **/
    public function IsOut_trade_noSet()
    {
        return array_key_exists('out_trade_no', $this->values);
    }


    /**
    * 設置隨機字符串,不長於32位。推薦隨機數生成算法
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串,不長於32位。推薦隨機數生成算法的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串,不長於32位。推薦隨機數生成算法是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }
}

/**
 * 
 * 提交JSAPI輸入對象
 * @author widyhu
 *
 */
class WxPayJsApiPay extends WxPayDataBase
{
    /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appId'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appId'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appId', $this->values);
    }


    /**
    * 設置支付時間戳
    * @param string $value 
    **/
    public function SetTimeStamp($value)
    {
        $this->values['timeStamp'] = $value;
    }
    /**
    * 獲取支付時間戳的值
    * @return 值
    **/
    public function GetTimeStamp()
    {
        return $this->values['timeStamp'];
    }
    /**
    * 判斷支付時間戳是否存在
    * @return true 或 false
    **/
    public function IsTimeStampSet()
    {
        return array_key_exists('timeStamp', $this->values);
    }

    /**
    * 隨機字符串
    * @param string $value 
    **/
    public function SetNonceStr($value)
    {
        $this->values['nonceStr'] = $value;
    }
    /**
    * 獲取notify隨機字符串值
    * @return 值
    **/
    public function GetReturn_code()
    {
        return $this->values['nonceStr'];
    }
    /**
    * 判斷隨機字符串是否存在
    * @return true 或 false
    **/
    public function IsReturn_codeSet()
    {
        return array_key_exists('nonceStr', $this->values);
    }


    /**
    * 設置訂單詳情擴展字符串
    * @param string $value 
    **/
    public function SetPackage($value)
    {
        $this->values['package'] = $value;
    }
    /**
    * 獲取訂單詳情擴展字符串的值
    * @return 值
    **/
    public function GetPackage()
    {
        return $this->values['package'];
    }
    /**
    * 判斷訂單詳情擴展字符串是否存在
    * @return true 或 false
    **/
    public function IsPackageSet()
    {
        return array_key_exists('package', $this->values);
    }

    /**
    * 設置簽名方式
    * @param string $value 
    **/
    public function SetSignType($value)
    {
        $this->values['signType'] = $value;
    }
    /**
    * 獲取簽名方式
    * @return 值
    **/
    public function GetSignType()
    {
        return $this->values['signType'];
    }
    /**
    * 判斷簽名方式是否存在
    * @return true 或 false
    **/
    public function IsSignTypeSet()
    {
        return array_key_exists('signType', $this->values);
    }

    /**
    * 設置簽名方式
    * @param string $value 
    **/
    public function SetPaySign($value)
    {
        $this->values['paySign'] = $value;
    }
    /**
    * 獲取簽名方式
    * @return 值
    **/
    public function GetPaySign()
    {
        return $this->values['paySign'];
    }
    /**
    * 判斷簽名方式是否存在
    * @return true 或 false
    **/
    public function IsPaySignSet()
    {
        return array_key_exists('paySign', $this->values);
    }
}

/**
 * 
 * 掃碼支付模式一生成二維碼參數
 * @author widyhu
 *
 */
class WxPayBizPayUrl extends WxPayDataBase
{
        /**
    * 設置微信分配的公衆賬號ID
    * @param string $value 
    **/
    public function SetAppid($value)
    {
        $this->values['appid'] = $value;
    }
    /**
    * 獲取微信分配的公衆賬號ID的值
    * @return 值
    **/
    public function GetAppid()
    {
        return $this->values['appid'];
    }
    /**
    * 判斷微信分配的公衆賬號ID是否存在
    * @return true 或 false
    **/
    public function IsAppidSet()
    {
        return array_key_exists('appid', $this->values);
    }


    /**
    * 設置微信支付分配的商戶號
    * @param string $value 
    **/
    public function SetMch_id($value)
    {
        $this->values['mch_id'] = $value;
    }
    /**
    * 獲取微信支付分配的商戶號的值
    * @return 值
    **/
    public function GetMch_id()
    {
        return $this->values['mch_id'];
    }
    /**
    * 判斷微信支付分配的商戶號是否存在
    * @return true 或 false
    **/
    public function IsMch_idSet()
    {
        return array_key_exists('mch_id', $this->values);
    }

    /**
    * 設置支付時間戳
    * @param string $value 
    **/
    public function SetTime_stamp($value)
    {
        $this->values['time_stamp'] = $value;
    }
    /**
    * 獲取支付時間戳的值
    * @return 值
    **/
    public function GetTime_stamp()
    {
        return $this->values['time_stamp'];
    }
    /**
    * 判斷支付時間戳是否存在
    * @return true 或 false
    **/
    public function IsTime_stampSet()
    {
        return array_key_exists('time_stamp', $this->values);
    }

    /**
    * 設置隨機字符串
    * @param string $value 
    **/
    public function SetNonce_str($value)
    {
        $this->values['nonce_str'] = $value;
    }
    /**
    * 獲取隨機字符串的值
    * @return 值
    **/
    public function GetNonce_str()
    {
        return $this->values['nonce_str'];
    }
    /**
    * 判斷隨機字符串是否存在
    * @return true 或 false
    **/
    public function IsNonce_strSet()
    {
        return array_key_exists('nonce_str', $this->values);
    }

    /**
    * 設置商品ID
    * @param string $value 
    **/
    public function SetProduct_id($value)
    {
        $this->values['product_id'] = $value;
    }
    /**
    * 獲取商品ID的值
    * @return 值
    **/
    public function GetProduct_id()
    {
        return $this->values['product_id'];
    }
    /**
    * 判斷商品ID是否存在
    * @return true 或 false
    **/
    public function IsProduct_idSet()
    {
        return array_key_exists('product_id', $this->values);
    }
}

JsApiPay 類

<?php

namespace Dragon\Wechat;

use Dragon\Wechat\WxPayApi;

/**
 *
 * JSAPI支付實現類
 * 該類實現了從微信公衆平臺獲取code、通過code獲取openid和access_token、
 * 生成jsapi支付js接口所需的參數、生成獲取共享收貨地址所需的參數
 *
 * 該類是微信支付提供的樣例程序,商戶可根據自己的需求修改,或者使用lib中的api自行開發
 *
 * @author widy
 *
 */
class JsApiPay
{
    /**
     *
     * 網頁授權接口微信服務器返回的數據,返回樣例如下
     * {
     *  "access_token":"ACCESS_TOKEN",
     *  "expires_in":7200,
     *  "refresh_token":"REFRESH_TOKEN",
     *  "openid":"OPENID",
     *  "scope":"SCOPE",
     *  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
     * }
     * 其中access_token可用於獲取共享收貨地址
     * openid是微信支付jsapi支付接口必須的參數
     *
     * @var array
     */
    public $data = null;

    /**
     *
     * 通過跳轉獲取用戶的openid,跳轉流程如下:
     * 1、設置自己需要調回的url及其其他參數,跳轉到微信服務器https://open.weixin.qq.com/connect/oauth2/authorize
     * 2、微信服務處理完成之後會跳轉回用戶redirect_uri地址,此時會帶上一些參數,如:code
     *
     * @return 用戶的openid
     */
    public function GetOpenid()
    {
//      //通過code獲得openid
//      if (!isset($_GET['code'])){
//          //觸發微信返回code碼
//          $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
//          $url = $this->__CreateOauthUrlForCode($baseUrl);
//          Header("Location: $url");
//          exit();
//      } else {
//          //獲取code碼,以獲取openid
//          $code = $_GET['code'];
//          $openid = $this->getOpenidFromMp($code);
//          return $openid;
//      }
    }

    /**
     *
     * 獲取jsapi支付的參數
     *
     * @param array $UnifiedOrderResult 統一支付接口返回的數據
     *
     * @throws WxPayException
     *
     * @return json數據,可直接填入js函數作爲參數
     */
    public function GetJsApiParameters($UnifiedOrderResult)
    {
        if (!array_key_exists("appid", $UnifiedOrderResult)
            || !array_key_exists("prepay_id", $UnifiedOrderResult)
            || $UnifiedOrderResult['prepay_id'] == "") {
            throw new WxPayException("參數錯誤");
        }

        $jsapi = new WxPayJsApiPay();
        $jsapi->SetAppid($UnifiedOrderResult["appid"]);
        $timeStamp = time();
        $jsapi->SetTimeStamp("$timeStamp");
        $jsapi->SetNonceStr(WxPayApi::getNonceStr());
        $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
        $jsapi->SetSignType("MD5");
        $jsapi->SetPaySign($jsapi->MakeSign());
        $parameters = json_encode($jsapi->GetValues());
        return $parameters;
    }

    /**
     *
     * 通過code從工作平臺獲取openid機器access_token
     *
     * @param string $code 微信跳轉回來帶上的code
     *
     * @return openid
     */
    public function GetOpenidFromMp($code)
    {
        $url = $this->__CreateOauthUrlForOpenid($code);
        //初始化curl
        $ch = curl_init();
        //設置超時
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        if (WxPayConfig::CURL_PROXY_HOST != "0.0.0.0"
            && WxPayConfig::CURL_PROXY_PORT != 0) {
            curl_setopt($ch, CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST);
            curl_setopt($ch, CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT);
        }
        //運行curl,結果以jason形式返回
        $res = curl_exec($ch);
        curl_close($ch);
        //取出openid
        $data = json_decode($res, true);
        $this->data = $data;
        $openid = $data['openid'];
        return $openid;
    }

    /**
     *
     * 拼接簽名字符串
     *
     * @param array $urlObj
     *
     * @return 返回已經拼接好的字符串
     */
    private function ToUrlParams($urlObj)
    {
        $buff = "";
        foreach ($urlObj as $k => $v) {
            if ($k != "sign") {
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }

    /**
     *
     * 獲取地址js參數
     *
     * @return 獲取共享收貨地址js函數需要的參數,json格式可以直接做參數使用
     */
    public function GetEditAddressParameters()
    {
        $config = config('wechat.' . config('wechat_account'));
        $getData = $this->data;
        $data = array();
        $data["appid"] = $config['wechat_appid'];
        $data["url"] = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $time = time();
        $data["timestamp"] = "$time";
        $data["noncestr"] = "1234568";
        $data["accesstoken"] = $getData["access_token"];
        ksort($data);
        $params = $this->ToUrlParams($data);
        $addrSign = sha1($params);
        $afterData = array(
            "addrSign" => $addrSign,
            "signType" => "sha1",
            "scope" => "jsapi_address",
            "appId" => $config['wechat_appid'],
            "timeStamp" => $data["timestamp"],
            "nonceStr" => $data["noncestr"]
        );
        $parameters = json_encode($afterData);
        return $parameters;
    }

    /**
     *
     * 構造獲取code的url連接
     *
     * @param string $redirectUrl 微信服務器回跳的url,需要url編碼
     *
     * @return 返回構造好的url
     */
    private function __CreateOauthUrlForCode($redirectUrl)
    {
        $config = config('wechat.' . config('wechat_account'));
        $urlObj["appid"] = $config['wechat_appid'];
        $urlObj["redirect_uri"] = "$redirectUrl";
        $urlObj["response_type"] = "code";
        $urlObj["scope"] = "snsapi_base";
        $urlObj["state"] = "STATE" . "#wechat_redirect";
        $bizString = $this->ToUrlParams($urlObj);
        return "https://open.weixin.qq.com/connect/oauth2/authorize?" . $bizString;
    }

    /**
     *
     * 構造獲取open和access_toke的url地址
     *
     * @param string $code,微信跳轉帶回的code
     *
     * @return 請求的url
     */
    private function __CreateOauthUrlForOpenid($code)
    {
        $config = config('wechat.' . config('wechat_account'));
        $urlObj["appid"] = $config['wechat_appid'];
        $urlObj["secret"] = $config['wechat_appsecret'];
        $urlObj["code"] = $code;
        $urlObj["grant_type"] = "authorization_code";
        $bizString = $this->ToUrlParams($urlObj);
        return "https://api.weixin.qq.com/sns/oauth2/access_token?" . $bizString;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章