聊一聊卡卷签名的那些坑

最近在做小程序卡卷,真是一个接一个的坑,不仅网上的资料不多,官方文档更是混乱,搞了好几天才搞定,这里说说过程中遇到的坑,基本上这些坑90%都出在签名上。


卡卷签名主要用到以下几个参数:

  • api_ticket (调用卡券相关接口的临时票据)
  • timestamp (时间戳,单位为:秒)
  • card_id (卡卷创建后获得的卡卷ID)
  • code (卡券code码,相当于用户领取的那张卡卷的卡卷号)
  • openid (指定领取用户的opeind)
  • nonce_str (32位随机字符串)


因为我是在微信公众平台创建卡卷的,所以code和openid并不需要用到,所以实际参与签名的是api_ticket、timestamp、card_id、nonce_str这4个,card_id在公众平台创建卡卷的时候就能看到,timestamp和nonce_str这两个时间戳和随机数生成就不用说了很简单,这里重点说一下api_ticket 。


api_ticket的获取比较麻烦,我们首先需要获取到access_token,然后再用access_token换取api_ticket

获取access_token的接口地址是下面这个:


这里重点来了,我就是在这里被坑了几天,请求接口中需要我们添加appid和secret,而这里使用的是公众号的appid和secret!!!公众号的!公众号的!重要的事情说三遍,记住是公众号的appid而不是小程序的!!!


另外还有一点,就是获取access_token的服务器地址还必须先加入公众号的白名单,不然会提示获取不了的,在微信公众平台里面点【安全中心】就能看到IP白名单的选项,在里面添加你服务器的ip地址,哦对了,ip白名单在启用前要先启用开发者密码,这个在【基本配置】那里,将开发者密码启用后,Ip白名单才能添加地址。


好了,正常下来应该能获取到access_token了,然后我们需要用它去换取api_ticket

获取api_ticket的接口地址是下面这个:

这里值得注意的是,两个接口在短时间内频繁调用可能会受限,所以api_ticket获取到后要进行缓存,避免重复调用接口,api_ticket的有效期为2个小时。


好了,到这里签名所用到的参数都齐了,之后就是生成签名,官方说明是这样:

贴一下自己的代码,PHP端:

最后返回的3个参数将返回给小程序,作为wx.addCard()--cardList--cardExt的值,当然,在赋值前我们还必须把这三个参数json序列化字符串,cardExt接收的是一个字符串而不是对象,那么到这里,卡卷的流程基本就是这样了。


总结一下几个要注意的地方:

  • 获取access_token时,使用的appid是公众号的而非小程序的
  • 服务器ip地址需要在微信公众平台加入ip白名单
  • api_ticket在获取到后要进行缓存,因为频繁调用接口有可能会受限。
  • 小程序wx.addCard()中,cardExt参数是一个字符串而不是对象,所以要将签名连同其他参数转为字符串后再赋值。
  • cardExt字符串里的字段参数必须和参与签名的参数一致(card_id除外,这个是写在wx.addCard()--cardList--cardId)


基本上就是这些了,最后吐槽一下官方开发文档真够乱的,有些地方还说得不明不白!!!!


本文作者:kauthy
原文地址:聊一聊卡卷签名的那些坑-教程-小程序社区-微信小程序-微信小程序开发社区-小程序开发论坛-微信小程序联盟


转载于:https://juejin.im/post/5a5580146fb9a01cc122366b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值