• <menuitem id="yrf2h"><source id="yrf2h"></source></menuitem>
      <blockquote id="yrf2h"></blockquote>
      刷卡支付測試<\/body>\r\n   1000<\/device_info>\r\n   <\/goods_tag>\r\n   10000100<\/mch_id>\r\n   8aaee146b1dee7cec9100add9b96cbe2<\/nonce_str>\r\n   1415757673<\/out_trade_no>\r\n   14.17.22.52<\/spbill_create_ip>\r\n   <\/time_expire>\r\n   1<\/total_fee>\r\n   C29DB7DB1FD4136B84AE35604756362C<\/sign>\r\n<\/xml><\/pre>

      注:參數(shù)值用XML轉(zhuǎn)義即可,CDATA標簽用于說明數(shù)據(jù)不被XML解析器解析。<\/p>

      返回結(jié)果<\/h3>

      名稱 變量名 必填 類型 示例值 描述<\/p>

        <\/td><\/td><\/td><\/td><\/td><\/td><\/tr>
        返回狀態(tài)碼<\/td>return_code<\/td>是<\/td>String(16)<\/td>SUCCESS<\/td>SUCCESS\/FAIL 此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷<\/td><\/tr>
        返回信息<\/td>return_msg<\/td>否<\/td>String(128)<\/td>簽名失敗<\/td>返回信息,如非空,為錯誤原因 簽名失敗 參數(shù)格式校驗錯誤<\/td><\/tr><\/tbody><\/table>

        當return_code為SUCCESS的時候,還會包括以下字段:<\/p>

        名稱 變量名 必填 類型 示例值 描述<\/p>

            <\/td><\/td><\/td><\/td><\/td><\/td><\/tr>
            公眾賬號ID<\/td>appid<\/td>是<\/td>String(32)<\/td>wx8888888888888888<\/td>調(diào)用接口提交的公眾賬號ID<\/td><\/tr>
            商戶號<\/td>mch_id<\/td>是<\/td>String(32)<\/td>1900000109<\/td>調(diào)用接口提交的商戶號<\/td><\/tr>
            設備號<\/td>device_info<\/td>否<\/td>String(32)<\/td>013467007045764<\/td>調(diào)用接口提交的終端設備號,<\/td><\/tr>
            隨機字符串<\/td>nonce_str<\/td>是<\/td>String(32)<\/td>5K8264ILTKCH16CQ2502SI8ZNMTM67VS<\/td>微信返回的隨機字符串<\/td><\/tr>
            簽名<\/td>sign<\/td>是<\/td>String(32)<\/td>C380BEC2BFD727A4B6845133519F3AD6<\/td>微信返回的簽名,詳見簽名生成算法<\/td><\/tr>
            業(yè)務結(jié)果<\/td>result_code<\/td>是<\/td>String(16)<\/td>SUCCESS<\/td>SUCCESS\/FAIL<\/td><\/tr>
            錯誤代碼<\/td>err_code<\/td>否<\/td>String(32)<\/td>SYSTEMERROR<\/td>詳細參見錯誤列表<\/td><\/tr>
            錯誤代碼描述<\/td>err_code_des<\/td>否<\/td>String(128)<\/td>系統(tǒng)錯誤<\/td>錯誤返回的信息描述<\/td><\/tr><\/tbody><\/table>

            當return_code 和result_code都為SUCCESS的時,還會包括以下字段:<\/p>

            名稱 變量名 必填 類型 示例值 描述<\/p>

              • <tr id="cgum6"></tr>
                <\/td><\/td><\/td><\/td><\/td><\/td><\/tr>
                用戶標識<\/td>openid<\/td>是<\/td>String(128)<\/td>Y<\/td>用戶在商戶appid 下的唯一標識<\/td><\/tr>
                是否關(guān)注公眾賬號<\/td>is_subscribe<\/td>是<\/td>String(1)<\/td>Y<\/td>用戶是否關(guān)注公眾賬號,僅在公眾賬號類型支付有效,取值范圍:Y或N;Y-關(guān)注;N-未關(guān)注<\/td><\/tr>
                交易類型<\/td>trade_type<\/td>是<\/td>String(16)<\/td>MICROPAY<\/td>支付類型為MICROPAY(即掃碼支付)<\/td><\/tr>
                付款銀行<\/td>bank_type<\/td>是<\/td>String(16)<\/td>CMC<\/td>銀行類型,采用字符串類型的銀行標識,值列表詳見銀行類型<\/td><\/tr>
                貨幣類型<\/td>fee_type<\/td>否<\/td>String(16)<\/td>CNY<\/td>符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型<\/td><\/tr>
                訂單金額<\/td>total_fee<\/td>是<\/td>Int<\/td>888<\/td>訂單總金額,單位為分,只能為整數(shù),詳見支付金額<\/td><\/tr>
                現(xiàn)金支付貨幣類型<\/td>cash_fee_type<\/td>否<\/td>String(16)<\/td>CNY<\/td>符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型<\/td><\/tr>
                現(xiàn)金支付金額<\/td>cash_fee<\/td>是<\/td>Int<\/td>100<\/td>訂單現(xiàn)金支付金額,詳見支付金額<\/td><\/tr>
                微信支付訂單號<\/td>transaction_id<\/td>是<\/td>String(32)<\/td>1217752501201407033233368018<\/td>微信支付訂單號<\/td><\/tr>
                商戶訂單號<\/td>out_trade_no<\/td>是<\/td>String(32)<\/td>1217752501201407033233368018<\/td>商戶系統(tǒng)的訂單號,與請求一致。<\/td><\/tr>
                商家數(shù)據(jù)包<\/td>attach<\/td>否<\/td>String(128)<\/td>123456<\/td>商家數(shù)據(jù)包,原樣返回<\/td><\/tr>
                支付完成時間<\/td>time_end<\/td>是<\/td>String(14)<\/td>20141030133525<\/td>訂單生成時間,格式為yyyyMMddHHmmss,如2009年12月25日9點10分10秒表示為20091225091010。詳見時間規(guī)則<\/td><\/tr><\/tbody><\/table>

                舉例如下:<\/p>

                \r\n   <\/return_code>\r\n   <\/return_msg>\r\n   <\/appid>\r\n   <\/mch_id>\r\n   <\/device_info>\r\n   <\/nonce_str>\r\n   <\/sign>\r\n   <\/result_code>\r\n   <\/openid>\r\n   <\/is_subscribe>\r\n   <\/trade_type>\r\n   <\/bank_type>\r\n   1<\/total_fee>\r\n   0<\/coupon_fee>\r\n   <\/fee_type>\r\n   <\/transaction_id>\r\n   <\/out_trade_no>\r\n   <\/attach>\r\n   <\/time_end>\r\n<\/xml><\/pre>

                二、刷卡支付類實現(xiàn)<\/h2>

                在微信支付原來的微信支付類文件中,仿照統(tǒng)一支付類的方式,添加刷卡支付類如下:<\/p>

                \/**\r\n * 刷卡支付接口類\r\n *\/\r\nclass MicroPay_pub extends Wxpay_client_pub\r\n{    \r\n    function __construct() \r\n    {\r\n        \/\/設置接口鏈接\r\n        $this->url = \"https:\/\/api.mch.weixin.qq.com\/pay\/micropay\";\r\n        \/\/設置curl超時時間\r\n        $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;\r\n    }\r\n    \r\n    \/**\r\n     * 生成接口參數(shù)xml\r\n     *\/\r\n    function createXml()\r\n    {\r\n        try\r\n        {\r\n            \/\/檢測必填參數(shù)\r\n            if($this->parameters[\"out_trade_no\"] == null){\r\n                throw new SDKRuntimeException(\"缺少統(tǒng)一支付接口必填參數(shù)out_trade_no!\".\"
                \");\r\n            }elseif($this->parameters[\"body\"] == null){\r\n                throw new SDKRuntimeException(\"缺少統(tǒng)一支付接口必填參數(shù)body!\".\"
                \");\r\n            }elseif ($this->parameters[\"total_fee\"] == null ) {\r\n                throw new SDKRuntimeException(\"缺少統(tǒng)一支付接口必填參數(shù)total_fee!\".\"
                \");\r\n            }elseif ($this->parameters[\"auth_code\"] == null) {\r\n                throw new SDKRuntimeException(\"缺少統(tǒng)一支付接口必填參數(shù)auth_code!\".\"
                \");\r\n            }\r\n               $this->parameters[\"appid\"] = WxPayConf_pub::APPID;\/\/公眾賬號ID\r\n               $this->parameters[\"mch_id\"] = WxPayConf_pub::MCHID;\/\/商戶號\r\n               $this->parameters[\"spbill_create_ip\"] = $_SERVER['REMOTE_ADDR'];\/\/終端ip        \r\n            $this->parameters[\"nonce_str\"] = $this->createNoncestr();\/\/隨機字符串\r\n            $this->parameters[\"sign\"] = $this->getSign($this->parameters);\/\/簽名\r\n            \/\/ var_dump($this->parameters);\r\n            return  $this->arrayToXml($this->parameters);\r\n        }catch (SDKRuntimeException $e)\r\n        {\r\n            die($e->errorMessage());\r\n        }\r\n    }\r\n}<\/pre>

                原有的基礎(chǔ)類和請求類也列出如下:<\/p>

                \/**\r\n * 所有接口的基類\r\n *\/\r\nclass Common_util_pub\r\n{\r\n    function __construct() {\r\n    }\r\n\r\n    function trimString($value)\r\n    {\r\n        $ret = null;\r\n        if (null != $value) \r\n        {\r\n            $ret = $value;\r\n            if (strlen($ret) == 0) \r\n            {\r\n                $ret = null;\r\n            }\r\n        }\r\n        return $ret;\r\n    }\r\n    \r\n    \/**\r\n     *     作用:產(chǎn)生隨機字符串,不長于32位\r\n     *\/\r\n    public function createNoncestr( $length = 32 ) \r\n    {\r\n        $chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";  \r\n        $str =\"\";\r\n        for ( $i = 0; $i < $length; $i++ )  {  \r\n            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  \r\n        }  \r\n        return $str;\r\n    }\r\n    \r\n    \/**\r\n     *     作用:格式化參數(shù),簽名過程需要使用\r\n     *\/\r\n    function formatBizQueryParaMap($paraMap, $urlencode)\r\n    {\r\n        $buff = \"\";\r\n        ksort($paraMap);\r\n        foreach ($paraMap as $k => $v)\r\n        {\r\n            if($urlencode)\r\n            {\r\n               $v = urlencode($v);\r\n            }\r\n            \/\/$buff .= strtolower($k) . \"=\" . $v . \"&\";\r\n            $buff .= $k . \"=\" . $v . \"&\";\r\n        }\r\n        $reqPar;\r\n        if (strlen($buff) > 0) \r\n        {\r\n            $reqPar = substr($buff, 0, strlen($buff)-1);\r\n        }\r\n        return $reqPar;\r\n    }\r\n    \r\n    \/**\r\n     *     作用:生成簽名\r\n     *\/\r\n    public function getSign($Obj)\r\n    {\r\n        foreach ($Obj as $k => $v)\r\n        {\r\n            $Parameters[$k] = $v;\r\n        }\r\n        \/\/簽名步驟一:按字典序排序參數(shù)\r\n        ksort($Parameters);\r\n        $String = $this->formatBizQueryParaMap($Parameters, false);\r\n        \/\/echo '【string1】'.$String.'<\/br>';\r\n        \/\/簽名步驟二:在string后加入KEY\r\n        $String = $String.\"&key=\".WxPayConf_pub::KEY;\r\n        \/\/echo \"【string2】\".$String.\"<\/br>\";\r\n        \/\/簽名步驟三:MD5加密\r\n        $String = md5($String);\r\n        \/\/echo \"【string3】 \".$String.\"<\/br>\";\r\n        \/\/簽名步驟四:所有字符轉(zhuǎn)為大寫\r\n        $result_ = strtoupper($String);\r\n        \/\/echo \"【result】 \".$result_.\"<\/br>\";\r\n        return $result_;\r\n    }\r\n    \r\n    \/**\r\n     *     作用:array轉(zhuǎn)xml\r\n     *\/\r\n    function arrayToXml($arr)\r\n    {\r\n        $xml = \"\";\r\n        foreach ($arr as $key=>$val)\r\n        {\r\n             if (is_numeric($val))\r\n             {\r\n                 $xml.=\"<\".$key.\">\".$val.\"<\/\".$key.\">\"; \r\n\r\n             }\r\n             else\r\n                 $xml.=\"<\".$key.\"><\/\".$key.\">\";  \r\n        }\r\n        $xml.=\"<\/xml>\";\r\n        return $xml; \r\n    }\r\n    \r\n    \/**\r\n     *     作用:將xml轉(zhuǎn)為array\r\n     *\/\r\n    public function xmlToArray($xml)\r\n    {        \r\n        \/\/將XML轉(zhuǎn)為array        \r\n        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);        \r\n        return $array_data;\r\n    }\r\n\r\n    \/**\r\n     *     作用:以post方式提交xml到對應的接口url\r\n     *\/\r\n    public function postXmlCurl($xml,$url,$second=30)\r\n    {        \r\n        \/\/初始化curl        \r\n           $ch = curl_init();\r\n        \/\/設置超時\r\n        curl_setopt($ch, CURLOP_TIMEOUT, $second);\r\n        \/\/這里設置代理,如果有的話\r\n        \/\/curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');\r\n        \/\/curl_setopt($ch,CURLOPT_PROXYPORT, 8080);\r\n        curl_setopt($ch,CURLOPT_URL, $url);\r\n        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);\r\n        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);\r\n        \/\/設置header\r\n        curl_setopt($ch, CURLOPT_HEADER, FALSE);\r\n        \/\/要求結(jié)果為字符串且輸出到屏幕上\r\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);\r\n        \/\/post提交方式\r\n        curl_setopt($ch, CURLOPT_POST, TRUE);\r\n        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);\r\n        \/\/運行curl\r\n        $data = curl_exec($ch);\r\n        curl_close($ch);\r\n        \/\/返回結(jié)果\r\n        if($data)\r\n        {\r\n            curl_close($ch);\r\n            return $data;\r\n        }\r\n        else \r\n        { \r\n            $error = curl_errno($ch);\r\n            echo \"curl出錯,錯誤碼:$error\".\"
                \"; \r\n            echo \"錯誤原因查詢<\/a><\/br>\";\r\n            curl_close($ch);\r\n            return false;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     *     作用:使用證書,以post方式提交xml到對應的接口url\r\n     *\/\r\n    function postXmlSSLCurl($xml,$url,$second=30)\r\n    {\r\n        $ch = curl_init();\r\n        \/\/超時時間\r\n        curl_setopt($ch,CURLOPT_TIMEOUT,$second);\r\n        \/\/這里設置代理,如果有的話\r\n        \/\/curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');\r\n        \/\/curl_setopt($ch,CURLOPT_PROXYPORT, 8080);\r\n        curl_setopt($ch,CURLOPT_URL, $url);\r\n        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);\r\n        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);\r\n        \/\/設置header\r\n        curl_setopt($ch,CURLOPT_HEADER,FALSE);\r\n        \/\/要求結(jié)果為字符串且輸出到屏幕上\r\n        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);\r\n        \/\/設置證書\r\n        \/\/使用證書:cert 與 key 分別屬于兩個.pem文件\r\n        \/\/默認格式為PEM,可以注釋\r\n        curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');\r\n        curl_setopt($ch,CURLOPT_SSLCERT, dirname(__FILE__).WxPayConf_pub::SSLCERT_PATH);\r\n        \/\/默認格式為PEM,可以注釋\r\n        curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');\r\n        curl_setopt($ch,CURLOPT_SSLKEY, dirname(__FILE__).WxPayConf_pub::SSLKEY_PATH);\r\n        \/\/post提交方式\r\n        curl_setopt($ch,CURLOPT_POST, true);\r\n        curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);\r\n        $data = curl_exec($ch);\r\n        \/\/返回結(jié)果\r\n        if($data){\r\n            curl_close($ch);\r\n            return $data;\r\n        }\r\n        else { \r\n            $error = curl_errno($ch);\r\n            echo \"curl出錯,錯誤碼:$error\".\"
                \"; \r\n            echo \"錯誤原因查詢<\/a><\/br>\";\r\n            curl_close($ch);\r\n            return false;\r\n        }\r\n    }\r\n    \r\n    \/**\r\n     *     作用:打印數(shù)組\r\n     *\/\r\n    function printErr($wording='',$err='')\r\n    {\r\n        print_r('
                ');\r\n        echo $wording.\"<\/br>\";\r\n        var_dump($err);\r\n        print_r('<\/pre>');\r\n    }\r\n}\r\n\r\n\/**\r\n * 請求型接口的基類\r\n *\/\r\nclass Wxpay_client_pub extends Common_util_pub \r\n{\r\n    var $parameters;\/\/請求參數(shù),類型為關(guān)聯(lián)數(shù)組\r\n    public $response;\/\/微信返回的響應\r\n    public $result;\/\/返回參數(shù),類型為關(guān)聯(lián)數(shù)組\r\n    var $url;\/\/接口鏈接\r\n    var $curl_timeout;\/\/curl超時時間\r\n    \r\n    \/**\r\n     *     作用:設置請求參數(shù)\r\n     *\/\r\n    function setParameter($parameter, $parameterValue)\r\n    {\r\n        $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);\r\n    }\r\n    \r\n    \/**\r\n     *     作用:設置標配的請求參數(shù),生成簽名,生成接口參數(shù)xml\r\n     *\/\r\n    function createXml()\r\n    {\r\n           $this->parameters[\"appid\"] = WxPayConf_pub::APPID;\/\/公眾賬號ID\r\n           $this->parameters[\"mch_id\"] = WxPayConf_pub::MCHID;\/\/商戶號\r\n        $this->parameters[\"nonce_str\"] = $this->createNoncestr();\/\/隨機字符串\r\n        $this->parameters[\"sign\"] = $this->getSign($this->parameters);\/\/簽名\r\n        return  $this->arrayToXml($this->parameters);\r\n    }\r\n    \r\n    \/**\r\n     *     作用:post請求xml\r\n     *\/\r\n    function postXml()\r\n    {\r\n        $xml = $this->createXml();\r\n        $this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);\r\n        return $this->response;\r\n    }\r\n    \r\n    \/**\r\n     *     作用:使用證書post請求xml\r\n     *\/\r\n    function postXmlSSL()\r\n    {    \r\n        $xml = $this->createXml();\r\n        $this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout);\r\n        return $this->response;\r\n    }\r\n\r\n    \/**\r\n     *     作用:獲取結(jié)果,默認不使用證書\r\n     *\/\r\n    function getResult() \r\n    {        \r\n        $this->postXml();\r\n        $this->result = $this->xmlToArray($this->response);\r\n        return $this->result;\r\n    }\r\n}<\/pre>

                三、發(fā)起支付<\/h2>

                在程序中,獲得用戶的授權(quán)碼,并填入到$authcode參數(shù)中。授權(quán)碼就是條碼上的那一串18位純數(shù)字,以10、11、12、13、14、15開頭<\/p>

                其他參數(shù)則自動生成或者手動輸入指定。<\/p>

                調(diào)用函數(shù)如下所示<\/p>

                        \/\/全局引入微信支付類\r\n        Vendor('Wxpay.WxPayPubHelper.WxPayPubHelper');\r\n        \/\/使用統(tǒng)一支付接口\r\n        $microPay = new \\MicroPay_pub();\r\n        \/\/設置統(tǒng)一支付接口參數(shù)\r\n        $microPay->setParameter(\"body\",\"方倍商戶刷卡支付\");\/\/商品描述\r\n        $microPay->setParameter(\"out_trade_no\", \"$out_trade_no\");\/\/商戶訂單號 \r\n        $microPay->setParameter(\"total_fee\", $total_fee);\/\/總金額  \r\n        $microPay->setParameter(\"auth_code\", $authcode);\/\/授權(quán)碼\r\n\r\n        \/\/獲取統(tǒng)一支付接口結(jié)果\r\n        $microPayResult = $microPay->getResult();\r\n\r\n        \/\/3. 異常判斷\r\n        if (!isset($microPayResult[\"result_code\"]) || ($microPayResult[\"result_code\"] == \"FAIL\")) {\r\n            $this->resRpcError(isset($microPayResult['result_code']) ? $microPayResult['err_code_des'] : $microPayResult['return_msg'], \"21000\");\r\n        }<\/pre>

                【相關(guān)推薦】<\/p>\n

                1. 微信公眾號平臺源碼下載<\/a><\/p>\n

                2.?分享微信公眾號開發(fā)刷卡支付的實例教程<\/a><\/p>\n

                3.?微信開發(fā)之微信支付<\/a><\/p>\n

                4.?詳解微信小程序支付功能開發(fā)錯誤總結(jié)<\/a><\/p>"}

                亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

                目錄
                一、刷卡支付API
                接口地址
                輸入?yún)?shù)
                返回結(jié)果
                二、刷卡支付類實現(xiàn)
                三、發(fā)起支付
                首頁 微信小程序 微信開發(fā) 詳解微信支付開發(fā)之刷卡支付實例

                詳解微信支付開發(fā)之刷卡支付實例

                May 12, 2018 am 10:32 AM

                本文介紹微信支付下的刷卡支付的開發(fā)過程。微信刷卡支付是指用戶打開微信錢包的刷卡的界面,商戶掃碼后提交完成支付的支付過程。

                ?微信支付開發(fā)(7) 刷卡支付0微信支付開發(fā)(7) 刷卡支付1

                一、刷卡支付API

                接口地址

                api.mch.weixin.qq.com/pay/micropay

                是否需要證書

                不需要。

                輸入?yún)?shù)

                名稱 變量名 必填 類型 示例值 描述







                公眾賬號IDappidString(32)wx8888888888888888微信分配的公眾賬號ID(企業(yè)號corpid即為此appId)
                商戶號mch_idString(32)1900000109微信支付分配的商戶號
                設備號device_infoString(32)013467007045764終端設備號(商戶自定義,如門店編號)
                隨機字符串nonce_strString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS隨機字符串,不長于32位。推薦隨機數(shù)生成算法
                簽名signString(32)C380BEC2BFD727A4B6845133519F3AD6簽名,詳見簽名生成算法
                商品描述bodyString(128)image形象店-深圳騰大- QQ公仔商品簡單描述,該字段須嚴格按照規(guī)范傳遞,具體請見參數(shù)規(guī)定
                商品詳情detailString(6000)
                {
                "goods_detail":[
                {
                "goods_id":"iphone6s_16G",
                "wxpay_goods_id":"1001",
                "goods_name":"iPhone6s 16G",
                "goods_num":1,
                "price":528800,
                "goods_category":"123456",
                "body":"蘋果手機"
                },
                {
                "goods_id":"iphone6s_32G",
                "wxpay_goods_id":"1002",
                "goods_name":"iPhone6s 32G",
                "quantity":1,
                "price":608800,
                "goods_category":"123789",
                "body":"蘋果手機"
                }
                ]
                }

                商品詳細列表,使用Json格式,傳輸簽名前請務必使用CDATA標簽將JSON文本串保護起來。

                goods_detail []:
                └ goods_id String 必填 32 商品的編號
                └ wxpay_goods_id String 可選 32 微信支付定義的統(tǒng)一商品編號
                └ goods_name String 必填 256 商品名稱
                └ goods_num Int 必填 商品數(shù)量
                └ price Int 必填 商品單價,單位為分
                └ goods_category String 可選 32 商品類目ID
                └ body String 可選 1000 商品描述信息

                附加數(shù)據(jù)attachString(127)說明附加數(shù)據(jù),在查詢API和支付通知中原樣返回,該字段主要用于商戶攜帶訂單的自定義數(shù)據(jù)
                商戶訂單號out_trade_noString(32)1217752501201407033233368018商戶系統(tǒng)內(nèi)部的訂單號,32個字符內(nèi)、可包含字母,其他說明見商戶訂單號
                商品詳情detailString(8192)與提交數(shù)據(jù)一致

                實際提交的返回

                訂單金額total_feeInt888訂單總金額,單位為分,只能為整數(shù),詳見支付金額
                貨幣類型fee_typeString(16)CNY符合ISO4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
                終端IPspbill_create_ipString(16)8.8.8.8調(diào)用微信支付API的機器IP
                商品標記goods_tagString(32) 商品標記,代金券或立減優(yōu)惠功能的參數(shù),說明詳見代金券或立減優(yōu)惠
                指定支付方式limit_payString(32)no_creditno_credit--指定不能使用信用卡支付
                授權(quán)碼auth_codeString(128)120061098828009406掃碼支付授權(quán)碼,設備讀取用戶微信中的條碼或者二維碼信息

                舉例如下:

                <xml>
                   <appid>wx2421b1c4370ec43b</appid>
                   <attach>訂單額外描述</attach>
                   <auth_code>120269300684844649</auth_code>
                   <body>刷卡支付測試</body>
                   <device_info>1000</device_info>
                   <goods_tag></goods_tag>
                   <mch_id>10000100</mch_id>
                   <nonce_str>8aaee146b1dee7cec9100add9b96cbe2</nonce_str>
                   <out_trade_no>1415757673</out_trade_no>
                   <spbill_create_ip>14.17.22.52</spbill_create_ip>
                   <time_expire></time_expire>
                   <total_fee>1</total_fee>
                   <sign>C29DB7DB1FD4136B84AE35604756362C</sign>
                </xml>

                注:參數(shù)值用XML轉(zhuǎn)義即可,CDATA標簽用于說明數(shù)據(jù)不被XML解析器解析。

                返回結(jié)果

                名稱 變量名 必填 類型 示例值 描述







                返回狀態(tài)碼return_codeString(16)SUCCESSSUCCESS/FAIL
                此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷
                返回信息return_msgString(128)簽名失敗返回信息,如非空,為錯誤原因
                簽名失敗
                參數(shù)格式校驗錯誤

                當return_code為SUCCESS的時候,還會包括以下字段:

                名稱 變量名 必填 類型 示例值 描述







                公眾賬號IDappidString(32)wx8888888888888888調(diào)用接口提交的公眾賬號ID
                商戶號mch_idString(32)1900000109調(diào)用接口提交的商戶號
                設備號device_infoString(32)013467007045764調(diào)用接口提交的終端設備號,
                隨機字符串nonce_strString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的隨機字符串
                簽名signString(32)C380BEC2BFD727A4B6845133519F3AD6微信返回的簽名,詳見簽名生成算法
                業(yè)務結(jié)果result_codeString(16)SUCCESSSUCCESS/FAIL
                錯誤代碼err_codeString(32)SYSTEMERROR詳細參見錯誤列表
                錯誤代碼描述err_code_desString(128)系統(tǒng)錯誤錯誤返回的信息描述

                當return_code 和result_code都為SUCCESS的時,還會包括以下字段:

                名稱 變量名 必填 類型 示例值 描述







                用戶標識openidString(128)Y用戶在商戶appid 下的唯一標識
                是否關(guān)注公眾賬號is_subscribeString(1)Y用戶是否關(guān)注公眾賬號,僅在公眾賬號類型支付有效,取值范圍:Y或N;Y-關(guān)注;N-未關(guān)注
                交易類型trade_typeString(16)MICROPAY支付類型為MICROPAY(即掃碼支付)
                付款銀行bank_typeString(16)CMC銀行類型,采用字符串類型的銀行標識,值列表詳見銀行類型
                貨幣類型fee_typeString(16)CNY符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
                訂單金額total_feeInt888訂單總金額,單位為分,只能為整數(shù),詳見支付金額
                現(xiàn)金支付貨幣類型cash_fee_typeString(16)CNY符合ISO 4217標準的三位字母代碼,默認人民幣:CNY,其他值列表詳見貨幣類型
                現(xiàn)金支付金額cash_feeInt100訂單現(xiàn)金支付金額,詳見支付金額
                微信支付訂單號transaction_idString(32)1217752501201407033233368018微信支付訂單號
                商戶訂單號out_trade_noString(32)1217752501201407033233368018商戶系統(tǒng)的訂單號,與請求一致。
                商家數(shù)據(jù)包attachString(128)123456商家數(shù)據(jù)包,原樣返回
                支付完成時間time_endString(14)20141030133525訂單生成時間,格式為yyyyMMddHHmmss,如2009年12月25日9點10分10秒表示為20091225091010。詳見時間規(guī)則

                舉例如下:

                <xml>
                   <return_code><![CDATA[SUCCESS]]></return_code>
                   <return_msg><![CDATA[OK]]></return_msg>
                   <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
                   <mch_id><![CDATA[10000100]]></mch_id>
                   <device_info><![CDATA[1000]]></device_info>
                   <nonce_str><![CDATA[GOp3TRyMXzbMlkun]]></nonce_str>
                   <sign><![CDATA[D6C76CB785F07992CDE05494BB7DF7FD]]></sign>
                   <result_code><![CDATA[SUCCESS]]></result_code>
                   <openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>
                   <is_subscribe><![CDATA[Y]]></is_subscribe>
                   <trade_type><![CDATA[MICROPAY]]></trade_type>
                   <bank_type><![CDATA[CCB_DEBIT]]></bank_type>
                   <total_fee>1</total_fee>
                   <coupon_fee>0</coupon_fee>
                   <fee_type><![CDATA[CNY]]></fee_type>
                   <transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>
                   <out_trade_no><![CDATA[1415757673]]></out_trade_no>
                   <attach><![CDATA[訂單額外描述]]></attach>
                   <time_end><![CDATA[20141111170043]]></time_end>
                </xml>

                二、刷卡支付類實現(xiàn)

                在微信支付原來的微信支付類文件中,仿照統(tǒng)一支付類的方式,添加刷卡支付類如下:

                /**
                 * 刷卡支付接口類
                 */
                class MicroPay_pub extends Wxpay_client_pub
                {    
                    function __construct() 
                    {
                        //設置接口鏈接
                        $this->url = "https://api.mch.weixin.qq.com/pay/micropay";
                        //設置curl超時時間
                        $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
                    }
                    
                    /**
                     * 生成接口參數(shù)xml
                     */
                    function createXml()
                    {
                        try
                        {
                            //檢測必填參數(shù)
                            if($this->parameters["out_trade_no"] == null){
                                throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)out_trade_no!"."<br>");
                            }elseif($this->parameters["body"] == null){
                                throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)body!"."<br>");
                            }elseif ($this->parameters["total_fee"] == null ) {
                                throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)total_fee!"."<br>");
                            }elseif ($this->parameters["auth_code"] == null) {
                                throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)auth_code!"."<br>");
                            }
                               $this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
                               $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
                               $this->parameters["spbill_create_ip"] = $_SERVER[&#39;REMOTE_ADDR&#39;];//終端ip        
                            $this->parameters["nonce_str"] = $this->createNoncestr();//隨機字符串
                            $this->parameters["sign"] = $this->getSign($this->parameters);//簽名
                            // var_dump($this->parameters);
                            return  $this->arrayToXml($this->parameters);
                        }catch (SDKRuntimeException $e)
                        {
                            die($e->errorMessage());
                        }
                    }
                }

                原有的基礎(chǔ)類和請求類也列出如下:

                /**
                 * 所有接口的基類
                 */
                class Common_util_pub
                {
                    function __construct() {
                    }
                
                    function trimString($value)
                    {
                        $ret = null;
                        if (null != $value) 
                        {
                            $ret = $value;
                            if (strlen($ret) == 0) 
                            {
                                $ret = null;
                            }
                        }
                        return $ret;
                    }
                    
                    /**
                     *     作用:產(chǎn)生隨機字符串,不長于32位
                     */
                    public function createNoncestr( $length = 32 ) 
                    {
                        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
                        $str ="";
                        for ( $i = 0; $i < $length; $i++ )  {  
                            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
                        }  
                        return $str;
                    }
                    
                    /**
                     *     作用:格式化參數(shù),簽名過程需要使用
                     */
                    function formatBizQueryParaMap($paraMap, $urlencode)
                    {
                        $buff = "";
                        ksort($paraMap);
                        foreach ($paraMap as $k => $v)
                        {
                            if($urlencode)
                            {
                               $v = urlencode($v);
                            }
                            //$buff .= strtolower($k) . "=" . $v . "&";
                            $buff .= $k . "=" . $v . "&";
                        }
                        $reqPar;
                        if (strlen($buff) > 0) 
                        {
                            $reqPar = substr($buff, 0, strlen($buff)-1);
                        }
                        return $reqPar;
                    }
                    
                    /**
                     *     作用:生成簽名
                     */
                    public function getSign($Obj)
                    {
                        foreach ($Obj as $k => $v)
                        {
                            $Parameters[$k] = $v;
                        }
                        //簽名步驟一:按字典序排序參數(shù)
                        ksort($Parameters);
                        $String = $this->formatBizQueryParaMap($Parameters, false);
                        //echo &#39;【string1】&#39;.$String.&#39;</br>&#39;;
                        //簽名步驟二:在string后加入KEY
                        $String = $String."&key=".WxPayConf_pub::KEY;
                        //echo "【string2】".$String."</br>";
                        //簽名步驟三:MD5加密
                        $String = md5($String);
                        //echo "【string3】 ".$String."</br>";
                        //簽名步驟四:所有字符轉(zhuǎn)為大寫
                        $result_ = strtoupper($String);
                        //echo "【result】 ".$result_."</br>";
                        return $result_;
                    }
                    
                    /**
                     *     作用:array轉(zhuǎn)xml
                     */
                    function arrayToXml($arr)
                    {
                        $xml = "<xml>";
                        foreach ($arr as $key=>$val)
                        {
                             if (is_numeric($val))
                             {
                                 $xml.="<".$key.">".$val."</".$key.">"; 
                
                             }
                             else
                                 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
                        }
                        $xml.="</xml>";
                        return $xml; 
                    }
                    
                    /**
                     *     作用:將xml轉(zhuǎn)為array
                     */
                    public function xmlToArray($xml)
                    {        
                        //將XML轉(zhuǎn)為array        
                        $array_data = json_decode(json_encode(simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA)), true);        
                        return $array_data;
                    }
                
                    /**
                     *     作用:以post方式提交xml到對應的接口url
                     */
                    public function postXmlCurl($xml,$url,$second=30)
                    {        
                        //初始化curl        
                           $ch = curl_init();
                        //設置超時
                        curl_setopt($ch, CURLOP_TIMEOUT, $second);
                        //這里設置代理,如果有的話
                        //curl_setopt($ch,CURLOPT_PROXY, &#39;8.8.8.8&#39;);
                        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
                        curl_setopt($ch,CURLOPT_URL, $url);
                        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
                        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
                        //設置header
                        curl_setopt($ch, CURLOPT_HEADER, FALSE);
                        //要求結(jié)果為字符串且輸出到屏幕上
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                        //post提交方式
                        curl_setopt($ch, CURLOPT_POST, TRUE);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
                        //運行curl
                        $data = curl_exec($ch);
                        curl_close($ch);
                        //返回結(jié)果
                        if($data)
                        {
                            curl_close($ch);
                            return $data;
                        }
                        else 
                        { 
                            $error = curl_errno($ch);
                            echo "curl出錯,錯誤碼:$error"."<br>"; 
                            echo "<a href=&#39;http://curl.haxx.se/libcurl/c/libcurl-errors.html&#39;>錯誤原因查詢</a></br>";
                            curl_close($ch);
                            return false;
                        }
                    }
                
                    /**
                     *     作用:使用證書,以post方式提交xml到對應的接口url
                     */
                    function postXmlSSLCurl($xml,$url,$second=30)
                    {
                        $ch = curl_init();
                        //超時時間
                        curl_setopt($ch,CURLOPT_TIMEOUT,$second);
                        //這里設置代理,如果有的話
                        //curl_setopt($ch,CURLOPT_PROXY, &#39;8.8.8.8&#39;);
                        //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
                        curl_setopt($ch,CURLOPT_URL, $url);
                        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
                        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
                        //設置header
                        curl_setopt($ch,CURLOPT_HEADER,FALSE);
                        //要求結(jié)果為字符串且輸出到屏幕上
                        curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
                        //設置證書
                        //使用證書:cert 與 key 分別屬于兩個.pem文件
                        //默認格式為PEM,可以注釋
                        curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
                        curl_setopt($ch,CURLOPT_SSLCERT, dirname(__FILE__).WxPayConf_pub::SSLCERT_PATH);
                        //默認格式為PEM,可以注釋
                        curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
                        curl_setopt($ch,CURLOPT_SSLKEY, dirname(__FILE__).WxPayConf_pub::SSLKEY_PATH);
                        //post提交方式
                        curl_setopt($ch,CURLOPT_POST, true);
                        curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
                        $data = curl_exec($ch);
                        //返回結(jié)果
                        if($data){
                            curl_close($ch);
                            return $data;
                        }
                        else { 
                            $error = curl_errno($ch);
                            echo "curl出錯,錯誤碼:$error"."<br>"; 
                            echo "<a href=&#39;http://curl.haxx.se/libcurl/c/libcurl-errors.html&#39;>錯誤原因查詢</a></br>";
                            curl_close($ch);
                            return false;
                        }
                    }
                    
                    /**
                     *     作用:打印數(shù)組
                     */
                    function printErr($wording=&#39;&#39;,$err=&#39;&#39;)
                    {
                        print_r(&#39;<pre class="brush:php;toolbar:false">&#39;);
                        echo $wording."</br>";
                        var_dump($err);
                        print_r(&#39;
                '); } } /** * 請求型接口的基類 */ class Wxpay_client_pub extends Common_util_pub { var $parameters;//請求參數(shù),類型為關(guān)聯(lián)數(shù)組 public $response;//微信返回的響應 public $result;//返回參數(shù),類型為關(guān)聯(lián)數(shù)組 var $url;//接口鏈接 var $curl_timeout;//curl超時時間 /** * 作用:設置請求參數(shù) */ function setParameter($parameter, $parameterValue) { $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue); } /** * 作用:設置標配的請求參數(shù),生成簽名,生成接口參數(shù)xml */ function createXml() { $this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號 $this->parameters["nonce_str"] = $this->createNoncestr();//隨機字符串 $this->parameters["sign"] = $this->getSign($this->parameters);//簽名 return $this->arrayToXml($this->parameters); } /** * 作用:post請求xml */ function postXml() { $xml = $this->createXml(); $this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout); return $this->response; } /** * 作用:使用證書post請求xml */ function postXmlSSL() { $xml = $this->createXml(); $this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout); return $this->response; } /** * 作用:獲取結(jié)果,默認不使用證書 */ function getResult() { $this->postXml(); $this->result = $this->xmlToArray($this->response); return $this->result; } }

                三、發(fā)起支付

                在程序中,獲得用戶的授權(quán)碼,并填入到$authcode參數(shù)中。授權(quán)碼就是條碼上的那一串18位純數(shù)字,以10、11、12、13、14、15開頭

                其他參數(shù)則自動生成或者手動輸入指定。

                調(diào)用函數(shù)如下所示

                        //全局引入微信支付類
                        Vendor(&#39;Wxpay.WxPayPubHelper.WxPayPubHelper&#39;);
                        //使用統(tǒng)一支付接口
                        $microPay = new \MicroPay_pub();
                        //設置統(tǒng)一支付接口參數(shù)
                        $microPay->setParameter("body","方倍商戶刷卡支付");//商品描述
                        $microPay->setParameter("out_trade_no", "$out_trade_no");//商戶訂單號 
                        $microPay->setParameter("total_fee", $total_fee);//總金額  
                        $microPay->setParameter("auth_code", $authcode);//授權(quán)碼
                
                        //獲取統(tǒng)一支付接口結(jié)果
                        $microPayResult = $microPay->getResult();
                
                        //3. 異常判斷
                        if (!isset($microPayResult["result_code"]) || ($microPayResult["result_code"] == "FAIL")) {
                            $this->resRpcError(isset($microPayResult[&#39;result_code&#39;]) ? $microPayResult[&#39;err_code_des&#39;] : $microPayResult[&#39;return_msg&#39;], "21000");
                        }

                【相關(guān)推薦】

                1. 微信公眾號平臺源碼下載

                2.?分享微信公眾號開發(fā)刷卡支付的實例教程

                3.?微信開發(fā)之微信支付

                4.?詳解微信小程序支付功能開發(fā)錯誤總結(jié)

                以上是詳解微信支付開發(fā)之刷卡支付實例的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

                本站聲明
                本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

                熱AI工具

                Undress AI Tool

                Undress AI Tool

                免費脫衣服圖片

                Undresser.AI Undress

                Undresser.AI Undress

                人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

                AI Clothes Remover

                AI Clothes Remover

                用于從照片中去除衣服的在線人工智能工具。

                Clothoff.io

                Clothoff.io

                AI脫衣機

                Video Face Swap

                Video Face Swap

                使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

                熱工具

                記事本++7.3.1

                記事本++7.3.1

                好用且免費的代碼編輯器

                SublimeText3漢化版

                SublimeText3漢化版

                中文版,非常好用

                禪工作室 13.0.1

                禪工作室 13.0.1

                功能強大的PHP集成開發(fā)環(huán)境

                Dreamweaver CS6

                Dreamweaver CS6

                視覺化網(wǎng)頁開發(fā)工具

                SublimeText3 Mac版

                SublimeText3 Mac版

                神級代碼編輯軟件(SublimeText3)

                熱門話題

                Laravel 教程
                1597
                29
                PHP教程
                1488
                72