function getJsApiTicket(){
//如果session中保存有效的jsapi_ticket
if($_SESSION['jsapi_ticket_expire_time']>time() && $_SESSION['jsapi_ticket']){
$jsapi_ticket=$_SESSION['jsapi_ticket'];
}else{
$access_token=$this->getWxAccessToken();
$url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
$res=$this->http_curl($url);
$jsapi_ticket=$res['ticket'];
$_SESSION['jsapi_ticket']=$jsapi_ticket;
$_SESSION['jsapi_ticket_expire_time']=time()+7200;
}
return $jsapi_ticket;
}
//获取随机码
function getRandCode($num=16){
$array=array(
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'0','1','2','3','4','5','6','7','8','9',
);
$tmpstr='';
$max=count($array);
for($i=1;$i<=$num;$i++){
$key =rand(0,$max-1);
$tmpstr .=$array[$key];
}
return $tmpstr;
}
//分享朋友圈
function shareWx(){
//1.获取jsapi_ticket票据
$jsapi_ticket=$this->getJsApiTicket();
$timestamp=time();
$noncestr=$this->getRandCode();
$url="http://39.106.125.49/weixin/ThinkPHP/index.php/Home/Index/shareWx";
//2.获取singnature
//$signature="jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."×tamp=".$timestamp."&url=".$url;
$signature="jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$timestamp."&url=".$url;
$signature= sha1($signature);
$this->assign('name','筱阿东');
$this->assign('timestamp',$timestamp);
$this->assign('noncestr',$noncestr);
$this->assign('signature',$signature);
$this->display('share');
}
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: 'wx3192f586241c3c97', // 必填,企业号的唯一标识,此处填写企业号corpid
timestamp:'<{$timestamp}>' , // 必填,生成签名的时间戳
nonceStr: '<{$noncestr}>', // 必填,生成签名的随机串
signature: '<{$signature}>',// 必填,签名,见附录1
jsApiList: [
'onMenuShareTimeline',
'onMenuShareAppMessage'
] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.onMenuShareTimeline({
title: 'test1', // 分享标题
link: 'http://www.baidu.com', // 分享链接,该链接域名必须与当前企业的可信域名一致
imgUrl: 'https://www.baidu.com/img/bdlogo.png', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.onMenuShareAppMessage({
title: 'test1', // 分享标题
desc: 'test baidu', // 分享描述
link: 'http://www.baidu.com', // 分享链接,该链接域名必须与当前企业的可信域名一致
imgUrl: 'https://www.baidu.com/img/bdlogo.png', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
alert('分享成功');
// 用户确认分享后执行的回调函数
},
cancel: function () {
alert('请重新分享');
// 用户取消分享后执行的回调函数
}
});
});
wx.error(function(res){
});
我的两个代码都没错吧 那个配置我也改过了 可是为什么我用了好多方法都没有用啊??
我目前是手机上访问就会报签名无效,但是电脑端分享给朋友是成功的,不知道为啥?
看看是不是你的域名有问题,怎么直接用的ip?
那个timestamp不需要加amp吧,上面的怎么注释掉了
yii2框架代码:
public function actionWx_share()
{
//1.获取jsapi_ticket票据
$timestamp = time();
$noncestr = $this->getRandCode();
$url = "http://i.yii6.com/site/wx_share";
$str = "jsapi_ticket=" . $this->getJsApiTicket() . "&noncestr=" . $noncestr . "×tamp=" . $timestamp . "&url=" . $url;
$signature = sha1($str);
return $this->renderPartial('share', [
'timestamp' => $timestamp,
'noncestr' => $noncestr,
'signature' => $signature,
'name'=>'单身狗的咆哮'
]);
}
设置url的时候必须小写
http://www.thinkphp.cn/code/1568.html 看看这个能不能帮到你