微信公众号支付的开发经历 2016年java版

最近做了微信公众号支付的开发,开发过程中使用官方的手册还是遇到了很多问题,在百度的过程中发现大家遇到的问题根本原因都类似,但是很杂乱,最终还是解决了。把自己遇到的一些经验记录下来,希望能够对大家有所帮助,之所以写2016年版,是因为网上的资料很多是旧的,大家都是相互复制粘贴。

  • 前言:首先要说的一点:我看见有些人的页面里使用WeixinJSBridge,这个已经过时了,新开发的情况下不要用这个,而且这个的支付方式与JSAPI是不同的。官方手册里的JSAPI是后台提交订单,生成prepay_id,然后给页面,jsapi通过这个prepay_id进行支付的交互,WeixinJSBridge这个是通过前端提交订单,需要传递支付金额、前端跳转页面地址、后端通知地址等参数,既麻烦,也不安全。所以我下面的内容是jsapi的,WeixinJSBridge这个不适用。
  • 后端开发:
    • 微信支付首先需要通过OAUTH获取用户Openid,OAUTH有两种获取方法,我是用的是仅获取openid,这样页面的跳转过程中没有提示框,用户是没有感觉的,对于关注公众号的用户来说只要通过这个openid就可以获取到用户的详细信息,这里还需要有一个配置才可以得到,看后面的“配置”部分
      • 使用OAUTH方式获取到code
      • 通过上一步得到的code获取AccessToken
      • 再从AccessToken的返回字符串,获取到openid。
    • 根据openid调用统一下单接口执行下单操作,公众号支付通过jsapi进行调用的下单接口与扫码支付不同之处在于需要传递openip以及trade_type参数是JSAPI。
    • 获取jsapi_ticket
    • 计算生成Signature
      • 其实最最重要的地方在这里,这一步是大家经常会出错的地方,提示签名验证失败的基本上都是这里了。这里生成签名需要用到的参数如下:
        • jsapi_ticket
        • noncestr
        • timestamp
        • url(这里是重中之重,这里的url通常不是一个固定值,而是将要使用你的这个Signature与支付宝后台交互的页面的地址,例如:http://****:8080/testproject/pay/pay.jsp  如果你的页面后面带有参数也要加上例如:http://****:8080/testproject/pay/pay.jsp?param=value1&param=value2,我就是在这里栽跟头的,这个签名的目的是防止别人通过查看你的页面参数,然后复制到自己的页面去调用,这里不仅仅具有支付的功能)
      • 算法要是MD5,使用官方API里的SHAUtil.getSha1()方法即可。这个方法会在上面的参数后面加上一个名称为key的,这个key是你在公众号平台设置的。
    • 生成paySign,需要的参数如下:
      • appId
      • nonceStr
      • package(prepay_id=实际的prepay_id)
      • signType(MD5)
      • timeStamp
  • 前端开发:参考http://mp.weixin.qq.com/wiki/10/e5f772f4521da17fa0d7304f68b97d7e.html
  • 配置:
    • 支付授权目录,这里是指可以提交支付的页面路径,要求在修改里很清楚了,注意点:例如我刚才说的提交页面http://****:8080/testproject/pay/pay.jsp,只需要配置成http://****:8080/testproject/pay/就可以了,不要后面的具体页面名称(微信公众号平台---〉微信支付---〉开发配置---〉支付授权目录)
    • 设置可以通过OAuth获取OpenId的网站地址,如果跳转的地址不在这个列表内的话是无法获取到OpenId的。(微信公众号平台---〉开发---〉接口权限---〉网页授权获取用户基本信息---〉修改)

我在调试的过程中发现jsapi有两次验证签名,(可以设置wx.config的debug:true,看见返回值):

1。wx.config时,这里验证的是jsapi_ticket和Signature,最容易错的地方就是Signature的url和你请求的url不同,查看你的页面url的方法是在你的页面通过alert(location.href.split('#')[0])显示出来。http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign这个地址可以帮助你校验生成的Signature算法是否正确。如果正确,那么多半由于你的url设置的不对。

2。chooseWXPay的时候,校验的是paySign.我在这里栽跟头是因为我的生成算法写在了设置那些参数的前面,结果有一些值为空,没有拼接成字符串,所以签名不对。


大概就是这些。欢迎大家提意见,我来完善。谢谢。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值