FireTang
2017-09-06 10:26
appId,timestamp,nonceStr,signature我在微信公众号那儿验证了的。跟我得到的结果是一样的,下面代码:
//获取WxAccessToken
function getWxAccessToken(){
//1.请求url地址
$appid='******************';
$appsecret='*******************************************';
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
//2.初始化
$ch = curl_init();
//3.设置参数
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//4.调用接口
$res = curl_exec($ch);
//5.关闭curl
curl_close($ch);
if(curl_errno($ch)){
var_dump(curl_error($ch));
}
$arr=json_decode($res,true);
return $arr;
}
public function http_curl($url){
//1.初始化curl
$ch = curl_init();
//2.设置curl的参数
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
//3.采集
$output = curl_exec($ch);
//4.关闭
curl_close($ch);
return json_decode($output,true);
}
//获取jsapi_ticket全局票据
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['access_token']."&type=jsapi";
$res = $this->http_curl($url);
$jsapi_ticket=$res['ticket'];
$_SESSION['jsapi_ticket']=$jsapi_ticket;
$_SESSION['jsapi_ticket_expire_time']=time()+7000;
}
return $jsapi_ticket;
}
//获取指定位数随机码
function getRandCode($length){
$str = array_merge(range('a','z'),range('A','Z'),range('0','9'));
shuffle($str);
if($length){
$str = implode('',array_slice($str,0,$length));
}else{
$str = implode('',array_slice($str,0,16));
}
return $str;
}
//分享朋友圈
function share(){
//1.获取jsapi_ticket票据
$jsapi_ticket = $this->getJsApiTicket();
$timestamp=time();
$noncestr=$this->getRandCode(16);
$url="http://*********/index.php/Index/share.html";
// //2.获取signature
$signature="jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."×tamp=".$timestamp."&url=".$url;
$signature=sha1($signature);
$this->assign('name','baidu');
$this->assign('timestamp',$timestamp);
$this->assign('noncestr',$noncestr);
$this->assign('signature',$signature);
$this->display('Index:share');
}
HTML—JS部分:
<script>
wx.config({
debug: true,
appId: '**************', // 必填,公众号的唯一标识
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', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.onMenuShareAppMessage({
title: 'test1', // 分享标题
desc: 'test baidu', // 分享描述
link: 'http://www.baidu.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
wx.error(function(res){
});
</script>
看来还是得自问自答么?哎。
建议动态获取url地址,手写不注意的话就会错!!!!!
找了一大圈问题所在,结果还是url出的问题。
原来的url(手写,浪):"http://**********/index.php/Index/share.html"
正确的url(动态获取,稳):$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
我的问题就是出在index.php这儿,我的默认是隐藏的,所以正常情况就没有index.php。结果没动脑子看着视频那样就直接加上去了,奉劝大家,动脑:-D
PHP微信公众平台开发高级篇—微信JS-SDK
33774 学习 · 75 问题
相似问题