亲身经历之微信支付沙箱环境扫码支付遇到的那些坑

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

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());}elsethrow new WxPayException("获取沙箱密钥失败!");}

也可以利用POSTMAN获取,获取到的测试key并非长期有效,有三天有效期

3.重要的事情说三遍

微信支付沙箱环境不用扫码,不用扫码,不用扫码,扫了白扫,扫完你会一脸懵逼,模式一二维码一直提示原生支付URL参数错误,模式二扫码的时候提示码已经过期,请重新生成。沙箱环境是直接出现二维码后5秒后需要调用自动下单接口,然后再 调用查询订单接口。他不是真实支付所以不需要用微信扫码。

4.还有一点需要注意的地方需要关注微信支付商户接入验收助手,按照验收指引操作,里面有测试用例,其支付金额不是随意,必须按照测试用例金额测试。

5.找到Data.cs文件,图中圈中的地方,注释掉

6还有图中圈中的地方,需要增加ToUpper(),如果不加我调试的代码出来是小写获取的签名是大学,造成不等返回false,签名验证错误

 

 

转载于:https://www.cnblogs.com/zhaojingwei/p/11262101.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft .NET Pet Shop 4.0 学习之旅(二) - 项目的引用关系1

Microsoft .NET Pet Shop 4.0 学习之旅&#xff08;二&#xff09; 项目的引用关系1 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />初看到Pet Shop 4.0的源代码觉得结构很复杂&#xff0c;今天我只讨论业务逻辑层&#xff08;…

vs.net各版本解决方案相互转换工具

感谢Arthur Liberman, 感谢zu14.cn三角猫 工具下载转载于:https://www.cnblogs.com/JoinZhang/archive/2010/07/09/1774617.html

杂谈杂想!

a) 在Live Write 实施插入地图 b) 金山词霸为什么总是把“音乐(YUE)”念成“音乐&#xff08;LE&#xff09;”&#xff1f;这个bug好多年&#xff01; c) 养的基瘦了&#xff0c;人却变胖了&#xff01; 转载于:https://www.cnblogs.com/jeffersyuan/archive/2007/11/10/95528…

链接Mysql的api mysqli和pdo

HP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved)PDO (PHP Data Objects)PDO 应用在 12 种不同数据库中&#xff0c; MySQLi 只针对 MySQL 数据库。 如果你的项目需要在多种数据库中切换&#xff0c;建议使用 PDO 两者都是面向对…

Vue项目中自动将px转换为rem

一、配置与安装步骤&#xff1a; 1、在 Vue 项目的 src 文件夹下创建一个 config 文件夹&#xff1a; 2、在 config 文件夹中创建 rem.js&#xff1a; 3、将以下代码复制到 rem.js 中&#xff1a; // 基准大小 const baseSize 32 // 设置 rem 函数 function setRem () {// 当前…

MySQL8.0.19下载安装及配置详细步骤

下载&#xff1a; 软件下载地址&#xff1a;https://www.mysql.com/downloads/ 进入主页后下滑见 然后点击下图的MySQL Community Server 进入之后&#xff0c;点击Download进行下载 进入Download之后&#xff0c;点击No thanks, just start my download&#xff08;无需注…

解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data\‘ (OS er

解决[ERROR] [MY-013276] [Server] Failed to set datadir to ‘F:\Mysql\mysql-8.0.19-winx64\data’ (OS errno: 2 - No such file or directory)报错问题 输入&#xff1a;mysqld --initialize --usermysql --console 如下图&#xff1a; 然后输入mysqld -install&#xff…

DataTable操作相关实例

代码 publicDataSet GetChildDepartmentsByUserId(Guid userId) { DataSet ds newDataSet(); try{ OrgChartDB.OrgChart_PermissionDataTable pdt permissionTableAdapter.GetDataByUserId(userId); for(inti 0; …

修改mysql密码时遇见ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that correspo

修改mysql密码时遇见ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘password(‘123456’)’ at line 1报错 如下图&#xff1a; 这个句子翻译过来的意思是…

JavaScript基础内容

1.1 JavaScript基础概念&#xff1a; JavaScript (ECMAScript) &#xff1a;JavaScript 是脚本语言。JavaScript和ECMAScript通常被人用来表达相同的含义&#xff0c;但是JavaScript并不是这么一点含义&#xff0c;它是由ECMAScript 核心. DOM 文档对象模型. BOM 浏览器对象模型…

如何利用navicat可视化软件添加与新建mysql数据库

新建 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 打开navicat,如下图&#xff1a; 点击连接 名称可以…

mysql -- 死锁

死锁&#xff08;Deadlock&#xff09; 什么是死锁 所谓死锁&#xff1a;是指两个或两个以上的进程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xf…

在windows下的cmd中如何进入与退出mysql

在windows下的cmd中如何进入与退出mysql https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 进入&#xff1a;…

在shell中全局变量与局部变量的区别及其举例

主要区别&#xff1a; 1.作用域不同&#xff1a;全局变量的作用域为整个程序&#xff0c;它的声明在后面的各个部分都可以发生作用&#xff0c;而局部变量仅仅为定义的某个函数。且局部变量只能在局部进行使用。 2.优先级不同&#xff1a;局部变量优先于全局变量。 3.生命周期…

黑盒测试概念简述,黑盒测试优缺点、黑盒用例设计方法简单介绍及黑盒测试方法使用总结

黑色测试黑盒测试概念&#xff1a;黑盒的优缺点介绍&#xff1a;黑盒测试用例设计方法简单介绍&#xff1a;黑盒测试方法使用总结&#xff1a;黑盒测试概念&#xff1a; 又称功能测试或数据驱动测试&#xff0c;是用来检测每个功能是否正常使用。黑盒测试主要意味着测试要在软…

超文本css样式换行

之前有关于LODOP中纯文本换行的相关博文&#xff1a;Lodop纯文本英文-等符号自动换行问题纯文本的遇到不拆分的单词的时候&#xff0c;可以通过LODOP 语句设置允许标点溢出&#xff0c;且英文单词拆开。超文本需要通过css样式控制&#xff0c;相关博文&#xff1a;Lodop打印控件…

详述白盒测试逻辑覆盖法的语句覆盖及其缺点

语句覆盖的定义&#xff1a; 语句覆盖就是设计若干个测试用例&#xff0c;使被测试程序中的每条可执行语句至少执行一次。比如说我们测试用例里面有10个语句&#xff0c;那么这10个语句都要被测试到。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01;…

HDU - 6183 Color it 2017广西邀请赛(线段树)

题目链接 题意&#xff1a; 有四种操作 0操作 清空所有点 1操作 在&#xff08;x,y&#xff09;处插入一个带颜色的点 2 操作统计(1~x)(y1~y2&#xff09;这个范围的不同的颜色数 3 结束 思路&#xff1a; 颜色数只有51个 我们可以建51颗线段树 因为每次查询都是1~x范围的 所以…

详述白盒测试的逻辑覆盖法的判定覆盖及其优缺点

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 详述白盒测试的逻辑覆盖法的判定覆盖及其优缺点&#xff1…

详述白盒测试的逻辑覆盖的条件覆盖及其优缺点

条件覆盖详述白盒测试的逻辑覆盖的条件覆盖及其优缺点&#xff1a;条件覆盖的定义&#xff1a;与判定覆盖的区别&#xff1a;条件覆盖率&#xff1a;测试实例&#xff1a;代码&#xff1a;优缺点&#xff1a;详述白盒测试的逻辑覆盖的条件覆盖及其优缺点&#xff1a; https://b…