2.开发者须申请一个开放平台账号,并将小程序和公众号绑定在同一个开放平台账号下,关于开放平台的介绍请参照:微信开放平台;
由于我其实不是很清楚后续的步骤,那么我就看到小程序提供了两个接口,添加和展示卡券的,那么我就从这俩卡券接口入手调用。
可以看到,签名错误,这是因为signature参数我们没有传,那么这个参数是怎么来的呢,不得不吐槽一下微信官方,以下是官方的一句signature参数说明:
签名,商户将接口列表中的参数按照指定方式进行签名,签名方式使用 SHA1,具体签名方案参见:卡券签名
1.使用创建卡券公众号的appid和secret获取access_token(注意是公众号的appid和secret,而不是小程序的),因为access_token每天调用次数有限每次时效2小时,请务必使用某种方法去全局保存access_token
2.使用获取到的access_token去换取ticket(这个ticket是用来参与生成签名的也是有调用次数限制和时效2小时,务必全局保存)
3.按照字典序排序以下参数 必填参数:ticket(步骤2中换取的) timestamp(当前时间戳)nonce_str(不超过32位的随机字符串) card_id(要投放的卡券的卡券id) 选填参数:code(自定义code模式下填写) openid(指定领取者的情况下填写)
4.将3.中字典序排序完成之后的参数进行字符串拼接然后使用sha1加密,即为前端需要用到的signature
我是在微信公众平台创建卡券的,然后code和openid并不需要用到,实际参与签名的是api_ticket、timestamp、card_id、nonce_str这4个,card_id在公众平台创建卡卷的时候就能看到,timestamp和nonce_str这两个时间戳和随机数生成就不用说了很简单,这里说一下api_ticket 。
点击上方蓝色标题查看官方文档,我们获取access_token的appid和secret都是服务号中的appid和secret,打印结果是:
后来又是搜,获取access_token40125错误,说服务号中其实是有两个,一个是在【基本配置】中appid和secret,另外还有一个是在【开发者工具】——【公众平台测试账号】中,我在开发过程中一开始用了基本配置中的那套,修改成后者之后验证成功获取access_token。
但是,我这次最大的坑就在这儿了,虽然这样是可以请求成功的,但是当后面签名啥的一系列都是正确的,却依然显示的签名错误,其实40125就是单纯的告诉你secrete错误,找了相关同事重新确认secrete修改才可以了
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
通过上个步骤获取到的access_token,获取卡券签名要用到的ticket,注意type一定是wx_card,代码如下:
通过以上流程,我们获取到了签名所需要的api_ticket ,服务号创建的卡券的card_id,另外一个必须的timestamp也很容易获取,获取签名前还需要对变量进行字典排序,最后是一个对这些变量拼接成的字符串进行sha1加密的算法
cardExt是一个字符串的json,里面的内容一定是参与签名的变量(不能多不能少,用了哪几个签名就填哪几个,没有用到的也不要填了)和获取到的签名signature

