之前写过关于微信支付的陷阱的文章(《微信支付~融入MVC环境后的最后一个陷阱(网上没有这样的解决方案)》、《微信支付~陷阱以及如何填补》),下面我来说一下微信官方的“扫码支付”配置并运行,生成一个二维码。手机扫描时出现“获取商户订单信息超时或商户返回非200”。百度一问,都说签名不对。当然,我的签名肯定是正确的,所以我得自己去找问题。经过测试和日志,终于发现一个点,就是关于字典类型对象的判断,判断一个不存在的key,然后使用这个key,然后就失败了,连异常都不报,晕眩的!
以下是用于二维码扫描支持的文件
我们简单说一下这些文件的作用。
.aspx:扫码支付发起页面
.aspx:微信服务器回调的页面。这是在公众平台上设置的(微信支持->开发设置->权限目录;微信支持->开发设置->支付回调)
.aspx:处理微信订单信息并在类中配置
最后评论一下官方DEMO中的Bug,即可支付成功。
file:类方法,注释掉对应的代码即可,因为此时字典中根本没有key,所以无法处理成功。
对于知识研究,我们有时需要添加更多的事后日志。请不要太相信大公司写的公共API,他们也可能有bug!
后记 扫码支付两种方式
模式1开发流程:
1.生成二维码()并为买家扫描
2、回调到上面设置的回调URL,获取必要的参数,调用统一订单API,生成参数,提交到微信接口,并将这些参数保存到数据库(最重要的是商户订单号,此订单在微信支付异步回调成功时,会返回订单号(也就是说订单号是这条数据的唯一标识)。
3、第2步,一起下单会返回一个(二维码连接),生成二维码,给买家扫码。
4.买家打开微信扫描二维码,支付完成。
5.微信输入回调网址(回调网址在订单API参数中)
6.在回调接口中获取微信传递的参数。根据商户订单号--修改数据库中的数据。推送至APP成功状态
模式2开发流程:
1、调用统一订单接口,生成参数,提交到微信接口,并将这些参数保存到数据库(最重要的是商户订单号,这个订单号会在微信支付异步成功回调中返回)也就说订单号是这条数据的唯一标识)
2、第2步下单时,会返回统一订单(二维码连接),生成二维码,为买家扫码。
3.买家打开微信扫描二维码,支付完成。
4.微信输入回调网址(回调网址在订单API参数中)
5、在回调接口中获取微信传递的参数。根据商户订单号--修改数据库中的数据。推送至APP成功状态
本文转载自博客园张占岭(仓库大叔)博客。原文链接为:微信扫码i支付~官方DEMO坑。如需转载,请联系原博主。