微信支付開發-- H5支付

H5支付php

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

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

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

申請入口:登陸商戶平臺-->產品中心-->個人產品-->支付產品-->H5支付算法

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

 

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

測試地址 微信

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

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

效果圖

 

 

流程圖

2、商品信息準備

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

 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

2、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($value二、&...
步驟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

3、新版流程

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

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

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

四、統一下單接口返回支付相關參數給商戶後臺,如支付跳轉url(參數名「mweb_url」,即流程圖中的微信中轉頁面地址)

五、商戶後臺收到統一下單接口返回參數,將mweb_url返回給前端

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

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

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

九、用戶在微信支付收銀臺完成支付

 

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