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

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


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

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

淺析微信支付:申請退款、退款回調接口、查詢退款github

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

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

在實際開發中,一般咱們都是在開發環境中開發,本地環境也有不少限制,好比:微信支付沒法調起、H5連接須要鑑權、支付結果通知須要外網等。安全

面對以上的問題,微信官方給出瞭解決的方法,就是咋們這篇文章的 沙箱環境,也就是微信支付的官方測試環境,這個環境能作些什麼呢?我以爲最重要的一點就是咱們能夠實時根據官方的例子調用對應的接口,而且接口會立刻返回結果,拿微信支付預支付單接口來講,調用之後會實時返回咱們支付的相關信息,這樣就免於開發時不知道返回結果而苦惱。bash

仿真測試系統

爲下降商戶測試門檻,微信支付團隊開發了一套獨立的仿真測試系統。該系統根據驗收用例金額的不一樣返回不一樣的響應報文,以知足商戶正常功能測試、安全/異常測試及性能測試的需求。微信

微信支付仿真測試系統1

圖1爲微信支付仿真測試系統(後簡稱仿真系統)的簡化原理圖。仿真系統的API協議與正式API徹底相同(API接口文檔)。商戶開發者只需將正式API的調用URL增長一層sandboxnew路徑,便可對接到仿真系統。app

例如,刷卡支付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 doGetSandboxSignKey() 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
微信支付沙箱環境,是提供給微信支付商戶的開發者,用於模擬支付及回調通知。以驗證商戶是否理解回調通知、帳單格式,以及是否對異常作了正確的處理。
◆ 如何對接沙箱環境?
一、修改商戶自有程序或配置中,微信支付api的連接,如:被掃支付官網的url爲:api.mch.weixin.qq.com/pay/micropa… 增長sandboxnew路徑,變動爲https://api.mch.weixin.qq.com/sandboxnew/pay/micropay , 便可接入沙箱驗收環境,其它接口相似;
二、在微信支付開發調試站點(站點連接:mch.weixin.qq.com/wiki/doc/ap… ),按接口文檔填入正確的支付參數,發起微信支付請求,完成支付;
三、驗收完成後,修改程序或配置中的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,標明 微信支付 可拉入微信支付討論羣與小夥伴一塊兒探討哦,必定要標明 微信支付 哦~

到此本文就結束了,關注公衆號查看更多推送!!!


關注個人公衆號
相關文章
相關標籤/搜索