溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信開(kāi)發(fā)之H5支付的示例分析

發(fā)布時(shí)間:2021-09-10 10:34:56 來(lái)源:億速云 閱讀:180 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹微信開(kāi)發(fā)之H5支付的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、介紹

H5支付是基于公眾號(hào)基礎(chǔ)開(kāi)發(fā)的一種非微信內(nèi)瀏覽器支付方式(需要單獨(dú)申請(qǐng)支付權(quán)限),可以滿足在微信外的手機(jī)H5頁(yè)面進(jìn)行微信支付的需求。。

測(cè)試地址

http://wxpay.weixin.qq.com/pub_v2/pay/wap.v2.php

http://wxpay.weixin.qq.com/mch/pay/h6.v2.php

效果圖

微信開(kāi)發(fā)之H5支付的示例分析 微信開(kāi)發(fā)之H5支付的示例分析

流程圖

微信開(kāi)發(fā)之H5支付的示例分析

二、商品信息準(zhǔn)備

主要是先定義商品的名稱及價(jià)格,以及交易號(hào)。代碼如下。

    include_once("../WxPayPubHelper/WxPayPubHelper.php");    //使用統(tǒng)一支付接口
    $unifiedOrder = new UnifiedOrder_pub();    
    //設(shè)置統(tǒng)一支付接口參數(shù)
    //設(shè)置必填參數(shù)
    //appid已填,商戶無(wú)需重復(fù)填寫
    //mch_id已填,商戶無(wú)需重復(fù)填寫
    //noncestr已填,商戶無(wú)需重復(fù)填寫
    //spbill_create_ip已填,商戶無(wú)需重復(fù)填寫
    //sign已填,商戶無(wú)需重復(fù)填寫
    $unifiedOrder->setParameter("body","H5支付測(cè)試");//商品描述
    $timeStamp = time();    $out_trade_no = WxPayConf_pub::APPID."$timeStamp";    $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號(hào) 
    $unifiedOrder->setParameter("total_fee","1");//總金額
    //$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 
    $unifiedOrder->setParameter("trade_type","WAP");//交易類型
    //非必填參數(shù),商戶可根據(jù)實(shí)際情況選填
    $unifiedOrder->setParameter("device_info","100001");//設(shè)備號(hào)

上述參數(shù)最終封裝成如下類似XML參數(shù)

<xml>
  <body><![CDATA[H5支付測(cè)試]]></body>
  <out_trade_no><![CDATA[100001_1433009089]]></out_trade_no>
  <total_fee>1</total_fee>
  //<notify_url><![CDATA[http://www.php.cn/]]></notify_url>
  <trade_type><![CDATA[WAP]]></trade_type>
  <device_info>100001</device_info>
  <appid><![CDATA[wx1d065b0628e21103]]></appid>
  <mch_id>1237905502</mch_id>
  <spbill_create_ip><![CDATA[61.129.47.79]]></spbill_create_ip>
  <nonce_str><![CDATA[gwpdlnn0zlfih31gipjj5z53i7vea8e8]]></nonce_str>
  <sign><![CDATA[C5A1E210F9B4402D8254F731882F41AC]]></sign></xml>

2. 調(diào)用統(tǒng)一支付請(qǐng)求

將上述XML發(fā)送給統(tǒng)一支付接口

https://api.mch.weixin.qq.com/pay/unifiedorder

得到如下XML數(shù)據(jù)

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>  
  <return_msg><![CDATA[OK]]></return_msg>  
  <appid><![CDATA[wx1d065b0628e21103]]></appid>  
  <mch_id><![CDATA[1237905502]]></mch_id>  
  <device_info><![CDATA[100001]]></device_info>  
  <nonce_str><![CDATA[6u8ovTtFupTagsiY]]></nonce_str>  
  <sign><![CDATA[E84D8BC2331766DD685591F908367FF1]]></sign>  
  <result_code><![CDATA[SUCCESS]]></result_code>  
  <prepay_id><![CDATA[wx20150531020450bb586eb2f70717331240]]></prepay_id>  
  <trade_type><![CDATA[WAP]]></trade_type>  </xml>

這樣就得到一個(gè)prepayid

二、DeepLink

商戶server調(diào)用統(tǒng)一下單接口請(qǐng)求訂單,api參見(jiàn)公共api【統(tǒng)一下單】(接口中trade_type需定義為WAP),微信會(huì)返回給商戶prepayid,商戶按固定格式生成deeplink,通過(guò)用戶點(diǎn)擊deeplink來(lái)調(diào)起微信支付。
deeplink格式:

weixin://wap/pay?appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3D123%26prepayid%3Dwx20141203201153d7bac0d2e10889028866%26sign%3D6AF4B69CCC30926F85770F900D098D64%26timestamp%3D1417511263

生成deeplink 的步驟如下:
步驟1:按URL 格式組裝參數(shù), $value 部分進(jìn)行URL 編碼,生成string1:
string1 : key1=Urlencode($value1)&key2=Urlencode($value2、&...
步驟2:對(duì)string1 作整體的Urlencode,生成string2:
String2=Urlencode(string1);
步驟3:拼接前綴,生成最終deeplink
舉例如下:
String1:

appid=wxf5b5e87a6a0fde94&noncestr=123&package=WAP&prepayid=wx201412101630480281750c890475924233&sign=53D411FB74FE0B0C79CC94F2AB0E2333&timestamp=1417511263

再對(duì)整個(gè)string1 做一次URLEncode
string2:

appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3DWAP%26prepayid%3Dwx201412101630480281750c890475924233%26sign%3D53D411FB74FE0B0C79CC94F2AB0E2333%26timestamp%3D1417511263

再加上協(xié)議頭weixin://wap/pay? 得到最后的deeplink

weixin://wap/pay?appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3DWAP%26prepayid%3Dwx201412101630480281750c890475924233%26sign%3D53D411FB74FE0B0C79CC94F2AB0E2333%26timestamp%3D1417511263
字段名變量名必填類型示例值描述
公眾賬號(hào)IDappidString(32)wx8888888888888888微信分配的公眾賬號(hào)ID
隨機(jī)字符串noncestrString(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS隨機(jī)字符串,不長(zhǎng)于32位。推薦隨機(jī)數(shù)生成算法
訂單詳情擴(kuò)展字符串packageString(32)WAP擴(kuò)展字段,固定填寫WAP
預(yù)支付交易會(huì)話標(biāo)識(shí)prepayidString(64)wx201410272009395522657a690389285100微信統(tǒng)一下單接口返回的預(yù)支付回話標(biāo)識(shí),用于后續(xù)接口調(diào)用中使用,該值有效期為2小時(shí)
簽名signString(32)C380BEC2BFD727A4B6845133519F3AD6簽名,詳見(jiàn)簽名生成算法
時(shí)間戳timestampString(32)1414561699

當(dāng)前的時(shí)間,其他詳見(jiàn)時(shí)間戳規(guī)則

開(kāi)發(fā)文檔:https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1

三、新版流程

微信開(kāi)發(fā)之H5支付的示例分析

1、用戶在商戶側(cè)完成下單,使用微信支付進(jìn)行支付

2、由商戶后臺(tái)向微信支付發(fā)起下單請(qǐng)求(調(diào)用統(tǒng)一下單接口)注:交易類型trade_type=MWEB

3、微信支付校驗(yàn)商戶權(quán)限

4、統(tǒng)一下單接口返回支付相關(guān)參數(shù)給商戶后臺(tái),如支付跳轉(zhuǎn)url(參數(shù)名“mweb_url”,即流程圖中的微信中轉(zhuǎn)頁(yè)面地址)

5、商戶后臺(tái)收到統(tǒng)一下單接口返回參數(shù),將mweb_url返回給前端

6、商戶通過(guò)前端頁(yè)面訪問(wèn)微信中轉(zhuǎn)頁(yè)面mweb_url(此步驟微信支付會(huì)校驗(yàn)refer,以判斷請(qǐng)求來(lái)源是否合法)

7、由中轉(zhuǎn)頁(yè)面mweb_url主動(dòng)喚起微信支付收銀臺(tái)

8、微信支付收銀臺(tái)被喚起同時(shí)關(guān)閉mweb_url中轉(zhuǎn)頁(yè)面

9、用戶在微信支付收銀臺(tái)完成支付

以上是“微信開(kāi)發(fā)之H5支付的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI