做微信分享网页分享链接的简介和缩略图的修改提示signature签名无效
时间: 2020-08-01来源:博客园
前景提要
做微信分享网页分享链接的简介和缩略图的修改提示signature签名无效
0 悬赏园豆: 20 [待解决问题] 大家好,我最近在做一个微信分享网页分享链接的简介和缩略图的修改功能,按着文档和网上的教程来搞了一遍下来,提示签名无效。之后做了很多次各种检查都没发现问题在哪?求指点,下面是js代码,公众号那边域名都绑好的了。
<script src=" http://res.wx.qq.com/open/js/jweixin-1.6.0.js "></script>
<script>
$(function() {
var baseurl = location.href.split('#')[0];
// var baseurl = location.href; if(baseurl.search("html")==-1){ baseurl=baseurl+"index.html"; } baseurl=encodeURI(baseurl); // alert(baseurl); $.ajax({ url :"http://www.隐藏/wx_token.php?"+baseurl, // type:'get', dataType : "json", timeout : 5000, error : function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus == "timeout") { // 请求超时 alert("请求超时"); } else { alert(errorThrown); } }, success : function(data, textStatus) { if (textStatus == "success") { // 请求成功 // alert(JSON.stringify(data)); // alert("1:"+data.ticket); // alert("2:"+data.nonceStr); // alert("3:"+data.timestamp); // alert("4:"+data.url); // alert("5:"+data.signature); // alert("6:"+data.token); wx.config({ debug : true, appId : '隐藏', timestamp : data.timestamp, nonceStr : data.nonceStr, signature : data.signature, jsApiList : [ 'updateAppMessageShareData','updateTimelineShareData','onMenuShareWeibo'] }); wx.ready(function(){ alert('初始化成功'); }); wx.error(function(res){ alert('初始化失败'); }); } } }); }); </script>
以下是PHP代码
<?php
//启动 getSignPackage();
//1获取accesstoken
function getAccessToken()
{ $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=隐藏&secret=bb2dd45b1dec2676dfe53df8e000e842"; $res = json_decode(curlHttp($url)); $access_token = $res->access_token; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token; } function curlHttp($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true ); curl_setopt($curl, CURLOPT_TIMEOUT, 500 ); curl_setopt($curl, CURLOPT_URL, $url ); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false); $res = curl_exec($curl); curl_close($curl); return $res; }
//2.获取api_ticket
function getJsApiTicket($accessToken) {
$data = json_decode(file_get_contents("jsapi_ticket.json"));
if ($data->expire_time < time()) {
// $accessToken = getAccessToken();
$url = " https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken ";
$res = json_decode(curlHttp($url));
$ticket = $res->ticket;
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket; }
// 3获取签名
function getSignPackage() {
// 获取token
$token = getAccessToken();
// 获取ticket
$ticket = getJsApiTicket($token);
// $ticket = $ticketList['ticket']; // 该url为调用jssdk接口的url $url = urldecode($_SERVER["QUERY_STRING"]); // $url='http://www.xyxyedu.com/m/index.html'; // 生成时间戳 $timestamp = time(); // 生成随机字符串 $nonceStr = createNoncestr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 j -> n -> t -> u $string = "jsapi_ticket=$ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array ( "appId" => '隐藏', "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string, "ticket" => $ticket, "token" => $token ); // var_dump(json_encode($signPackage)); // 返回数据给前端 echo json_encode($signPackage); } // 创建随机字符串 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; } 问题补充:很急,能解决的可以给顿饭钱,别嫌少啊我很穷的 灵沐一修闲 | 初学一级 | 园豆: 174
提问于:2020-08-01 16:24 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 0 if ($data->expire_time < time()) {
// $accessToken = getAccessToken();
$url = " https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken ";
这里我感觉有问题吧,你的$accessToken我理解应该是一个变量,但是你现在这里赋值了吗?你不是注释掉了吗? 泰乐世陶潜 | 园豆:410 (菜鸟二级) | 2020-08-02 23:40 $accessToken通过函数function getJsApiTicket($accessToken) 传参数过来,直接获取放到生成ticket链接上的 支持( 0 ) 反对( 0 ) 灵沐一修闲 | 园豆:174 (初学一级) | 2020-08-03 09:10 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行