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


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

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,簽名驗證錯誤

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM