微信 签名 invalid signature 问题

sucanber 发布于 2015/10/16 11:37
阅读 642
收藏 0

微信接口开发问题重现:

已经开发好签名方法

测试1: 成功分享

进行sha1签名的原始字符串为,注意url不带参数

jsapi_ticket=xxxx&noncestr=yyyy&timestamp=1414587457&url=http://kkkk.com/
测试2:失败, jssdk报invalid signature错误

与上述区别在于进行sha1签名的原始字符串的url是带参数的:

jsapi_ticket=xxxx&noncestr=yyyy&timestamp=1414587457&url=http://kkkk.com/?nickName=nnn&headImg=http://xxx.com

不知道为什么会这样?

对于参数url后面的参数是否也要安装ascii排序?


加载中
0
wsy5344
wsy5344

建议你仔细看下微信的文档吧

$data['access_token']=$this->get_access_token();
$data['jsapi_ticket']=$this->get_jsapi_ticket($data['access_token']);
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$data['nonceStr']=$this->createNonceStr();
$string = "jsapi_ticket=".$data['jsapi_ticket']."&noncestr=".$data['nonceStr']."&timestamp=".time()."&url=".$url;
$data['signature'] = sha1($string);

private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }




0
sucanber
sucanber
@wsy5344 ,没看过文档几遍我怎么会发帖, 微信文档没有我要的答案。 你都没仔细看清我问什么, 你的$url这个参数里面带参数吗?如有那顺序如何
wsy5344
wsy5344
因为是动态的啊,除了#和#之后的都要,我不是给了一个$string=给你了吗,按照这个顺序就可以了,微信给的DEMO是这么连接的
0
fly2xiang
fly2xiang
是否是因为headImg参数值应当 urlencode?
fly2xiang
fly2xiang
回复 @wsy5344 : 那你详细检查一下
wsy5344
wsy5344
回复 @fly2xiang : 也不需要的
fly2xiang
fly2xiang
回复 @wsy5344 : 我不是说url参数应当urlencode,而是url参数中的url参数。。。有点绕
wsy5344
wsy5344
无须urlencode的
0
j
jinxiaohu
请问你下,这个url是我认证时候的url还是访问其他网页的url呢,后面没参数呢?
返回顶部
顶部