为了账号安全,请及时绑定邮箱和手机立即绑定

微信支付开发指南(内含微信账号借用)

标签:
Java

这篇文章比较长,但仔细看完可保你微信支付调试成功
原优酷上的视频教程,不要再去看了,仔细看完这篇文章即可。
看一遍没有成功,那就看仔细第二遍,仔细看。看了三遍还没调试成功,那是不可能的。。。

特别注意:授权和支付分开调试,授权使用微信提供的测试号!

作为一名普通程序员,想体验一把自己开发的微信支付,并不是一件容易的事。

可以从 公众号接口权限说明 发现,只有企业资质认证的服务号才能拥有微信支付权限。不仅如此,微信还限制支付的授权目录,最多仅可添加5个。
图片描述
怎么突破5个授权目录数量的限制呢?
图片描述

自然想到了转发,USER_URL表示借用人的外网地址,proxy.springboot.cn 转发到USER_URL不就好了吗,下面来说说如何借用。

  1. 准备好外网地址,注意,外网地址的正确性影响转发,也直接影响支付,99%的人都是死在这!前往 https://natapp.cn/ 购买(9折优惠码12F000E2),买 VIP-1型即可,不要选“免费的”,免费的在这不能用。
    图片描述

    填写域名和端口
    图片描述

  2. 支付调试
    授权和支付分开调试,授权使用微信提供的测试号。支付调试用我给的,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未注册(安卓上无提示,白屏)

不要慌

这是正常的,没有问题!

图片描述
能看到这个错误,说明你离成功不远了!原因就是支付授权目录导致,没有在微信支付后台配置这个地址。

  1. 申请借用密钥权限(有偿借用,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, 必须填写。

另外,如果你想看借用的到期时间,可以在公众账号上查询
图片描述


关于支付后跳转的地址?

  1. 跳转的地址其实就是returnUrl,如果要跳到订单详情页
    http://sell.com/#/order/123456
    因含有特殊字符#, GET参数会被截断,要想传递完整参数,必须先将其urlEncode再拼接,编码后如下
    http%3a%2f%2fsell.com%2f%23%2forder%2f123456

    PayController接收到参数后,解码后渲染模版,才能跳转

    map.put("returnUrl", returnUrl.startsWith("http://") ? returnUrl : 	URLEncoder.encode(returnUrl, "utf-8"));
    
    return new ModelAndView("pay/create", map);
    
  2. 跳转逻辑在create.ftl里面

function(res){
	location.href = "${returnUrl}";
}

returnUrl 可以写死,也可以由后端渲染模版。

大家可以关注我的课程:

点击查看更多内容
74人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
2.3万
获赞与收藏
1688

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消