2018年9月
微信公众号h5调起支付也有坑
疑问
如果之前做过微信jssdk,初看文档会发现没有什么,流程无非就是后端签名,返还给前端
但是仔细想了想,没有配置物品的价值信息呀,在公众号h5页面也只是返还了签名
回头看看请求参数发现了端倪
一开始看示例值我理解的随便一串数字,其中的prepay_id为统一下单接口返回结果中的参数
重新开始书写逻辑
在这里我们使用的是h5支付,返回结果为 https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx151809054027204613d0ca330422xxxxxx&package=287231xxxx
只能采用截取url的方式了,获取到的prepay_id为wx151809054027204613d0ca330422xxxxxx
将prepay_id发回后端进行签名,返回
{
"code": 1,
"msg": "获取微信浏览器支付签名成功",
"data": {
"appId": "wx54c4e3c9a7xxxxxx",
"timeStamp": "1537007685",
"nonceStr": "5b9ce0458db30",
"package": "prepay_id=wx151809054027204613d0ca330422xxxxxx",
"signType": "MD5",
"paySign": "A819D6551E9E3FE62BE612FA96000000"
}
}
现在前端就可以愉快的使用WeixinJSBridge
和JSSDK
了
相关链接:
微信jssdk太坑了
出现invalid signature
错误的情况真的很迷
- 文档最开始说不需要转义,后来我看到错误相关,说需要
encodeURIComponent(location.href.split('#')[0])
wx.config()
中的nonceStr
与后端进行签名时的noncestr
不一样- 动态获取url这个地方描述的很迷,没明确说明是需要使用后端提供签名的接口还是,前端发起请求时的url
总之就是,要使用ajax
签名,前端需要encodeURIComponent(location.href.split('#')[0])
将当前url作为参数,传入后端签名接口,后端如果是php,需要urldecode($_GET['url'])
,再来获取jsapi_ticket
进行签名,返回参数