微信分享功能代码

来源:互联网 发布:五线谱变简谱软件 编辑:程序博客网 时间:2024/06/06 17:34
//获取token
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&timestamp=%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.'&timestamp='.$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">