这篇文章比较长,但仔细看完可保你微信支付调试成功
原优酷上的视频教程,不要再去看了,仔细看完这篇文章即可。
看一遍没有成功,那就看仔细第二遍,仔细看。看了三遍还没调试成功,那是不可能的。。。
特别注意:授权和支付分开调试,授权使用微信提供的测试号!
作为一名普通程序员,想体验一把自己开发的微信支付,并不是一件容易的事。
可以从 公众号接口权限说明 发现,只有企业资质认证的服务号才能拥有微信支付权限。不仅如此,微信还限制支付的授权目录,最多仅可添加5个。
怎么突破5个授权目录数量的限制呢?
自然想到了转发,USER_URL表示借用人的外网地址,proxy.springboot.cn 转发到USER_URL不就好了吗,下面来说说如何借用。
-
准备好外网地址,注意,外网地址的正确性影响转发,也直接影响支付,99%的人都是死在这!前往 https://natapp.cn/ 购买(9折优惠码12F000E2),买 VIP-1型即可,不要选“免费的”,免费的在这不能用。
填写域名和端口
-
支付调试
授权和支付分开调试,授权使用微信提供的测试号。支付调试用我给的,openid写死(师兄干货–openid)
使用 支付密钥(见课程源码doc目录) 本地生成预支付结果(这一步是不需要验证支付授权目录的)
我使用的是 源码8-4 ,浏览器访问
http://127.0.0.1:8080/sell/pay/create?orderId=1501830787417512510&returnUrl=http://www.imooc.com
orderId 替换成你自己数据库里的。访问后,日志显示
2018-05-28 15:18:18,380 - 【微信支付】response={
"appId": "wxd898fcb01713c658",
"timeStamp": "1527491898",
"nonceStr": "ywTwMHzT19Yw8R2N",
"packAge": "prepay_id=wx28151818305128388a4912842746008030",
"signType": "MD5",
"paySign": "69177DFF398837C6B02787954526C961"
}
说明没问题,继续往下。
启动 natapp 客户端,不会启动请先去看 教程,我在 mac 下启动
sell.natapp4.cc是我在 natapp上购买的外网地址。图上非常清晰的给出了映射关系
http://sell.natapp4.cc -> 127.0.0.1:8080
现在把上述地址替换后再次访问,即访问
http://sell.natapp4.cc/sell/pay/create?orderId=1501830787417512510&returnUrl=http://www.imooc.com
查看日志显示
2018-05-28 15:34:06,792 - 【微信支付】response={
"appId": "wxd898fcb01713c658",
"timeStamp": "1527492846",
"nonceStr": "N0SvwqzVBT8M8J0Y",
"packAge": "prepay_id=wx28153406620754388a4912842776390555",
"signType": "MD5",
"paySign": "7379EA29E291B359E319722FFB66A75C"
}
重点来了,接下去使用微信访问(手机不需要开代理,因为访问的是外网地址)
如果访问后页面是空白的,说明极可能是 js 部分写错了,用chrome 访问可以看到报错。
修正代码后再用微信访问,提示 URL未注册(安卓上无提示,白屏)
不要慌
这是正常的,没有问题!
能看到这个错误,说明你离成功不远了!原因就是支付授权目录导致,没有在微信支付后台配置这个地址。
- 申请借用密钥权限(有偿借用,29元/月)
好吧,其实密钥在上面已经给过了,现在申请的其实是转发权限。
前往[师兄干货]公众号–关于–借用/续期,
natapp 外网要怎么填,注意,99%都会死在这,
看清楚!
看清楚!
看清楚!
如果发现uid不能填写,请把openid复制给我,邮箱lly835@163.com。借过账号的同学以前没有填uid,所以不能输入。
一定要填自己调试成功的地址,我的是
http://sell.natapp4.cc/sell/pay/create
自己根据实际情况填写,一经填写,不能修改!
提交并支付,立即生效。你就可以在微信里支付了,
用我的地址访问!!!
http://proxy.springboot.cn/pay?openid=OPENID&orderId=1501830787417512510&returnUrl=http://www.imooc.com
OPENID 为自己的 openid, 必须填写。
另外,如果你想看借用的到期时间,可以在公众账号上查询
关于支付后跳转的地址?
-
跳转的地址其实就是returnUrl,如果要跳到订单详情页
http://sell.com/#/order/123456
因含有特殊字符#, GET参数会被截断,要想传递完整参数,必须先将其urlEncode再拼接,编码后如下
http%3a%2f%2fsell.com%2f%23%2forder%2f123456PayController接收到参数后,解码后渲染模版,才能跳转
map.put("returnUrl", returnUrl.startsWith("http://") ? returnUrl : URLEncoder.encode(returnUrl, "utf-8")); return new ModelAndView("pay/create", map);
-
跳转逻辑在create.ftl里面
function(res){
location.href = "${returnUrl}";
}
returnUrl 可以写死,也可以由后端渲染模版。
热门评论
老师 我觉得29元有点贵了 ,不是说转发就可以吗? 学生木得钱
请问支付的钱到哪里了?是不是到聊师兄你那个账号里面了?
廖老师您好,我是人民邮电出版社的策划编辑,请问您有兴趣写一本Spring Boot方面的图书吗?