微信分享功能代码
来源:互联网 发布:五线谱变简谱软件 编辑:程序博客网 时间:2024/06/06 17:34
function wx_get_token($appid,$appsecret) {
// $token_time = $_SESSION['access_token'];
$token_time = file_get_contents('token.txt');
list($token,$time)=explode('__',$token_time);
if (empty($token) || $_SERVER['REQUEST_TIME']-$time>3600) {
$res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret);
$res = json_decode($res, true);
// return $res;
$token = $res['access_token'];
// 注意:这里需要将获取到的token缓存起来(或写到数据库中)
// 不能频繁的访问https://api.weixin.qq.com/cgi-bin/token,每日有次数限制
// 通过此接口返回的token的有效期目前为2小时。令牌失效后,JS-SDK也就不能用了。
// 因此,这里将token值缓存1小时,比2小时小。缓存失效后,再从接口获取新的token,这样
// 就可以避免token失效。
// S()是ThinkPhp的缓存函数,如果使用的是不ThinkPhp框架,可以使用你的缓存函数,或使用数据库来保存。
// $_SESSION['access_token']=$token.'__'.$_SERVER['REQUEST_TIME'];
file_put_contents('token.txt', $token.'__'.$_SERVER['REQUEST_TIME']);
}
return $token;
}
PHP的SERVER保留变量中HTTP_HOST 和 SERVER_NAME经常是一样的,原因是服务器端口是80,那么HTTP_HOST将省略不显示,而HTTP服务的默认端口就是80,所以大多数情况下,HTTP_HOST都没有显示这个端口号。而如果使用的是ssl链接,那么端口号将被显示出来。
所以HTTP_HOST = SERVER_NAME:SERVER_PORT
//获取jsapi的ticket
//获取jsapi的ticket。jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
function wx_get_jsapi_ticket($token){
// $ticket_time = $_SESSION['wx_ticket'];
$ticket_time = file_get_contents('ticket.txt');
list($ticket,$time)=explode('__',$ticket_time);
if (!empty($ticket) && $_SERVER['REQUEST_TIME']-$time<3600) {
return $ticket;
}
// $token_time = $_SESSION['access_token'];
// list($token,$token_time)=explode('__',$token_time);
// if (empty($token) || ){
// $token=wx_get_token();
// }else{
// $token=
// }
// $token = $_SESSION['access_token'];
// if (empty($token)) {
// echo("get access token error.");
// exit;
// }
$url2 = sprintf("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi",
$token);
// echo $url2;exit;
$res = file_get_contents($url2);
// return $res;
$res = json_decode($res, true);
// return $res;
$ticket = $res['ticket'];
// 注意:这里需要将获取到的ticket缓存起来(或写到数据库中)
// ticket和token一样,不能频繁的访问接口来获取,在每次获取后,我们把它保存起来。
file_put_contents('ticket.txt',$ticket.'__'.$_SERVER['REQUEST_TIME']);
return $ticket;
// $_SESSION('wx_ticket', $ticket.'__'.$_SERVER['REQUEST_TIME']);
}
//执行步骤
session_start();
$timestamp = $_SERVER['REQUEST_TIME'];
//随机字符串
$wxnonceStr = "15468526784";
//获取令牌。在服务器端完成
$appid = "";
$appsecret = "";
// var_dump($_SESSION);die;
$token=wx_get_token($appid,$appsecret);
// var_dump($token);die;
$wxticket = wx_get_jsapi_ticket($token);
// var_dump($wxticket);exit;
// $wxOri = sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s",
// $wxticket, $wxnonceStr, $timestamp,
// 'http://newftpic.hangzhou.com.cn/zhibo/indexnewlc2.php?fang_id='.$_GET['fang_id']
// );
$url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; //当前url
// echo $_SERVER['HTTP_HOST'];exit;
$canshu = $_SERVER['QUERY_STRING'];
if($canshu){
$url = $url.'?'.$canshu;
}
echo $url;exit;
$wxOri="jsapi_ticket=".$wxticket."&noncestr=".$wxnonceStr.'×tamp='.$timestamp."&url=".$url;
// echo $wxOri;exit;
$wxSha1 = sha1($wxOri);
// $noncestr
$signPackage=array(
'appId'=>$appid,
'timestamp'=>$timestamp,
'nonceStr'=>$wxnonceStr,
'signature'=>$wxSha1
);
-------------------------------------------------------------------前端调用代码------------------------------------------------------------------
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
//onMenuShareQQ 分享到qq
//onMenuShareWeibo 分享到腾讯微博
//onMenuShareQZone 分享到qq空间
wx.config({
debug: false,
appId: '<?php echo $signPackage["appId"];?>',
timestamp: <?php echo $signPackage["timestamp"];?>,
nonceStr: '<?php echo $signPackage["nonceStr"];?>',
signature: '<?php echo $signPackage["signature"];?>',
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'checkJsApi',
'onMenuShareTimeline',//分享到朋友圈
'onMenuShareAppMessage',//分享给朋友
'onMenuShareQQ',
'onMenuShareQZone'
]
});
//S6pIupmykCvGX57Llv2sbcFijhy2got9eYd6PSW_GSeBWrSRey8e64Vm405cDQIGtdRN_YDho8Ot2G4E96nqkG5-Ko47OzWLvWhrbMnfLYEEcd_Xao9pw1lN7UD54BIyJAEiAHAZQU__1499969179 1499969179
wx.ready(function(){
wx.checkJsApi({
// jsApiList: [
// 'getLocation',
// 'onMenuShareTimeline',
// 'onMenuShareAppMessage'
// ],
success: function (res) {
alert(JSON.stringify(res));
}
});
//发送给朋友
wx.onMenuShareAppMessage({
imgUrl: '',
title: '',
desc: '',
link: '<?php echo $url; ?>',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
// alert('用户点击发送给朋友');
},
success: function (res) {
// alert('已分享');
},
cancel: function (res) {
// alert('已取消');
},
fail: function (res) {
// alert(JSON.stringify(res));
}
});
//分享到朋友圈
wx.onMenuShareTimeline({
imgUrl: 'http://newftpic.hangzhou.com.cn/zhibo/images/lcxzfbh<?php echo $fang_id;?>.jpg',
title: '',
link: '',
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
// alert('用户点击分享到朋友圈');
},
success: function (res) {
// alert('已分享');
},
cancel: function (res) {
// alert('已取消');
},
fail: function (res) {
// alert(JSON.stringify(res));
}
});
wx.onMenuShareQQ({
title: '', // 分享标题
desc: ', // 分享描述
link: '<?php echo $url; ?>', // 分享链接
imgUrl: 'http://newftpic.hangzhou.com.cn/zhibo/images/lcxzfbh<?php echo $fang_id;?>.jpg', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
//分享到微博
wx.onMenuShareWeibo({
title: '', // 分享标题
desc: '', // 分享描述
link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
//分享到qq空间
wx.onMenuShareQZone({
title: '', // 分享标题
desc: '', // 分享描述
link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
</script>
<style type="text/css">
- 微信分享功能代码
- 微信分享自定义内容功能代码
- 微信分享功能
- 微信分享功能
- 微信分享功能
- 微信分享功能
- 微信分享功能
- 微信公众平台 分享 关注 js功能代码
- 收藏 '分享 到百度、微信'功能代码
- 测试微信分享功能
- 测试微信分享功能
- 微信分享功能详解
- 微信分享功能详解
- 微信分享功能详解
- android微信分享功能
- android 微信分享功能
- 微信自定义分享功能
- 微信 页面分享功能
- 面试题35. 第一个只出现一次的字符
- angular4的rollup
- 拓展--计算机英语
- 一张图搞定js dom
- 深入理解Java中的final关键字
- 微信分享功能代码
- Netty实例
- Bootstrap(一)
- <特别分享>基于迅为4418开发板Ubuntu系统烧写方法
- linux常用命令总结
- python中lambda应用
- 设计六大原则纲要(二)
- label标签的用途
- Android开源数据库框架-LitePal的使用