zoukankan      html  css  js  c++  java
  • 亲身经历之微信支付沙箱环境扫码支付遇到的那些坑

    很多用户在调用微信支付扫码支付沙箱环境都一脸迷茫,废话不多说,遇到很多坑,为了让大家少走弯路下面直接说说我开发微信支付遇到坑,微信沙箱不是一般的坑,是很大的坑。

    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,签名验证错误

     

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/zhaojingwei/p/11262101.html
Copyright © 2011-2022 走看看