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

     

  • 相关阅读:
    shell函数
    sed命令
    交互式输入与for语句
    day01_云计算概述及kvm介绍
    grep与正则表达式
    shell的编程原理
    shell的文本处理工具
    shell的基础入门
    深入理解JavaScript中 fn() 和 return fn() 的区别
    一篇笔记带你快速掌握面向对象的Javascript(纯手打)
  • 原文地址:https://www.cnblogs.com/zhaojingwei/p/11262101.html
Copyright © 2011-2022 走看看