微信开发 分享功能 php,自定义微信分享功能

内嵌在微信中的网页,右上角都会有一个默认的分享功能。如下图所示,第一个为自定义的效果,第二个为默认的效果。实现了自定义的分享链接是不是更让人有点击的欲望?下面讲解下开发的过程。



一:准备设置js 借口安全域名:

这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名。

二:前端配置

首先在前端页面引入jssdk 的js 文件

[html] view plain copy
  1. <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>  
然后进行前端配置:

[html] view plain copy
  1. <span style="font-family:Georgia, 'Times New Roman', Times, sans-serif;color:#333333;">  wx.config({  
  2.      debug: true,//调试模式  
  3.     appId: '<?php echo $signPackage["appId"];?>',// </span><span style="font-family:Georgia, 'Times New Roman', Times, sans-serif;color:#333333;">  
  4.     timestamp: <?php echo $signPackage["timestamp"];?>,//生成签名的时间戳  
  5.     nonceStr: '<?php echo $signPackage["nonceStr"];?>',//生成签名的随机串  
  6.     signature: '<?php echo $signPackage["signature"];?>',  
  7.      
  8.     jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']// 所有要调用的 API 都要加到这个列表中  
  9.   });  
  10.          wx.ready(function() {   
  11.             wx.onMenuShareAppMessage({ //分享给朋友  
  12.                 title: '体验更有温度的日本', // 分享标题,可在控制器端传递  
  13.                 desc: '非常舒适的旅途',//分享的描述,可在控制器端传递  
  14.                     
  15.                 link: 'URL', // 分享链接,可在控制器端传递   
  16.                 imgUrl: 'URL', // 分享图标 ,可在控制器端传递  
  17.                 success: function() {   
  18.                     // 用户确认分享后执行的回调函数   
  19.                 },   
  20.                 cancel: function() {   
  21.                     // 用户取消分享后执行的回调函数   
  22.                 }   
  23.             });   
  24.   
  25.             wx.onMenuShareTimeline({ //分享到朋友圈  
  26.                 title: '体验更有温度的日本',   
  27.                 desc: '分享的描述',  
  28.                   
  29.                 link: 'url', // 分享链接   
  30.                 imgUrl: 'url', // 分享图标   
  31.                 success: function() {   
  32.                     // 用户确认分享后执行的回调函数   
  33.                 },   
  34.                 cancel: function() {   
  35.                     // 用户取消分享后执行的回调函数   
  36.                 }   
  37.             });   
  38.         });   
  39.    
  40.     </script></span>  
三 后端php 代码:jssdk.php 可以从此处下载

jssdk-php.zip

[html] view plain copy
  1. <?php  
  2. namespace Home\Controller;  
  3. use Think\Controller;  
  4. class IndexController extends Controller {  
  5.     public function index(){  
  6.         
  7.       //分享朋友圈  
  8.       $jssdk = new JSSDK("你的自己的appid", "你自己的appsecret");  
  9.       $signPackage = $jssdk->GetSignPackage();  
  10.       $this->assign('signPackage',$signPackage);  
  11.        
  12.        $this->display();  
  13.     }  
  14.      
  15.  class JSSDK {  
  16.     private $appId;  
  17.     private $appSecret;  
  18.     public function __construct($appId, $appSecret) {  
  19.       $this->appId = $appId;  
  20.       $this->appSecret = $appSecret;  
  21.     }  
  22.     public function getSignPackage() {  
  23.       $jsapiTicket = $this->getJsApiTicket();  
  24.       $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";  
  25.       $timestamp = time();  
  26.       $nonceStr = $this->createNonceStr();  
  27.       // 这里参数的顺序要按照 key 值 ASCII 码升序排序  
  28.       $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";  
  29.       $signature = sha1($string);  
  30.       $signPackage = array(  
  31.         "appId"     => $this->appId,  
  32.         "nonceStr"  => $nonceStr,  
  33.         "timestamp" => $timestamp,  
  34.         "url"       => $url,  
  35.         "signature" => $signature,  
  36.         "rawString" => $string  
  37.       );  
  38.       return $signPackage;   
  39.     }  
  40.     private function createNonceStr($length = 16) {  
  41.       $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
  42.       $str = "";  
  43.       for ($i = 0; $i < $length; $i++) {  
  44.         $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);  
  45.       }  
  46.       return $str;  
  47.     }  
  48.     private function getJsApiTicket() {  
  49.       // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例  
  50.       $data = json_decode(file_get_contents("jsapi_ticket.json"));  
  51.       if ($data->expire_time < time()) {  
  52.         $accessToken = $this->getAccessToken();  
  53.         $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token…";  
  54.         $res = json_decode($this->httpGet($url));  
  55.         $ticket = $res->ticket;  
  56.         if ($ticket) {  
  57.           $data->expire_time = time() + 7000;  
  58.           $data->jsapi_ticket = $ticket;  
  59.           $fp = fopen("jsapi_ticket.json", "w");  
  60.           fwrite($fp, json_encode($data));  
  61.           fclose($fp);  
  62.         }  
  63.       } else {  
  64.         $ticket = $data->jsapi_ticket;  
  65.       }  
  66.       return $ticket;  
  67.     }  
  68.     private function getAccessToken() {  
  69.       // access_token 应该全局存储与更新,以下代码以写入到文件中做示例  
  70.       $data = json_decode(file_get_contents("access_token.json"));  
  71.       if ($data->expire_time < time()) {  
  72.         $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid…";  
  73.         $res = json_decode($this->httpGet($url));  
  74.         $access_token = $res->access_token;  
  75.         if ($access_token) {  
  76.           $data->expire_time = time() + 7000;  
  77.           $data->access_token = $access_token;  
  78.           $fp = fopen("access_token.json", "w");  
  79.           fwrite($fp, json_encode($data));  
  80.           fclose($fp);  
  81.         }  
  82.       } else {  
  83.         $access_token = $data->access_token;  
  84.       }  
  85.       return $access_token;  
  86.     }  
  87.     private function httpGet($url) {  
  88.       $curl = curl_init();  
  89.       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
  90.       curl_setopt($curl, CURLOPT_TIMEOUT, 500);  
  91.       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
  92.       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  
  93.       curl_setopt($curl, CURLOPT_URL, $url);  
  94.       $res = curl_exec($curl);  
  95.       curl_close($curl);  
  96.       return $res;  
  97.     }  
  98. }  


easy吧 文章来源: 微信开发 分享功能 php,自定义微信分享功能

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:微信开发 分享功能 php,自定义微信分享功能