微信收銀台源碼
A. 微信H5支付流程
1、用戶在商戶側完成下單,使用微信支付進行支付
2、由商戶後台向微信支付發起下單請求( 調用統一下單介面 )註:交易類型trade_type=MWEB
3、統一下單介面返回支付相關參數給商戶後台,如支付跳轉url(參數名「mweb_url」),商戶通過mweb_url調起微信支付中間頁
4、中間頁進行H5許可權的校驗,安全性檢查(此處常見錯誤請見下文)
5、如支付成功,商戶後台會接收到微信側的非同步通知
6、用戶在微信支付收銀台完成支付或取消支付,返回商戶頁面(默認為返回支付發起頁面)
7、商戶在展示頁面,引導用戶主動發起支付結果的查詢
8,9、商戶後台判斷是否接收到微信側的支付結果通知,如沒有,後台調用我們的 訂單查詢介面 確認訂單狀態(查單實現可參考: 支付回調和查單實現指引 )
10、展示最終的訂單支付結果給用戶
常見問題
一、回調頁面
正常流程用戶支付完成後會返回至發起支付的頁面,如需返回至指定頁面,則可以在MWEB_URL後拼接上redirect_url參數,來指定回調頁面。
如,您希望用戶支付完成後跳轉至 https://www.wechatpay.com.cn ,則可以做如下處理:
假設您通過統一下單介面獲到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096
則拼接後的地址為MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn
注意:
1.需對redirect_url進行urlencode處理
2.由於設置redirect_url後,回跳指定頁面的操作可能發生在:
a、微信支付中間頁調起微信收銀台後超過5秒
b、用戶點擊「取消支付」或支付完成後點擊「完成」按鈕。因此無法保證頁面回跳時,支付流程已結束,所以商戶設置的redirect_url地址不能自動執行查單操作,應讓用戶去點擊按鈕觸發查單操作。回跳頁面展示效果可參考下圖
二、其它常見錯誤
| 網路環境未能通過安全驗證,請稍後再試 | 1. 商戶側統一下單傳的終端IP(spbill_create_ip)與用戶實際調起支付時微信側檢測到的終端IP不一致導致的,這個問題一般是商戶在統一下單時沒有傳遞正確的終端IP到spbill_create_ip導致,詳細可參見 客戶端ip獲取指引
2. 統一下單與調起支付時的網路有變動,如統一下單時是WIFI網路,下單成功後切換成4G網路再調起支付,這樣可能會引發我們的正常攔截,請保持網路環境一致的情況下重新發起支付流程
|
| 2 |
| 商家參數格式有誤,請聯系商家解決 |
1. 當前調起H5支付的referer為空導致,一般是因為直接訪問頁面調起H5支付,請按正常流程進行頁面跳轉後發起支付,或自行抓包確認referer值是否為空
2. 如果是APP里調起H5支付,需要在webview中手動設置referer,如(
Map<string> extraHeaders = new HashMap<string>();
extraHeaders.put("Referer", "商戶申請H5時提交的授權域名");//例如 http://www..com )</string></string>
|
| 3 |
| 商家存在未配置的參數,請聯系商家解決 | 1,當前調起H5支付的域名(微信側從referer中獲取)與申請H5支付時提交的授權域名不一致,如需添加或修改授權域名,請登錄商戶號對應的【商戶平台->產品中心->開發配置】自行配置
2,如果設置了回跳地址redirect_url,請確認設置的回跳地址的域名與申請H5支付時提交的授權域名是否一致 |
| 4 |
| 支付請求已失效,請重新發起支付 | 統一下單返回的MWEB_URL生成後,有效期為5分鍾,如超時請重新生成MWEB_URL後再發起支付 |
| 5 |
| 請在微信外打開訂單,進行支付 | H5支付不能直接在微信客戶端內調起,請在外部瀏覽器調起 |
| 6 |
| IOS:簽名驗證失敗
安卓:系統繁忙,請稍後再試 | 1,請確認同一個MWEB_URL只被一個微信號調起,如果不同微信號調起請重新下單生成新的MWEB_URL
2,如MWEB_URL有添加redirect_url,請確認參數拼接格式是否有誤,是否有對redirect_url的值做urlencode,可對比以下例子格式:
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn |
|
|
| 7 |
| 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決 | 統一下單中 spbill_create_ip 欄位必須為客戶端IP地址 |
三、QA
Q1:
1、傳遞redirect_url safari瀏覽器時支付完成後會新開一個頁面;
2、還有就是有些ios手機使用其他瀏覽器支付完成後默認會回到safari瀏覽器。
A1:
1、目前邏輯就是這樣設計的,防止商戶無限循環調用微信客戶端
2、對的,返回需要瀏覽器的schema信息,部分瀏覽器隱藏了這個信息,在無法拿到schema信息的情況下,就會回到safari瀏覽器