1. 程式人生 > >php--微信H5支付

php--微信H5支付

首先,我們說一下h5支付的應用場景!

H5支付是指商戶在微信客戶端外的移動端網頁展示商品或服務,使用者在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。 主要用於觸屏版的手機瀏覽器請求微信支付的場景。可以方便的從外部瀏覽器喚起微信支付。

說明白點:就是你在微信外部瀏覽器端調微信支付(只能手機調起)

我們看一下h5支付的官方文件

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

我們選擇統一下單

介面的地址是:https://api.mch.weixin.qq.com/pay/unifiedorder

欄位名 變數名 必填 型別 示例值 描述
公眾賬號ID appid String(32) wxd678efh567hg6787 微信分配的公眾賬號ID(企業號corpid即為此appId)
商戶號 mch_id String(32) 1230000109 微信支付分配的商戶號
裝置號 device_info String(32) 013467007045764 終端裝置號(門店號或收銀裝置ID),注意:PC網頁或公眾號內支付請傳"WEB"
隨機字串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字串,不長於32位。推薦
隨機數生成演算法
簽名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6
簽名型別 sign_type String(32) HMAC-SHA256 簽名型別,目前支援HMAC-SHA256和MD5,預設為MD5
商品描述 body String(128) 騰訊充值中心-QQ會員充值

商品簡單描述,該欄位須嚴格按照規範傳遞,具體請見引數規定

商品詳情 detail String(6000) 單品優惠欄位(暫未上線)
附加資料 attach String(127) 深圳分店 附加資料,在查詢API和支付通知中原樣返回,該欄位主要用於商戶攜帶訂單的自定義資料
商戶訂單號 out_trade_no String(32) 20150806125346 商戶系統內部的訂單號,32個字元內、可包含字母, 其他說明見商戶訂單號
貨幣型別 fee_type String(16) CNY 符合ISO 4217標準的三位字母程式碼,預設人民幣:CNY,其他值列表詳見貨幣型別
總金額 total_fee Int 888 訂單總金額,單位為分,詳見支付金額
終端IP spbill_create_ip String(16) 123.12.12.123 必須傳正確的使用者端IP,詳見獲取使用者ip指引
交易起始時間 time_start String(14) 20091225091010 訂單生成時間,格式為yyyyMMddHHmmss,如2009年12月25日9點10分10秒錶示為20091225091010。其他詳見時間規則
交易結束時間 time_expire String(14) 20091227091010

訂單失效時間,格式為yyyyMMddHHmmss,如2009年12月27日9點10分10秒錶示為20091227091010。其他詳見時間規則

注意:最短失效時間間隔必須大於5分鐘
商品標記 goods_tag String(32) WXG 商品標記,代金券或立減優惠功能的引數,說明詳見代金券或立減優惠
通知地址 notify_url String(256) http://www.weixin.qq.com/wxpay/pay.php 接收微信支付非同步通知回撥地址,通知url必須為直接可訪問的url,不能攜帶引數。
交易型別 trade_type String(16) MWEB H5支付的交易型別為MWEB
商品ID product_id String(32) 12235413214070356458058 trade_type=NATIVE,此引數必傳。此id為二維碼中包含的商品ID,商戶自行定義。
指定支付方式 limit_pay String(32) no_credit no_credit--指定不能使用信用卡支付
使用者標識 openid String(128) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o trade_type=JSAPI,此引數必傳,使用者在商戶appid下的唯一標識。openid如何獲取,可參考【獲取openid】。企業號請使用【企業號OAuth2.0介面】獲取企業號內成員userid,再呼叫【企業號userid轉openid介面】進行轉換
場景資訊 scene_info String(256) //IOS移動應用
{"h5_info": {"type":"IOS","app_name": "王者榮耀","bundle_id": "com.tencent.wzryIOS"}}

//安卓移動應用
{"h5_info": {"type":"Android","app_name": "王者榮耀","package_name": "com.tencent.tmgp.sgame"}}

//WAP網站應用
{"h5_info": {"type":"Wap","wap_url": "https://pay.qq.com","wap_name": "騰訊充值"}}
該欄位用於上報支付的場景資訊,針對H5支付有以下三種場景,請根據對應場景上報,H5支付不建議在APP端使用,針對場景1,2請接入APP支付,不然可能會出現相容性問題

1,IOS移動應用
{"h5_info": //h5支付固定傳"h5_info" 
    {"type": "",  //場景型別
     "app_name": "",  //應用名
     "bundle_id": ""  //bundle_id
     }
}

2,安卓移動應用
{"h5_info": //h5支付固定傳"h5_info" 
    {"type": "",  //場景型別
     "app_name": "",  //應用名
     "package_name": ""  //包名
     }
}

3,WAP網站應用
{"h5_info": //h5支付固定傳"h5_info" 
   {"type": "",  //場景型別
    "wap_url": "",//WAP網站URL地址
    "wap_name": ""  //WAP 網站名
    }
}




根據上面介面需要的引數。我們把必須傳的引數組裝成xml格式傳送過去後

微信返回的引數有下面兩個

欄位名 變數名 必填 型別 示例值 描述
返回狀態碼 return_code String(16) SUCCESS

SUCCESS/FAIL

此欄位是通訊標識,非交易標識,交易是否成功需要檢視result_code來判斷

返回資訊 return_msg String(128) 簽名失敗

返回資訊,如非空,為錯誤原因

簽名失敗

引數格式校驗錯誤



我們通過微信返回的 return_code 中的 result_code來判斷交易是否成功

return_code 和result_code都為SUCCESS的時候有返回一下欄位

欄位名 變數名 必填 型別 示例值 描述
交易型別 trade_type String(16) MWEB 呼叫介面提交的交易型別,取值如下:JSAPI,NATIVE,APP,,H5支付固定傳MWEB
預支付交易會話標識 prepay_id String(64) wx201410272009395522657a690389285100 微信生成的預支付回話標識,用於後續介面呼叫中使用,該值有效期為2小時,針對H5支付此引數無特殊用途
支付跳轉連結 mweb_url String(64) https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241 mweb_url為拉起微信支付收銀臺的中間頁面,可通過訪問該url來拉起微信客戶端,完成支付,mweb_url的有效期為5分鐘。


我們看到其中有支付跳轉連結

這個地址便是我們調起微信支付的連結,瀏覽器直接跳轉這個地址即可調起微信支付,支付結果會非同步通知到我們傳過去的回撥地址

注(引數中必填的必須傳,我們調起支付頁面可以通過定時任務,來判斷訂單是否支付,如果已經支付則跳走)

如果有錯誤的的地方歡迎共同學習