精品人人槡人妻人人槡,无码午夜国产视频,日韩精品无码有码视频,国产成人精品日本亚洲成熟

<var id="lf53i"><track id="lf53i"><ins id="lf53i"></ins></track></var>

  • <rp id="lf53i"></rp>
    <var id="lf53i"><track id="lf53i"><ins id="lf53i"></ins></track></var>

    <video id="lf53i"></video>
    <b id="lf53i"><acronym id="lf53i"></acronym></b>

      1. 0712-2888027 189-8648-0214
        微信公眾號(hào)

        孝感風(fēng)信網(wǎng)絡(luò)科技有限公司微信公眾號(hào)

        當(dāng)前位置:主頁 > 技術(shù)支持 > PHP > php中微信支付開發(fā)關(guān)鍵點(diǎn)技術(shù)解析

        php中微信支付開發(fā)關(guān)鍵點(diǎn)技術(shù)解析

        時(shí)間:2015-12-01來源:風(fēng)信官網(wǎng) 點(diǎn)擊: 1019次

        微信支付是由微信及財(cái)付通聯(lián)合推出的移動(dòng)支付創(chuàng)新產(chǎn)品。如今,隨著微信支付的全面開放,相關(guān)需求也越來越多,很多開發(fā)人員進(jìn)行微信支付開發(fā)及 商家申請(qǐng)微信支付時(shí),面臨著諸多疑惑。本文將結(jié)合微信支付接口開發(fā)的實(shí)踐,從支付申請(qǐng)到各主要接口的使用方法等方面介紹微信支付的關(guān)鍵點(diǎn)技術(shù)。

        URL設(shè)置

        目前,微信支付只能由通過微認(rèn)證的服務(wù)號(hào)進(jìn)行申請(qǐng),訂閱號(hào)及未認(rèn)證的服務(wù)號(hào)均無法申請(qǐng)。登錄微信公眾平臺(tái)后臺(tái),在左側(cè)的欄目中可找到“微信支付”,點(diǎn)擊進(jìn)入申請(qǐng)界面,可以看到第一項(xiàng)中的“商戶基本資料”,點(diǎn)擊右側(cè)的“填寫”按鈕后就進(jìn)入了微信支付設(shè)置界面。

        微信支付的目錄及URL沒有固定的設(shè)置方法,具體還需要根據(jù)自己的需求來定,表1是方倍工作室的方案。

        表1 微信支付目錄及URL設(shè)置

        需 要注意的是,如果使用上述方法,要將域名換成自己的域名,其他的結(jié)構(gòu)及層次可不變。這里所有的URL沒有填寫實(shí)際的文件名,目的是為了兼容不同的開發(fā)語言 或框架。比如目錄下的默認(rèn)文件既可能是index.php,也可能是index.aspx。微信支付申請(qǐng)完成后,便進(jìn)入了微信支付測(cè)試階段,需要填寫支付 測(cè)試目錄,測(cè)試目錄可以填寫為:http://www.doucube.com/wxpay/test/。

        接口開發(fā)

        JS API支付

        JS API支付的實(shí)現(xiàn)比較簡單,官方也提供了Demo,在此基礎(chǔ)上修改部分參數(shù)即可。修改后的

        一個(gè)示例如下:

        1. <?php  
        2. include_once("WxPayHelper.php");  
        3. $commonUtil = new CommonUtil();  
        4. $wxPayHelper = new WxPayHelper();  
        5. $wxPayHelper->setParameter("bank_type""WX");  
        6. $wxPayHelper->setParameter("body""微信支付開發(fā)教程");  
        7. $wxPayHelper->setParameter("partner", PARTNERID);  
        8. $wxPayHelper->setParameter("out_trade_no", $commonUtil->create_noncestr());  
        9. $wxPayHelper->setParameter("total_fee""1");  
        10. $wxPayHelper->setParameter("fee_type""1");  
        11. $wxPayHelper->setParameter("notify_url",   
        12. "http://www.doucube.com/wxpay/notify/");  
        13. $wxPayHelper->setParameter("spbill_create_ip", $_SERVER['REMOTE_ADDR']);  
        14. $wxPayHelper->setParameter("input_charset""GBK");  
        15. $biz_package=$wxPayHelper->create_biz_package();  
        16. ?>  

        上述代碼中,主要修改了兩個(gè)參數(shù):notify_url為接收交易通知的路徑,這個(gè)一定要改為自己服務(wù)器上的一個(gè)路徑;spbill_create_ip為用戶客戶端的IP,不改關(guān)系也不大,不過改一下更規(guī)范些。

        JS API支付是網(wǎng)頁內(nèi)的支付,通過調(diào)用微信支付控件來實(shí)現(xiàn)支付。如果要用作真實(shí)產(chǎn)品場景的支付,只需要修改一下產(chǎn)品名稱及費(fèi)用即可,對(duì)于涉及到快遞費(fèi)用的交易,需要注意訂單的總金額為商品費(fèi)用和物流費(fèi)用的和。

        如果微信支付時(shí)提示Access Denied,通常有以下原因:參數(shù)填寫不正確、支付目錄結(jié)構(gòu)不正確、沒有加入白名單權(quán)限。需要對(duì)照檢查一下,才能找到具體原因并進(jìn)行糾正。

        Native支付

        Native(原生)支付就是常說的掃描二維碼支付。這種支付首先需要商戶定義符合Native支付規(guī)范的URL,也就是Native支付URL,同時(shí)在微信后臺(tái)POST商戶后臺(tái)時(shí)需要提供package內(nèi)容。

        Native支付的開發(fā)分為三步。

        生成Native支付的URL

        Native支付URL是一系列具有“weixin://wxpay/bizpayurl?”前綴的URL,同時(shí)后面緊跟著一系列辨別商戶的鍵值對(duì)。

        原生URL由wxPayHelper類中的create_native_url()方法實(shí)現(xiàn),實(shí)現(xiàn)代碼如下: 

        1. <p><?php</p><p>include_once("WxPayHelper.php");$wxPayHelper = new WxPayHelper();</p><p>$productid = "1234567890";echo $wxPayHelper->create_native_url($productid);?></p>  

        其中productid是商品唯一ID,開發(fā)人員需要定義并維護(hù)自己的商品ID,這個(gè)ID與一張訂單等價(jià),微信后臺(tái)憑借該ID通過POST商戶后臺(tái)獲取交易信息。上述代碼生成的URL如下所示:

        1. weixin://wxpay/bizpayurl?appid=wxb489e8caeabcdefg&noncestr=BBvdr5atZ9D7s08X&produc  
        2. tid=1234567890&sign=e15d2466a85cd62b530e2f690604e7502f67ccb5&timestamp=1408025996  

        生成URL的二維碼有了上述支付鏈接后,還要把它轉(zhuǎn)成二維碼,PHP QR Code是一個(gè)開源的二維碼生成類庫,可使用它來生成上述Native URL,代碼如下:

        1. <?php  
        2. include 'phpqrcode.php';$productid = "1234567890";  
        3. $filename = $productid.".png";  
        4. $nativeurl = "weixin://wxpay/bizpayurl?ap  
        5. pid=wxb489e8caeabcdefg&noncestr=BBvdr5atZ9D7s08X&productid=1234567890&sign=e15d2466a85cd62b530e2f690604e7502f67ccb5&timestamp=1408025996";QRcode::png($nativeurl, $filename, "L", "5", 2);  
        6. ?>  

        PHP QR Code的使用很簡單,配置一下URL和文件名就可以了。執(zhí)行上述代碼,就會(huì)在當(dāng)前目錄下生成一個(gè)1234567890.png的二維碼圖片文件。

        Navive支付回調(diào)URL

        在 前面說過,Native支付的回調(diào)URL設(shè)置為http://www.doucube.com/wxpay/native/,當(dāng)用戶掃描上述二維碼時(shí),會(huì) 調(diào)用該回調(diào)URL。URL需要調(diào)用訂單信息Package返回給用戶,而該P(yáng)ackage是由WxPayHelper類的 create_native_package()實(shí)現(xiàn),調(diào)用代碼如下:

        1. <?php  
        2. include_once("WxPayHelper.php");$commonUtil = new CommonUtil();  
        3. $wxPayHelper = new WxPayHelper();  
        4. $wxPayHelper->setParameter("bank_type""WX");  
        5. $wxPayHelper->setParameter("body""微信支付開發(fā)教程");  
        6. $wxPayHelper->setParameter("partner", PARTNERID);  
        7. $wxPayHelper->setParameter("out_trade_no", $commonUtil->create_noncestr());  
        8. $wxPayHelper->setParameter("total_fee""1");  
        9. $wxPayHelper->setParameter("fee_type""1");  
        10. $wxPayHelper->setParameter("notify_url""http://www.doucube.com/wxpay/notify/");  
        11. $wxPayHelper->setParameter("spbill_create_ip", $_SERVER['REMOTE_ADDR']);  
        12. $wxPayHelper->setParameter("input_charset""GBK");  
        13. $native_package = $wxPayHelper->create_native_package();  
        14. echo $native_package;  
        15. ?>  

        上述代碼中,參數(shù)的配置和JS API支付一樣,只是最后調(diào)用的支付方式不一樣。

        與 此同時(shí),微信公眾平臺(tái)將會(huì)向回調(diào)URL推送XML格式的數(shù)據(jù)。這些數(shù)據(jù)中包含簽名字段,可以用來驗(yàn)證是否是真正的支付二維碼,但這個(gè)驗(yàn)證的必要性不是很 大。而回調(diào)URL也會(huì)返回一個(gè)XML格式的數(shù)據(jù)給微用戶,用戶才能看到他所交易的商品信息的內(nèi)容,這個(gè)XML的格式如下:

        1. <xml>  
        2.  <AppId><![CDATA[wxb489e8caeabcdefg]]></AppId>  
        3.  <Package><![CDATA[bank_type=WX&body=%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%BC%80%E5%8F%91%E6%95%99%E7%A8%8B&fee_type=1&input_charset=GBK&notify_  
        4. u r l = h t t p % 3 A % 2 F % 2 F w w w . d o u c u b e .  
        5. com%2Fwxpay%2Fnotify%2F&out_trade_no=RaurRyM00lk9JZ8H&partner=1201234567&spbill_create_ip=58.60.3.185&total_fee=1&sign=C580F2994F7A4DA6E31AA89549DEB494]]></Package>  
        6.  <TimeStamp>1408027935</TimeStamp><NonceStr><![CDATA[7omKw6AMZOq8022u]]></NonceStr>  
        7.  <RetCode>0</RetCode><RetErrMsg><![CDATA[ok]]></RetErrMsg>  
        8. <AppSignature><![CDATA[e01a70076d66e5a37f19aedc5074611b7d472882]]></AppSignature>  
        9. <SignMethod><![CDATA[sha1]]></SignMethod>  
        10. </xml>  

        如果商品已過期或有其他錯(cuò)誤,則可以在上述返回XML數(shù)據(jù)中的RetCode和RetErrMsg中體現(xiàn)出來。例如:RetCode為其他非0值,RetErrMsg為“該商品已下架”。

        交易通知

        在上述JS API或Native支付完成后,將向http://www.doucube.com/wxpay/notify/發(fā)送交易通知,并且?guī)蟄RL參數(shù),一個(gè)完整的帶參數(shù)URL如下:

        1. <a href="http://www.doucube.com/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=1201234567&product_fee=1&sign=D18E640BDEC42424C4233B18CDBA88C2&sign_type=MD5&time_end=20140814094255&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012">  
        2. <a href="http://www.doucube.com/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=1201234567&product_fee=1&sign=D18E640BDEC42424C4233B18CDBA88C2&sign_type=MD5&time_end=20140814094255&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012</a">http://www.doucube.com/wxpay/notify/index.php?discount=0&fee_type=1&input_charset=GBK&notify_id=xhLwKoKHzIQeMSQrEMJ7WXJNxyPKaUmxsn--xLtq4FT7LkAeFe-IHd_ARlj7kdyYUavoFfz5v2We9P6GEIv7zGgoVlT4gP2I&out_trade_no=omeDreZkCTQOuZSB&partner=1201234567&product_fee=1&sign=D18E640BDEC42424C4233B18CDBA88C2&sign_type=MD5&time_end=20140814094255&total_fee=1&trade_mode=1&trade_state=0&transaction_id=12012</a</a>>  
        3. 34567201408143324765725&transport_fee=0  

        同時(shí),微信還發(fā)送POST數(shù)據(jù),XML格式如下:

        1. <xml>  
        2.  <OpenId><![CDATA[oWWVStzuQl6Gz-pj39_Gk1lvnfoY]]></OpenId>  
        3.  <AppId><![CDATA[wxb489e8caeabcdefg]]></AppId>  
        4.  <IsSubscribe>1</IsSubscribe>  
        5.  <TimeStamp>1407980575</TimeStamp>  
        6.  <NonceStr><![CDATA[WW8xQ6th6ybgy0lF]]></NonceStr>  
        7.  <AppSignature><![CDATA[30e70187f5c50586394293cacd2f6c1caac95727]]></AppSignature>  
        8. <SignMethod><![CDATA[sha1]]></SignMethod>  
        9. </xml>  

        注意,URL和XML中包含了此次交易的很多重要信息,其中有三項(xiàng)參數(shù),分別是商戶訂單號(hào)out_trade_no,交易號(hào)transaction_id及XML數(shù)據(jù)中的OpenID,這幾個(gè)參數(shù)將在后續(xù)很多接口中使用到。

        訂單查詢

        訂單查詢API的URL為:

        h t t p s : / / a p i . w e i x i n . q q . c o m / p a y /orderquery?access_token=xxxxxx

        URL中的參數(shù)只包含微信公眾平臺(tái)憑證access_token,而訂單查詢的真正數(shù)據(jù)是放在PostData中的,格式如下:

        1. {  
        2.  "appid":"wwwwb4f85f3a797777",  
        3.  "package":"out_trade_no=11122&partner=1900090055&sign=4e8d0df3da0c3d0df38f",  
        4.  "timestamp":"1369745073",  
        5.  "app_signature":"53cca9d47b883bd4a5c85a9300df3da0cb48565c",  
        6.  "sign_method":"sha1"  
        7. }  

        訂 單查詢這一接口,開發(fā)文檔中并沒有給出Demo,所以需要自己來實(shí)現(xiàn)。其中關(guān)鍵點(diǎn)是生成參數(shù)package中的sign和app_signature。其 中,sign是對(duì)參數(shù)字典序排序并使用“&”聯(lián)合起來,最后加上&key=partnerkey(唯一分配),進(jìn)行md5運(yùn)算,再轉(zhuǎn)成全 大寫,最終得到sign。而app_signature則是根據(jù)支付簽名(paySign)生成方法中所講的簽名方式生成,參加簽名字段為:appid、 appkey、package、timestamp。相關(guān)代碼實(shí)現(xiàn)如下所示:

        1. $sign= strtoupper(md5("out_trade_no=JfuKdiBig4zZnE4n&partner=1201234567&key=asdfas  
        2. dfasdfasdfasdfasdfasdfasdf"));  
        3.   
        4. $package = "out_trade_no=JfuKdiBig4zZnE4n&partner=1201234567&sign=".$sign;  
        5. $obj['appid'] = "wx0000000000000000";  
        6. $obj['appkey'] = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvd  
        7. JENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k";  
        8. $obj['package'] = $package;  
        9. $obj['timestamp'] = time();  
        10. $WxPayHelper = new WxPayHelper();//get_biz_sign函數(shù)為protected類型,可改為public  
        11. $app_signature = $WxPayHelper->get_biz_sign($obj);  

        發(fā)貨通知

        發(fā)貨通知API的URL為:

        h t t p s : / / a p i . w e i x i n . q q . c o m / p a y /delivernotify?access_token=xxxxxx

        URL中的參數(shù)只包含微信公眾平臺(tái)憑證access_token,而發(fā)貨通知的真正數(shù)據(jù)放在PostData中,格式如下:

        1. {  
        2.  "appid":"wwwwb4f85f3a797777","openid":"oX99MDgNcgwnz3zFN3DNmo8uwa-w",  
        3.  "transid":"111112222233333",  
        4.  "out_trade_no":"555666uuu",  
        5.  "deliver_timestamp":"1369745073",  
        6.  "deliver_status":"1",  
        7.  "deliver_msg":"ok",  
        8.  "app_signature":"53cca9d47b883bd4a5c8  
        9.  <span style="font-family: Helvetica, ?Tahoma, ?Arial, ?sans-serif; font-size: 14px;">5a9300df3da0cb48565c",</span><p>&nbsp;"sign_method":"sha1"  
        10. }</p>  

        發(fā) 貨通知也沒有Demo,需要自己開發(fā)實(shí)現(xiàn),其中的關(guān)鍵點(diǎn)也是生成app_signature,它根據(jù)支付簽名(paySign)生成方法中所講的簽名方式 生成,參加簽名字段為:appid、appkey、openid、transid、out_trade_no、deliver_timestamp、 deliver_status、deliver_msg。實(shí)現(xiàn)代碼如下所示:

        1. $deliver_timestamp = time();  
        2. $obj['appid'] = APPID;  
        3. $obj['appkey'] = APPKEY;  
        4. $obj['openid'] = "oWWVStzuQl6Gz-pj39_Gk1lvnfoY"//交易通  
        5. 知XML中獲得$obj['transid'] = "1201234567201408143324765725"//jsapi中生成,交易通  
        6. 知URL中獲得$obj['out_trade_no'] = "omeDreZkCTQOuZSB"//jsapi中生成,交易通  
        7. 知URL中獲得$obj['deliver_timestamp'] = $deliver_timestamp;  
        8. $obj['deliver_status'] = "1";  
        9. $obj['deliver_msg'] = "ok";  
        10. $WxPayHelper = new WxPayHelper();  
        11. $app_signature = $WxPayHelper->get_biz_  
        12. sign($obj);  

        告警通知

        告警通知的URL為申請(qǐng)微信支付時(shí)設(shè)置的http://www.doucube.com/wxpay/alarm/,微信后臺(tái)將向

        該URL推送包含PostData的XML數(shù)據(jù),數(shù)據(jù)中包含錯(cuò)誤類型、錯(cuò)誤描述、錯(cuò)誤詳情等信息。告警數(shù)據(jù)在接收后需要寫入到系統(tǒng)告警模塊中,并要求商戶盡快做出處理,以免影響線上經(jīng)營。

        維權(quán)通知

        維 權(quán)通知的URL為申請(qǐng)微信支付時(shí)設(shè)置的http://www.doucube.com/wxpay/rights/,用戶在新增投訴單及確認(rèn)處理完畢投訴 后,微信后臺(tái)都會(huì)向該URL推送包含PostData的XML數(shù)據(jù), 數(shù)據(jù)中包含維權(quán)內(nèi)容信息。維權(quán)通知是被動(dòng)接收到的通知,接收到后,最好能使用模版消息提醒自己,以免錯(cuò)過處理時(shí)限。

        標(biāo)記投訴處理

        標(biāo)記客戶投訴處理狀態(tài)API的URL為:https://api.weixin.qq.com/payfeedback/update?access_token=xxxxx&openid=XXXX&feedbackid=xxxx

        URL中的參數(shù)包含微信公眾平臺(tái)憑證access_token,客戶投訴對(duì)應(yīng)的單號(hào)feedbackid,以及OpenID。填好參數(shù)后訪問該URL即可返回“標(biāo)記成功”的通知。

        收貨地址共享

        收 貨地址共享的開發(fā)是微信支付開發(fā)中最復(fù)雜的部分,主要原因有:官方?jīng)]有Demo;開發(fā)文檔含糊不清;簽名算法與之前的不一致,需要自己新實(shí)現(xiàn);JS API回調(diào)后不能給出錯(cuò)誤原因提示,調(diào)試沒有方向感,需要開發(fā)者對(duì)高級(jí)接口中的OAuth2.0過程非常精通。收貨地址共享的完整實(shí)現(xiàn)步驟如下。

        設(shè)置授權(quán)回調(diào)域名

        OAuth2.0授權(quán)頁面域名的配置在公眾平臺(tái)網(wǎng)站→開發(fā)者中心→接口權(quán)限表→高級(jí)接口→OAuth2.0網(wǎng)頁授權(quán)中設(shè)置,將域名設(shè)置成微信支付授權(quán)目錄中的域名,如www.doucube.com。

        構(gòu)造請(qǐng)求授權(quán)回調(diào)URL

        請(qǐng)求OAuth2.0授權(quán)的URL如下:

        https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

        請(qǐng)求授權(quán)參數(shù)說明如表2所示。

        表2 請(qǐng)求授權(quán)參數(shù)

        這里,構(gòu)造請(qǐng)求接口如下:

        https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb489e8caeabcdefg&redirect_uri=http://www.doucube.com/wxpay/getAddress.php&response_type=code&scope=snsapi_base&state=1#wechat_redirect

        其 中,http://www.doucube.com/wxpay/getAddress.php是獲取共享收獲地址的頁面。作用域使用 snsapi_base,用戶訪問上述請(qǐng)求接口之后,將會(huì)跳轉(zhuǎn)到頁面http://www.doucube.com/wxpay /getAddress.php?code=02feab18436a5704c395c1b2e0451547&state=1。

        獲取共享收貨地址

        在getAddress.php頁面,首先需要獲取授權(quán)Access Token,這個(gè)Access Token是OAuth2.0授權(quán)時(shí)獲得的,不是自定義菜單實(shí)現(xiàn)時(shí)的那個(gè)Access Toekn。實(shí)現(xiàn)代碼如下:

        1. $appid = APPID;  
        2. $appsecret = APPSERCERT;  
        3. $code = $_GET["code"];  
        4. $access_token_url = "https://api.weixin.  
        5. qq.com/sns/oauth2/access_token?appid=$ap  
        6. pid&secret=$appsecret&code=$code&grant_  
        7. type=authorization_code";  
        8. $access_token_json = file_get_  
        9. contents($access_token_url);  
        10. $ a c c e s s _ t o k e n _ a r r a y = j s o n _  
        11. decode($access_token_json, true);  
        12. $access_token = $access_token_  
        13. array['access_token'];  

        然 后需要計(jì)算出地址簽名,參與addrSign簽名的字段包括:appid、url(當(dāng)前網(wǎng)頁URL,包含code和state參數(shù))、 timestamp、noncestr、accessToken(用戶OAuth2.0授權(quán)憑證)。這里scope、signType不參與簽名。這是共 享收獲地址中最關(guān)鍵的一步,它對(duì)所有待簽名參數(shù)按照字段名ASCII碼從小到大排序(字典序)后,使用URL鍵值對(duì)的格式(即key1=value1& amp;key2=value2……)拼接成字符串string1。然后對(duì)string1作簽名算法,字段名和字段值都采用原始值,并進(jìn)行URL轉(zhuǎn)義。具 體簽名算法為addrSign = SHA1(string1)。其代碼如下:

        1. $commonUtil = new CommonUtil();  
        2. $noncestr = $commonUtil->create_noncestr();  
        3. $timestamp = time();  
        4. $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];  
        5. $wxPayHelper = new WxPayHelper();  
        6. $obj['appId'] = $appid;  
        7. $obj['url'] = $url;  
        8. $obj['timestamp'] = $timestamp;  
        9. $obj['noncestr'] = $noncestr;  
        10. $obj['accessToken'] = $access_token;//參數(shù)小寫  
        11. foreach ($obj as $k => $v){ $obj2[strtolower($k)] = $v; }//字典序排序  
        12. ksort($obj2);//URL鍵值對(duì)拼成字符串  
        13. $ b i z S t r i n g = $ c o m m o n U t i l ->formatBizQueryParaMap($obj2, false);//sha1簽名  
        14. $signature = sha1($bizString);  

        所有字段的值都獲取成功以后,就賦值成收貨地址接口的JS API中的變量值。

        其他接口

        其 他接口還有退款接口、退款查詢接口、對(duì)賬單下載等,他們都有Demo,配置好后即可使用。其中唯一要注意的就是退款接口的開發(fā)中pem證書的生成方法。在 退款接口的開發(fā)中,需要把pfx證書轉(zhuǎn)換pem證書,轉(zhuǎn)換后將pem文件作為私鑰。這需要用到OpenSSL這一工具,一般Linux已自帶該功能。在 Linux下的轉(zhuǎn)換命令如下:

        1. [root@FANGBEI wxpay]# openssl pkcs12 -in 1220220000.pfx -out 1220220000.pem  
        2. Enter Import Password:MAC verified OK  
        3. Enter PEM pass phrase:  
        4. Verifying - Enter PEM pass phrase:  
        5. [root@FANGBEI wxpay]# lltotal 8-rw-r--r-- 1 root root 4011 Aug 14 15:31 1220220000.pem-rw-r--r-- 1 root root 2717 Aug 14 15:28 1220220000.pfx  
        6. [root@FANGBEI wxpay]#  

        轉(zhuǎn)換過程中需要輸入商戶ID來解密舊證書,然后設(shè)置新密碼來加密新證書,新密碼將在退款程序中配置使用。

        總結(jié)

        微信支付的開發(fā)文檔中對(duì)部分關(guān)鍵技術(shù)闡述不詳,不利于開發(fā)者快速理解上手。本文從申請(qǐng)微信支付時(shí)目錄及URL設(shè)置到各種接口開發(fā)中的核心部分都做了講解,希望能為微信支付的開發(fā)人員提供幫助,加快開發(fā)速度。

        欄目列表
        推薦內(nèi)容
        熱點(diǎn)內(nèi)容
        展開