zoukankan      html  css  js  c++  java
  • 微信JS-SDK自定义分享



     1 <?php 
     2  require_once('share.php');
    3
    $appid = 'abcdxxxxx'; 4 $APPSECRET = 'abcdxxxxxxx'; 5 $jssdk = new share($appid, $APPSECRET); 6 $signPackage = $jssdk->ec(); 7 ?> 8 9 <!DOCTYPE html> 10 <html lang="en"> 11 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 12 <script> 13 //alert(location.href.split('#')[0]) 14 /* 15 *Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 16 * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 17 * 18 * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: 19 * 邮箱地址:weixin-open@qq.com 20 * 邮件主题:【微信JS-SDK反馈】具体问题 21 * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 22 */ 23 24 wx.config({ 25 debug: true, 26 appId: '<?php echo $appid; ?>', 27 timestamp: <?php echo $signPackage["time"]; ?>, 28 nonceStr: '<?php echo $signPackage["rand"]; ?>', 29 signature: '<?php echo $signPackage["signature"]; ?>', 30 jsApiList: [ 31 'checkJsApi', 32 'onMenuShareTimeline', 33 'onMenuShareAppMessage', 34 'onMenuShareQQ', 35 'onMenuShareWeibo', 36 'hideMenuItems', 37 ] 38 }); 39 40 <!--微信分享--> 41 wx.ready(function () 42 { 43 44 wx.onMenuShareTimeline({ 45 title: 'xxxxxx', // 分享标题 46 link: 'xxxxxxxxxx', // 分享链接 47 imgUrl: 'xxxxxxxxxxxxxxx', // 分享图标 48 success: function () { 49 // 用户确认分享后执行的回调函数 50 }, 51 cancel: function () { 52 // 用户取消分享后执行的回调函数 53 } 54 }); 55 var shareData = { 56 title: '标题', 57 desc: '描述', 58 link: 'xxx', 59 imgUrl: 'xxx' 60 }; 61 wx.onMenuShareAppMessage(shareData); 62 wx.onMenuShareTimeline(shareData); 63 wx.onMenuShareQQ(shareData); 64 wx.onMenuShareWeibo(shareData); 65 }); 66 67 wx.error(function (res) 68 { 69 console.log(res.errMsg); 70 }); 71 <!--END 微信分享--> 72 73 </script> 74 </html>
      1 <?php
      2   3 class share
      4 { 
      5       private $appId; 
      6       private $appSecret; 
      7      
      8       public function __construct($appId, $appSecret) 
      9       { 
     10             $this->appId = $appId; 
     11             $this->appSecret = $appSecret; 
     12       } 
     13       
     14       public function ec()
     15       {
     16           $res = $this->getAccessToken();//token
     17           
     18           $ticket = $this->getTicket($res);//ticket
     19           
     20           $rand = $this->createNonceStr();//随机字符
     21           
     22           $time = time();//时间戳
     23           
     24           $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; 
     25           $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; //要分享页面的url
     26           
     27           $arr=array();
     28           
     29           $arr['ticket'] = $ticket;
     30           
     31           $arr['rand'] = $rand;
     32           
     33           $arr['time'] = $time;
     34           
     35           $arr['url'] = $url;
     36           
     37           $string = "jsapi_ticket={$arr['ticket']}&noncestr={$arr['rand']}&timestamp={$arr['time']}&url={$arr['url']}"; //签名排序
     38          
     39           $signature = sha1($string); 
     40           
     41           $arr['signature'] = $signature;
     42           
     43           return $arr;
     44       } 
     45       
     46       //随机字符串
     47       private function createNonceStr($length = 16) 
     48       { 
     49       
     50             $chars = "abcdefghijklmnopqrstuvwxyz"; 
     51             
     52             $str = ""; 
     53             
     54             for ($i = 0; $i < $length; $i++) 
     55             { 
     56         
     57                 $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); 
     58                 
     59             } 
     60             
     61             return $str; 
     62             
     63       } 
     64       
     65       //获取 token 7200
     66       private function getAccessToken() 
     67       { 
     68       
     69             $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; 
     70                              
     71             $data = $this->get_file('token.txt');
     72             
     73             if(strlen($data)>1)//文件存在
     74             {
     75                 
     76                 $tokenArr = unserialize($data);
     77                 
     78                 if(time()<$tokenArr['expire'])
     79                 {
     80                     
     81                     goto a;
     82                     
     83                 }
     84                 else
     85                 {
     86                     
     87                     $tokenArr = json_decode($this->httpGet($url),true);
     88                     
     89                     $tokenArr['expire'] = time()+7000;
     90                     
     91                     $this->set_file('token.txt',serialize($tokenArr));
     92                     
     93                 }
     94             }
     95             else    //文件不存在
     96             {
     97                     $tokenArr = json_decode($this->httpGet($url),true);
     98                     
     99                     $tokenArr['expire'] = time()+7000;
    100                     
    101                     $this->set_file('token.txt',serialize($tokenArr));
    102                     
    103             }
    104             
    105             a:
    106             return $tokenArr['access_token'];
    107       } 
    108       
    109      
    110             
    111                                                  
    112       //获取jsapi_ticket 7200
    113       private function getTicket($res)
    114       {
    115                 
    116             $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$res."&type=jsapi"; 
    117                              
    118             $data = $this->get_file('ticket.txt');
    119                  
    120             if(strlen($data)>1)
    121             {
    122                 
    123                 $ticketArr = unserialize($data);
    124                 
    125                 if(time() < $ticketArr['expire'])
    126                 {
    127                     
    128                     goto a;
    129                     
    130                 }
    131                 else
    132                 {
    133                     
    134                     $ticketArr = json_decode($this->httpGet($url),true);
    135                     
    136                     $ticketArr['expire'] = time()+7000;
    137                     
    138                     $this->set_file('ticket.txt',serialize($ticketArr));
    139                     
    140                 }
    141             }
    142             else
    143             {
    144                 
    145                     $ticketArr = json_decode($this->httpGet($url),true);
    146                     
    147                     $ticketArr['expire'] = time()+7000;
    148                     
    149                     $this->set_file('ticket.txt',serialize($ticketArr));
    150                     
    151             }
    152             
    153           a:
    154             
    155           return $ticketArr['ticket'];
    156       }
    157      
    158       private function httpGet($url) 
    159       { 
    160       
    161             $curl = curl_init(); 
    162             
    163             curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    164             
    165             curl_setopt($curl, CURLOPT_TIMEOUT, 500); 
    166             
    167             curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); 
    168             
    169             curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
    170             
    171             curl_setopt($curl, CURLOPT_URL, $url); 
    172          
    173             $res = curl_exec($curl); 
    174             
    175             curl_close($curl); 
    176          
    177             return $res; 
    178             
    179       } 
    180       
    181       private function get_file($filename)
    182       { 
    183       
    184             return trim(file_get_contents($filename)); 
    185             
    186       } 
    187       
    188       private function set_file($filename, $content) 
    189       { 
    190       
    191             $fp = fopen($filename,"w"); 
    192             fwrite($fp,$content); 
    193             fclose($fp); 
    194             
    195       } 
    196     
    197 }
  • 相关阅读:
    小程序接入第三方ui库(组件库)
    vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版
    Java 开发环境配置
    那么多 Java 版本,如何选择合适的版本
    你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问
    JavaScript HTML DOM EventListener addEventListener() 方法
    Vue2.0史上最全入坑教程(上)—— 搭建Vue脚手架(vue-cli)
    使用 Fetch
    CSS3中steps()动画的详解
    MYSQL常用命令
  • 原文地址:https://www.cnblogs.com/zhangxiangdong/p/7489803.html
Copyright © 2011-2022 走看看