这个问题折腾了两天了,搜了很多网友的解决方法,以及按照签名排错文档中的提示逐一排查,然而并没有什么用,下面将我的环境和遇到的签名问题描述一下。
我的公众号和小程序均已认证,同时使用工作号的appid 获取token 和api_ticket 并且做了缓存。
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=wx_card
前目排序如下:
var
perpare =
string
.Format(
"{0}{1}{2}{3}"
, api_ticket, timestamp.ToString(), nonce_str,cardid );
这个是参照调试工具的排序方法,官方文档说的字典排序,可是我用字典排序,排序的结果跟调试工具完全不一样。
签名后的结果与调试工具一直。
cardExt 字符串拼装如下:
var
cards =[{
cardId: me.data.cardId,
cardExt:
'{"timestamp":'
+ res.data.timestamp +
',"signature":"'
+ res.data.signature +
'", "nonce_str":"'
+ res.data.nonceStr +
'"}'
}];
输出结果输出结果如下:
{
cardExt
:"{"
timestamp
":1547435004,"
signature
":"
bf50d6cef45d43137e0494b9a299b59d569a84b0
", "
nonce_str
":"
313d0cc5af004275845f15f1c7b40e9d
"}",
cardId
:"p18KQ55QuuWfC9NxcM2yKBGAKUbk"}
我实在是没辙了,所以发帖求助,如能解决万分感谢。
问题解决了,原来是排序问题 正确的字符串排序应该是
var
perpare =
string
.Format(
"{0}{1}{2}{3}"
, timestamp, nonce_str,api_ticket, cardid );
另外小程序端 字符串 拼接应该是:
cardExt:
'{"timestamp":'
+ res.data.timestamp +
',"signature":"'
+ res.data.signature +
'", "nonce_str":"'
+ res.data.nonceStr +
'"}'
注意 timestamp不能 有引号。
非常感谢哈哈哈,我这里是cardId填写有错误