微信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 }

 

posted on 2017-09-07 15:08  _zxd  阅读(238)  评论(0编辑  收藏  举报