親身經歷之微信支付沙箱環境掃碼支付遇到的那些坑

飛翔一夢發表於2019-07-29

很多使用者在呼叫微信支付掃碼支付沙箱環境都一臉迷茫,廢話不多說,遇到很多坑,為了讓大家少走彎路下面直接說說我開發微信支付遇到坑,微信沙箱不是一般的坑,是很大的坑。

1.首先下載的官方demo,不能直接用,裡面引數少,引數少啊,需要按照官方的api文件,對照必傳引數。

2.微信支付不同於其他支付,沙箱環境利用的是正式賬號,其signkey也是根據正式key獲取到的,沙箱只支援MD5加密,然後獲取後呼叫介面時候需要替換正式key。

微信支付驗收階段可以用沙盒測試支付流程

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

步驟如下

1.正式請求地址修改,增加/sandboxnew/

2.按正式流程做sign

3.用正式sign,額外呼叫 https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey 獲得sandbox_signkey

4.用sandbox_signkey 替換使用者自己的key,再做sign簽名

5.用第二次生成的sign來掉起支付

6.發起支付的瞬間就會有回掉通知

  /// <summary>
        /// 獲取沙箱簽名金鑰。
        /// </summary>
        /// <returns></returns>
        public static string GetSignKey()
        {
            string nonceStr = WxPayApi.GenerateNonceStr();
            WxPayData signParam = new WxPayData();
            signParam.SetValue("mch_id", WxPayConfig.GetConfig().GetMchID());
            signParam.SetValue("nonce_str", nonceStr);
            signParam.SetValue("sign", signParam.MakeSign());
            string xml = signParam.ToXml();
            string url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";
            string response = HttpService.Post(xml, url, false, 10);
            Log.Debug("WxPayApi", "GetSignKey response : " + response);
            WxPayData result = new WxPayData();
            SortedDictionary<string, object> items = result.FromXml(response);
            object signKey;
            if (items.TryGetValue("sandbox_signkey", out signKey))
            {
                return signKey.ToString();
            }
            else if (items.TryGetValue("return_msg", out signKey))
            {
                throw new WxPayException(signKey.ToString());
            }
            else
                throw new WxPayException("獲取沙箱金鑰失敗!");
        }

也可以利用POSTMAN獲取,獲取到的測試key並非長期有效,有三天有效期

3.重要的事情說三遍

微信支付沙箱環境不用掃碼,不用掃碼,不用掃碼,掃了白掃,掃完你會一臉懵逼,模式一二維碼一直提示原生支付URL引數錯誤,模式二掃碼的時候提示碼已經過期,請重新生成。沙箱環境是直接出現二維碼後5秒後需要呼叫自動下單介面,然後再 呼叫查詢訂單介面。他不是真實支付所以不需要用微信掃碼。

4.還有一點需要注意的地方需要關注微信支付商戶接入驗收助手,按照驗收指引操作,裡面有測試用例,其支付金額不是隨意,必須按照測試用例金額測試。

5.找到Data.cs檔案,圖中圈中的地方,註釋掉

6還有圖中圈中的地方,需要增加ToUpper(),如果不加我除錯的程式碼出來是小寫獲取的簽名是大學,造成不等返回false,簽名驗證錯誤

 

 

相關文章