美文网首页
这个自定义说的是只能自定义分享内容,标题,链接等。

这个自定义说的是只能自定义分享内容,标题,链接等。

作者: _zxd | 来源:发表于2017-09-15 17:46 被阅读0次
<?php
class share
{ 
      private $appId; 
      private $appSecret; 
      public function __construct($appId, $appSecret) 
      { 
            $this->appId = $appId; 
            $this->appSecret = $appSecret; 
      } 
      
      public function ec()
      {
          $res = $this->getAccessToken();//token
          
          $ticket = $this->getTicket($res);//ticket
          
          $rand = $this->createNonceStr();//随机字符
          
          $time = time();//时间戳
          
          $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; 
          $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //要分享页面的url
          
          $arr=array();
          
          $arr['ticket'] = $ticket;
          
          $arr['rand'] = $rand;
          
          $arr['time'] = $time;
          
          $arr['url'] = $url;
          
          $string = "jsapi_ticket={$arr['ticket']}&noncestr={$arr['rand']}&timestamp={$arr['time']}&url={$arr['url']}"; //签名排序
         
          $signature = sha1($string); 
          
          $arr['signature'] = $signature;
          
          return $arr;
      } 
      
      //随机字符串
      private function createNonceStr($length = 16) 
      { 
      
            $chars = "abcdefghijklmnopqrstuvwxyz"; 
            
            $str = ""; 
            
            for ($i = 0; $i < $length; $i++) 
            { 
        
                $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); 
                
            } 
            
            return $str; 
            
      } 
      
      //获取 token 7200
      private function getAccessToken() 
      { 
      
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; 
                             
            $data = $this->get_file('token.txt');
            
            if(strlen($data)>1)//文件存在
            {
                
                $tokenArr = unserialize($data);
                
                if(time()<$tokenArr['expire'])
                {
                    
                    goto a;
                    
                }
                else
                {
                    
                    $tokenArr = json_decode($this->httpGet($url),true);
                    
                    $tokenArr['expire'] = time()+7000;
                    
                    $this->set_file('token.txt',serialize($tokenArr));
                    
                }
            }
            else    //文件不存在
            {
                    $tokenArr = json_decode($this->httpGet($url),true);
                    
                    $tokenArr['expire'] = time()+7000;
                    
                    $this->set_file('token.txt',serialize($tokenArr));
                    
            }
            
            a:
            return $tokenArr['access_token'];
      } 
      
     
            
                                                 
      //获取jsapi_ticket 7200
      private function getTicket($res)
      {
                
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$res."&type=jsapi"; 
                             
            $data = $this->get_file('ticket.txt');
                 
            if(strlen($data)>1)
            {
                
                $ticketArr = unserialize($data);
                
                if(time() < $ticketArr['expire'])
                {
                    
                    goto a;
                    
                }
                else
                {
                    
                    $ticketArr = json_decode($this->httpGet($url),true);
                    
                    $ticketArr['expire'] = time()+7000;
                    
                    $this->set_file('ticket.txt',serialize($ticketArr));
                    
                }
            }
            else
            {
                
                    $ticketArr = json_decode($this->httpGet($url),true);
                    
                    $ticketArr['expire'] = time()+7000;
                    
                    $this->set_file('ticket.txt',serialize($ticketArr));
                    
            }
            
          a:
            
          return $ticketArr['ticket'];
      }
     
      private function httpGet($url) 
      { 
      
            $curl = curl_init(); 
            
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
            
            curl_setopt($curl, CURLOPT_TIMEOUT, 500); 
            
            // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。 
            // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。 
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 
            
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
            
            curl_setopt($curl, CURLOPT_URL, $url); 
         
            $res = curl_exec($curl); 
            
            curl_close($curl); 
         
            return $res; 
            
      } 
      
      private function get_file($filename)
      { 
      
            return trim(file_get_contents($filename)); 
            
      } 
      
      private function set_file($filename, $content) 
      { 
      
            $fp = fopen($filename,"w"); 
            fwrite($fp,$content); 
            fclose($fp); 
            
      } 
}

html页面

<?php 
$appid = 'xxxxxxxxxxxxx'; 
$APPSECRET = 'xxxxxxxxxxxxx'; 
$jssdk = new share($appid, $APPSECRET); 
$signPackage = $jssdk->ec();

?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
    </head> 
    <body> 
 
    </body> 
    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 
    <script>
        //alert(location.href.split('#')[0])    
        /* 
         *Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 
         * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 
         * 
         * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: 
         * 邮箱地址:weixin-open@qq.com 
         * 邮件主题:【微信JS-SDK反馈】具体问题 
         * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 
         */ 

    wx.config({ 
            debug: true, 
            appId: '<?php echo $appid; ?>', 
            timestamp: <?php echo $signPackage["time"]; ?>, 
            nonceStr: '<?php echo $signPackage["rand"]; ?>', 
            signature: '<?php echo $signPackage["signature"]; ?>', 
            jsApiList: [
                'checkJsApi',
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'onMenuShareQQ',
                'onMenuShareWeibo',
                'hideMenuItems',
                'showMenuItems',
                'hideAllNonBaseMenuItem',
                'showAllNonBaseMenuItem',
                'translateVoice',
                'startRecord',
                'stopRecord',
                'onRecordEnd',
                'playVoice',
                'pauseVoice',
                'stopVoice',
                'uploadVoice',
                'downloadVoice',
                'chooseImage',
                'previewImage',
                'uploadImage',
                'downloadImage',
                'getNetworkType',
                'openLocation',
                'getLocation',
                'hideOptionMenu',
                'showOptionMenu',
                'closeWindow',
                'scanQRCode',
                'chooseWXPay',
                'openProductSpecificView',
                'addCard',
                'chooseCard',
                'openCard'
            ] 
        }); 
        
          wx.ready(function () 
          {
                
                wx.onMenuShareTimeline({
                title: 'xxxxxxxxxxx', // 分享标题
                link: 'xxxxxxxxxxxxx', 
                imgUrl: 'http://www.lanrenmb.com/templets/lanrenmb/img/logo.png', // 分享图标
                success: function () { 
                    // 用户确认分享后执行的回调函数
                },
                cancel: function () { 
                    // 用户取消分享后执行的回调函数
                }
                });
                /*  var shareData = {
                  title: '标题',
                  desc: '描述',
                  link: 'xxxxxxxxxx',//链接
                  imgUrl: 'xxxxxxxxxxxx'//图片地址
                  };
                  wx.onMenuShareAppMessage(shareData);
                  wx.onMenuShareTimeline(shareData);
                  wx.onMenuShareQQ(shareData);
                  wx.onMenuShareWeibo(shareData);*/
          });
        
          wx.error(function (res) 
          {
                  console.log(res.errMsg);
          });
    </script> 
</html>

大概就是这样了

相关文章

网友评论

      本文标题:这个自定义说的是只能自定义分享内容,标题,链接等。

      本文链接:https://www.haomeiwen.com/subject/jbcesxtx.html