1. 程式人生 > >淺析微信支付:如何使用沙箱環境測試

淺析微信支付:如何使用沙箱環境測試

本文是【淺析微信支付】系列文章的第十篇,主要講解如何使用沙箱環境來測試微信支付。


淺析微信支付系列已經更新十篇了喲~,沒有看過的朋友們可以看一下。

淺析微信支付:下載對賬單和資金賬單

淺析微信支付:申請退款、退款回撥介面、查詢退款

淺析微信支付:查詢訂單和關閉訂單

淺析微信支付:支付結果通知

在實際開發中,通常我們都是在開發環境中開發,本地環境也有很多限制,比如:微信支付無法調起、H5連結需要鑑權、支付結果通知需要外網等。

面對以上的問題,微信官方給出瞭解決的方法,就是咋們這篇文章的 沙箱環境,也就是微信支付的官方測試環境,這個環境能做些什麼呢?我覺得最重要的一點就是我們可以實時根據官方的例子呼叫對應的介面,並且介面會馬上返回結果,拿微信支付預支付單介面來說,呼叫以後會實時返回我們支付的相關資訊,這樣就免於開發時不知道返回結果而苦惱。

模擬測試系統

為降低商戶測試門檻,微信支付團隊開發了一套獨立的模擬測試系統。該系統根據驗收用例金額的不同返回不同的響應報文,以滿足商戶正常功能測試、安全/異常測試及效能測試的需求。

微信支付模擬測試系統1

圖1為微信支付模擬測試系統(後簡稱模擬系統)的簡化原理圖。模擬系統的API協議與正式API完全相同(API介面文件)。商戶開發者只需將正式API的呼叫URL增加一層sandboxnew路徑,即可對接到模擬系統。

例如,刷卡支付URL:api.mch.weixin.qq.com/pay/micropa…
變更為:api.mch.weixin.qq.com/sandboxnew/…

模擬系統與生產環境完全獨立,包括儲存層。商戶在模擬系統所做的所有交易(如下單、支付、查詢)均為無資金流的假資料,即:使用者無需真實扣款,商戶也不會有資金入賬。代金券同理,沙箱環境中無需商戶真實制券與發券,亦不會出現真實扣券情況。驗收模擬測試系統的API驗籤金鑰需從API獲取:

模擬測試系統的API驗證簽名

原始碼&互動過程

以下為微信官方的模擬測試系統文件:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1
複製程式碼

上面說明具體的互動過程和相關的模擬測試系統的API驗證簽名,為什麼需要這個簽名介面呢?這是因為使用 沙箱環境 時使用的是真實的商戶號小程式/公眾號APP_ID,但是 API金鑰這個引數必須使用 沙箱環境sandbox_signkey,此介面主要是取得這個引數。

注:模擬測試環境中的商戶號(父子商戶號)需使用真實商戶號。

下面為取得 sandbox_signkey的示例:

/**
 * 獲取沙盒 sandbox_signkey
 *
 * @author yclimb
 * @date 2018/9/18
 */
private void do
GetSandboxSignKey() throws Exception { WXPayConfigImpl config = WXPayConfigImpl.getInstance(); HashMap<String, String> data = new HashMap<String, String>(); // 商戶號 data.put("mch_id", config.getMchID()); // 獲取隨機字串 data.put("nonce_str", WXPayUtil.generateNonceStr()); // 生成簽名 String sign = WXPayUtil.generateSignature(data, config.getKey()); data.put("sign", sign); // 得到 sandbox_signkey WXPay wxPay = new WXPay(config); String result = wxPay.requestWithoutCert("/sandboxnew/pay/getsignkey", data, 10000, 10000); System.out.println(result); } 複製程式碼

小夥伴可以根據 result 來獲取具體的返回資料,解析之後獲取 sandbox_signkey引數。

商戶接入模擬系統的互動流程示例:

  1. 商戶發起刷卡支付請求,使用POST方式呼叫 api.mch.weixin.qq.com/sandboxnew/…
  2. 帶sandboxnew 的https請求會被nginx路由到模擬系統。模擬系統根據支付金額(total_fee欄位)返回預期報文給商戶。同時,落地該筆請求資料;
  3. 商戶發起查單,呼叫 api.mch.weixin.qq.com/sandboxnew/…
  4. 模擬系統收到查單請求後,根據單號及金額返回預期的查單結果給商戶;
  5. 商戶下載對賬單,呼叫 api.mch.weixin.qq.com/sandboxnew/… ,模擬系統返回固定的賬單格式給商戶。注:賬單內容不一定與商戶在模擬系統產生的交易完全相同。

沙箱說明:sandbox/sandboxnew
微信支付沙箱環境,是提供給微信支付商戶的開發者,用於模擬支付及回撥通知。以驗證商戶是否理解回撥通知、賬單格式,以及是否對異常做了正確的處理。
◆ 如何對接沙箱環境?
1、修改商戶自有程式或配置中,微信支付api的連結,如:被掃支付官網的url為:api.mch.weixin.qq.com/pay/micropa… 增加sandboxnew路徑,變更為https://api.mch.weixin.qq.com/sandboxnew/pay/micropay , 即可接入沙箱驗收環境,其它介面類似;
2、在微信支付開發除錯站點(站點連結:mch.weixin.qq.com/wiki/doc/ap… ),按介面文件填入正確的支付引數,發起微信支付請求,完成支付;
3、驗收完成後,修改程式或配置中的api連結(重要!),去掉sandboxnew路徑。對接現網環境。

說明地址: pay.weixin.qq.com/wiki/doc/ap… pay.weixin.qq.com/wiki/doc/ap…

結語

其實 沙箱環境主要是為了方便在開發時及時獲得介面返回值和進行 商戶支付驗收使用,本文講了如何獲取 sandbox_signkey引數,然後如何進行模擬對接,在實際介面URL後增加 sandboxnew 即可,介面會實時返回結果引數,此點於正式環境不同(正式環境支付後是非同步呼叫,沙箱環境是實時返回)。

注意:有的介面沙箱環境的介面並不只是在連結中增加 sandboxnew,整個連結都會改變,在實際操作中我們應該檢視官方文件一一對照,如支付退款介面,正式線介面為:/secapi/pay/refund,而沙箱環境介面為:/sandboxnew/pay/refund,在沙箱環境中去掉了 secapi 這一路徑,請小夥伴一定要注意。

預告:為了更好的驗證微信支付安全性,我們需要接入微信的 驗收測試,下一篇文章 支付驗收示例和驗收指引 為大家講解,敬請期待!!!

​如果想要提前一覽原始碼的小夥伴,可以先看看我的 github,地址如下: ​ ​​https://github.com/YClimb/wxpay-sdk/blob/master/README.md ​

加作者私人微信,作者微訊號如下 yclimb,標明 微信支付 可拉入微信支付討論群與小夥伴一起探討哦,一定要標明 微信支付 哦~

到此本文就結束了,關注公眾號檢視更多推送!!!


關注我的公眾號