获取用户encryptKey(getUserEncryptKey)接口调试心得
鼓捣了一整天获取用户encryptKey(getUserEncryptKey)这个接口,期间遇到了特别多的问题,官方的文档写的非常的不明不白…… 官方文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/internet/getUserEncryptKey.html 第一个坑: "errcode": 40003,"errmsg": "invalid openid" 出现这个坑,主要就是这个接口,它的所有参数都是写在 query 上的,也就是说所有参数都是 URL 参数,非 Body 参数! 虽然它是 POST 请求,但是构造请求的时候要按照 GET 请求的方式构造。 其实官方的另一篇文章也提到了这一点,只是一般情况下我们都不会看它:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/user-encryptkey.html 服务端调用示例
curl -X POST "https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256"
这里已经提示了如何发送这个请求。 第二个坑: 怎么签名? 官方文档上是这么说的: 用sessionkey对空字符串签名得到的结果。session_key可通过code2Session接口获得也就是说,我们需要通过code2session这个接口,拿到session_key之后,用HmacSHA256方法,以session_key为key,对空字符串进行签名后,以Hex字符串(大小写均可)的形式输出。 例如下面这个Node.JS示例: crypto.createHmac('sha256', session_key).update('').digest('hex')
第三个坑: "errcode": 87009,"errmsg": "invalid signature" 确认下session_key有没有过期,如果没有过期的话,那可能就是我碰到的坑了。 这个接口虽然是 POST 请求,但是不能够带任何 Body 参数!哪怕是空的 JSON 也不行!如果加上了诸如 {} 之类的内容,不管你的签名对不对,这个接口都会报这个错误,可以说是非常的误导人了……