淺析微信支付:如何使用沙箱環(huán)境測試

本文是【淺析微信支付】系列文章的第十篇继找,主要講解如何使用沙箱環(huán)境來測試微信支付强衡。


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

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

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

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

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

在實際開發(fā)中缩搅,通常我們都是在開發(fā)環(huán)境中開發(fā)越败,本地環(huán)境也有很多限制,比如:微信支付無法調起硼瓣、H5鏈接需要鑒權究飞、支付結果通知需要外網等置谦。

面對以上的問題,微信官方給出了解決的方法亿傅,就是咋們這篇文章的 沙箱環(huán)境媒峡,也就是微信支付的官方測試環(huán)境,這個環(huán)境能做些什么呢葵擎?我覺得最重要的一點就是我們可以實時根據官方的例子調用對應的接口谅阿,并且接口會馬上返回結果,拿微信支付預支付單接口來說酬滤,調用以后會實時返回我們支付的相關信息签餐,這樣就免于開發(fā)時不知道返回結果而苦惱。

仿真測試系統(tǒng)

為降低商戶測試門檻盯串,微信支付團隊開發(fā)了一套獨立的仿真測試系統(tǒng)氯檐。該系統(tǒng)根據驗收用例金額的不同返回不同的響應報文,以滿足商戶正常功能測試体捏、安全/異常測試及性能測試的需求冠摄。

微信支付仿真測試系統(tǒng)1

圖1為微信支付仿真測試系統(tǒng)(后簡稱仿真系統(tǒng))的簡化原理圖。仿真系統(tǒng)的API協(xié)議與正式API完全相同(API接口文檔)几缭。商戶開發(fā)者只需將正式API的調用URL增加一層sandboxnew路徑耗拓,即可對接到仿真系統(tǒng)。

例如奏司,刷卡支付URL:https://api.mch.weixin.qq.com/pay/micropay
變更為:https://api.mch.weixin.qq.com/sandboxnew/pay/micropay乔询。

仿真系統(tǒng)與生產環(huán)境完全獨立,包括存儲層韵洋。商戶在仿真系統(tǒng)所做的所有交易(如下單竿刁、支付、查詢)均為無資金流的假數(shù)據搪缨,即:用戶無需真實扣款食拜,商戶也不會有資金入賬。代金券同理副编,沙箱環(huán)境中無需商戶真實制券與發(fā)券负甸,亦不會出現(xiàn)真實扣券情況。驗收仿真測試系統(tǒng)的API驗簽密鑰需從API獲取:

仿真測試系統(tǒng)的API驗證簽名

源碼&交互過程

以下為微信官方的仿真測試系統(tǒng)文檔:

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

上面說明具體的交互過程和相關的仿真測試系統(tǒng)的API驗證簽名痹届,為什么需要這個簽名接口呢呻待?這是因為使用 沙箱環(huán)境 時使用的是真實的商戶號小程序/公眾號APP_ID队腐,但是 API密鑰這個參數(shù)必須使用 沙箱環(huán)境sandbox_signkey蚕捉,此接口主要是取得這個參數(shù)。

注:仿真測試環(huán)境中的商戶號(父子商戶號)需使用真實商戶號柴淘。

下面為取得 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 來獲取具體的返回數(shù)據迫淹,解析之后獲取 sandbox_signkey參數(shù)秘通。

商戶接入仿真系統(tǒng)的交互流程示例:

  1. 商戶發(fā)起刷卡支付請求,使用POST方式調用 https://api.mch.weixin.qq.com/sandboxnew/pay/micropay
  2. 帶sandboxnew 的https請求會被nginx路由到仿真系統(tǒng)敛熬。仿真系統(tǒng)根據支付金額(total_fee字段)返回預期報文給商戶肺稀。同時,落地該筆請求數(shù)據应民;
  3. 商戶發(fā)起查單话原,調用 https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery,帶上微信訂單號(transaction_id)或商戶內部單號(out_trade_no)瑞妇;
  4. 仿真系統(tǒng)收到查單請求后,根據單號及金額返回預期的查單結果給商戶梭冠;
  5. 商戶下載對賬單辕狰,調用 https://api.mch.weixin.qq.com/sandboxnew/pay/downloadbill ,仿真系統(tǒng)返回固定的賬單格式給商戶控漠。注:賬單內容不一定與商戶在仿真系統(tǒng)產生的交易完全相同蔓倍。

沙箱說明:sandbox/sandboxnew
微信支付沙箱環(huán)境,是提供給微信支付商戶的開發(fā)者盐捷,用于模擬支付及回調通知偶翅。以驗證商戶是否理解回調通知、賬單格式碉渡,以及是否對異常做了正確的處理聚谁。
◆ 如何對接沙箱環(huán)境?
1滞诺、修改商戶自有程序或配置中形导,微信支付api的鏈接,如:被掃支付官網的url為:https://api.mch.weixin.qq.com/pay/micropay 增加sandboxnew路徑习霹,變更為https://api.mch.weixin.qq.com/sandboxnew/pay/micropay 朵耕, 即可接入沙箱驗收環(huán)境,其它接口類似淋叶;
2阎曹、在微信支付開發(fā)調試站點(站點鏈接:http://mch.weixin.qq.com/wiki/doc/api/index.php ),按接口文檔填入正確的支付參數(shù)煞檩,發(fā)起微信支付請求处嫌,完成支付;
3斟湃、驗收完成后锰霜,修改程序或配置中的api鏈接(重要!)桐早,去掉sandboxnew路徑癣缅。對接現(xiàn)網環(huán)境厨剪。

說明地址:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_1
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=21_2

結語

其實 沙箱環(huán)境主要是為了方便在開發(fā)時及時獲得接口返回值和進行 商戶支付驗收使用,本文講了如何獲取 sandbox_signkey參數(shù)友存,然后如何進行模擬對接祷膳,在實際接口URL后增加 sandboxnew 即可,接口會實時返回結果參數(shù)屡立,此點于正式環(huán)境不同(正式環(huán)境支付后是異步調用直晨,沙箱環(huán)境是實時返回)。

注意:有的接口沙箱環(huán)境的接口并不只是在鏈接中增加 sandboxnew膨俐,整個鏈接都會改變勇皇,在實際操作中我們應該查看官方文檔一一對照,如支付退款接口焚刺,正式線接口為:/secapi/pay/refund敛摘,而沙箱環(huán)境接口為:/sandboxnew/pay/refund,在沙箱環(huán)境中去掉了 secapi 這一路徑乳愉,請小伙伴一定要注意兄淫。

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

?如果想要提前一覽源碼的小伙伴,可以先看看我的 github备闲,地址如下:
?
??https://github.com/YClimb/wxpay-sdk/blob/master/README.md ?

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

到此本文就結束了斩松,關注公眾號查看更多推送!>跫取惧盹!


關注我的公眾號

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞪讼,隨后出現(xiàn)的幾起案子钧椰,更是在濱河造成了極大的恐慌,老刑警劉巖符欠,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫡霞,死亡現(xiàn)場離奇詭異,居然都是意外死亡希柿,警方通過查閱死者的電腦和手機诊沪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門养筒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人端姚,你說我怎么就攤上這事晕粪。” “怎么了渐裸?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵巫湘,是天一觀的道長。 經常有香客問我昏鹃,道長尚氛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任洞渤,我火速辦了婚禮阅嘶,結果婚禮上,老公的妹妹穿的比我還像新娘您宪。我一直安慰自己奈懒,他們只是感情好奠涌,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布宪巨。 她就那樣靜靜地躺著,像睡著了一般溜畅。 火紅的嫁衣襯著肌膚如雪捏卓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天慈格,我揣著相機與錄音怠晴,去河邊找鬼。 笑死浴捆,一個胖子當著我的面吹牛蒜田,可吹牛的內容都是我干的。 我是一名探鬼主播选泻,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冲粤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了页眯?” 一聲冷哼從身側響起梯捕,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窝撵,沒想到半個月后傀顾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡碌奉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年短曾,在試婚紗的時候發(fā)現(xiàn)自己被綠了寒砖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡错英,死狀恐怖入撒,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情椭岩,我是刑警寧澤茅逮,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站判哥,受9級特大地震影響献雅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜塌计,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一挺身、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锌仅,春花似錦章钾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伊脓,卻和暖如春府寒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背报腔。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工株搔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纯蛾。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓纤房,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翻诉。 傳聞我的和親對象是個殘疾皇子炮姨,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容