微信公众号 JS-SDK接口 invalid signature 签名错误

版权声明:未经容许,不得转载,原博客地址: https://blog.csdn.net/jingblog/article/details/82662363

签名错误首先去官网看一下签名生成是否正确,以及错误原因

链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

获取    access_token  

function token(){
    $appid ="xxxxx";
    $secret = "xxxxx";
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
    $data = file_get_contents($url);

    $arr = json_decode($data,true);
    $access_token = $arr['access_token'];
    return $access_token;
}
$token = token();

获取票据  jsapi_ticket     需要传入access_token  

function ticket( $token ){
    $js_t = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$token."&type=jsapi";

    $datas = file_get_contents($js_t);
    $arrs = json_decode( $datas ,true);
    $ticket = $arrs['ticket'];
    return $ticket;
}

$ticket = ticket( $token );

签名算法


$params = [
    'noncestr' => uniqid(),
    'jsapi_ticket' => $ticket ,
    'timestamp' => time(),
    'url' => 'xxxxxxxxxxxx'

];

ksort($params);

js接口安全域名设置

进入公众号

按照微信公众平台的开发文档,签名错误排查方法如下:

 

invalid signature签名错误建议按如下顺序检查:

(1)确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

(2)确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

(3)确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。

(4)确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

(5)确保一定缓存access_token和jsapi_ticket。

(6)确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

猜你喜欢

转载自blog.csdn.net/jingblog/article/details/82662363