jsapi微信支付的坑

微信支付前述

公司临时弄了一个收费服务,让我来帮忙做。由于不是第一次做了,在网上复制一下代码直接改也就完事了,做了一版php的微信支付,又让我用java来实现一下(因为公司的主力基本都是java),也开始了我的摸坑之旅。。。

1.获取openid的坑

看完文档,照着php撸了一遍java的项目(spring boot的接口型项目),然后。。。在第一个获取openid这里就被坑了。:

  1. 页面在没有用户code是获取不到openid的,所以我测试时使用url来回调获取用户的code:
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4c4272953ce53905&redirect_uri=https%3A%2F%2Fwww.xxxx.com%2Fpay%2Fpay.html&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect 其中url就填写一个设置了微信公众号->个人中心->js安全域名 中的其中一个域名就行。
    tips:我在联调的时候一直在本地debug调试的,使用电脑的微信,复制这段话,然后打开文件助手或者发送给好友,然后打开链接。在这基础之前先配置host,这样就能本地debug调试了。host本地目录:C:\Windows\System32\drivers\etc\host 新加一句话 127.0.0.1 你的域名 。作为程序员应该都懂的本地调试
    web页面拿到code以后,我急忙往后台请求接口,获取到用户的openid,结果给我返回
    {“errcode”:40163,“errmsg”:“code been used, hints: [ req_id: IfLcnfwgE-piEopA ]”}
    ???我按文档上一步一步来的呀,然后我找了网上的攻略,什么重置key都试过,就是报这个错误,后来仔细观看文档,发现原来顺序需要和文档上的一样对应上,https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxx&secret=xxx&code=code&grant_type=authorization_code
    这该死的文档居然要看到如此仔细!果然我顺利拿到了返回值:
    {“access_token”:“21_OgQBzEUz5MTfzMbfpL09******cDoXf518GfaxhBwz8RdrQari_zI-oy17CFBLPP9GkPTqu8pLlqoV6MHJFcQ”,“expires_in”:7200,“refresh_token”:“21_lhoc_t1A*Fo6yNbJd3nhwwix9E5k7tDzVErqBsy8DG-_ahW0gdMt5BDLFh2g1AOZNaym7bgZNQ",“openid”:"ope-202k3oYbNNIU8”,“scope”:“snsapi_base”}
    致此,openid成功获取到。

2.签名成功后获取到了prepayid后jsapi仍然报了签名错误

微信都告诉我了我的签名非常合法,结果jsapi仍然不肯绕过我。只会报签名错误却不知道哪儿有问题,最后我对问题一一排查:
1.重新生成获取prepay_id,因为签名使用的是MD5,虽然不是必填,但之前没有写入sign_type,后来也补上了。
2.由于签名方法也是在网上复制的,在https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1 中对比了签名也没有问题,但问题到底出在哪里了呢?
后来在代码中仔细观察,原来我写的代码是h5调用APP的代码,参与运算签名的几个参数
appid,partnerid,prepayid,noncestr,timestamp,package 这里是调用APP支付的参数(请允许我做一个悲伤的表情)
正确的参与运算签名并返回到前台的数据应该是:
appId,timeStamp,nonceStr,package,signType
商户key这里就不说了,然后就是支付域名需要在商户https://pay.weixin.qq.com/index.php/extend/pay_setting 中设置
这次我踩了坑,并且在网上没有找到资料,最后居然还是看文档中的说明才改好的。

不积跬步无以至千里。祝大家都顺利开发完,不要踩以前踩过的坑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值