微信支付開發-- H5支付


H5支付

H5支付是指商戶在微信客戶端外的移動端網頁展示商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。 

主要用於觸屏版的手機瀏覽器請求微信支付的場景。可以方便的從外部瀏覽器喚起微信支付。 

提醒:H5支付不建議在APP端使用,如需要在APP中使用微信支付,請接APP支付,文檔詳見微信支付開發文檔

申請入口:登錄商戶平台-->產品中心-->我的產品-->支付產品-->H5支付

微信H5支付開發接入:https://pay.weixin.qq.com/wiki/doc/api/index.html

 

H5支付是基於公眾號基礎開發的一種非微信內瀏覽器支付方式(需要單獨申請支付權限),可以滿足在微信外的手機H5頁面進行微信支付的需求。。

測試地址 

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

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

http://wxpay.wxutil.com/pub_v2/pay/wap.v2.php

http://wxpay.wxutil.com/mch/pay/h5.v2.php

效果圖

 

 

流程圖

二、商品信息准備

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

 include_once("../WxPayPubHelper/WxPayPubHelper.php");

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

上述參數最終封裝成如下類似XML參數

<xml>
  <body><![CDATA[H5支付測試]]></body>
  <out_trade_no><![CDATA[100001_1433009089]]></out_trade_no>
  <total_fee>1</total_fee>
  //<notify_url><![CDATA[http://www.doucube.com/weixin/demo/notify_url.php]]></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[gwpdlnn0zlfih21gipjj5z53i7vea8e8]]></nonce_str>
  <sign><![CDATA[C5A1E210F9B4402D8254F731882F41AC]]></sign>
</xml>

2. 調用統一支付請求

將上述XML發送給統一支付接口

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

得到如下XML數據

<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>

這樣就得到一個prepayid

二、DeepLink

商戶server調用統一下單接口請求訂單,api參見公共api【統一下單】(接口中trade_type需定義為WAP),微信會返回給商戶prepayid,商戶按固定格式生成deeplink,通過用戶點擊deeplink來調起微信支付。
deeplink格式:

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

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

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

再對整個string1 做一次URLEncode
string2:

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

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

weixin://wap/pay?appid%3Dwxf5b5e87a6a0fde94%26noncestr%3D123%26package%3DWAP%26prepayid%3Dwx201412101630480281750c890475924233%26sign%3D53D411FB74FE0B0C79CC94F2AB0E2333%26timestamp%3D1417511263
字段名 變量名 必填 類型 示例值 描述
公眾賬號ID appid String(32) wx8888888888888888 微信分配的公眾賬號ID
隨機字符串 noncestr String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字符串,不長於32位。推薦隨機數生成算法
訂單詳情擴展字符串 package String(32) WAP 擴展字段,固定填寫WAP
預支付交易會話標識 prepayid String(64) wx201410272009395522657a690389285100 微信統一下單接口返回的預支付回話標識,用於后續接口調用中使用,該值有效期為2小時
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見簽名生成算法
時間戳 timestamp String(32) 1414561699

當前的時間,其他詳見時間戳規則

 

開發文檔:https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1

三、新版流程

1、用戶在商戶側完成下單,使用微信支付進行支付

2、由商戶后台向微信支付發起下單請求(調用統一下單接口)注:交易類型trade_type=MWEB

3、微信支付校驗商戶權限

4、統一下單接口返回支付相關參數給商戶后台,如支付跳轉url(參數名“mweb_url”,即流程圖中的微信中轉頁面地址)

5、商戶后台收到統一下單接口返回參數,將mweb_url返回給前端

6、商戶通過前端頁面訪問微信中轉頁面mweb_url(此步驟微信支付會校驗refer,以判斷請求來源是否合法)

7、由中轉頁面mweb_url主動喚起微信支付收銀台

8、微信支付收銀台被喚起同時關閉mweb_url中轉頁面

9、用戶在微信支付收銀台完成支付

 

原文來自:http://www.cnblogs.com/txw1958/p/wxpayv3_h5.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM