1.首先微信公衆平臺的基本配置要填對,這個對於每一個微信接口的調用都是必須的。javascript
微信公衆平臺->設置->公衆號設置->功能設置->JS接口安全域名->設置 修改成一級域名(二級域名不能夠實現)php
2.在控制器裏的代碼:html
/** * 函數用途描述 分享 * @date: 2015-4-2 * @author: 劉炎炎 * @return: */ public function _initialize(){ parent::_initialize(); $userconfiginfo = session('userconfiginfo'); $signPackage = $this->getSignPackage(); $this->assign('userconfiginfo',$userconfiginfo); $this->assign('signpackage',$signPackage); }
在方法裏:java
//分享 $url = C('WEB_ABSOLUTE_URL').'/wechat.php?s=Carpool/owninf/u/'.WID; $share = array( 'title' => '微聯盟車主信息發佈', 'desc' => '微聯盟車主信息發佈', 'imgpath'=> '', 'url' => $url, ); $this->assign('share',$share);
3.在頁面<head></head>標籤中調用以下JSjson
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript" src="__PUBLIC__/Wechat/js/share.js"></script> <script> var domain={ www:'{:C('WEB_ABSOLUTE_URL')}', static:'{:C('WEB_ABSOLUTE_URL')}', img:'{:C('WEB_ABSOLUTE_URL')}', file:'{:C('WEB_ABSOLUTE_URL')}', kf:'{:C('WEB_ABSOLUTE_URL')}' }; var config={ appid: '{$userconfiginfo.appid}', timestamp:'{$signpackage.timestamp}', nonceStr:'{$signpackage.nonceStr}', signature:'{$signpackage.signature}', } var share={ title:'{$share.title}', desc:'{$share.desc}', img_url:'{$share.imgpath}', url:'{$share.url}' } share_obj.config_init(config); share_obj.share_init(share); </script>
附件:share.jsapi
var share_obj={ config_init:function(){ wx.config({ debug: false,// 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印 appId: config.appid,// 必填,公衆號的惟一標識 timestamp: config.timestamp, // 必填,生成簽名的時間戳 nonceStr: config.nonceStr,// 必填,生成簽名的隨機串 signature: config.signature,// 必填,簽名 jsApiList: [// 必填,須要使用的JS接口列表,全部JS接口列表見附錄2 'checkJsApi',// 'onMenuShareTimeline',// 'onMenuShareAppMessage',// 'onMenuShareQQ',// 'onMenuShareWeibo',// 'onMenuShareQZone',// 'hideMenuItems',// 'showMenuItems',// 'hideAllNonBaseMenuItem',// 'showAllNonBaseMenuItem',// 'translateVoice',// 'startRecord',// 'stopRecord',// 'onVoiceRecordEnd',// 'onRecordEnd', 'playVoice',// 'pauseVoice',// 'stopVoice',// 'onVoicePlayEnd',// 'uploadVoice',// 'downloadVoice',// 'chooseImage',// 'previewImage',// 'uploadImage',// 'downloadImage',// 'getNetworkType',// 'openLocation',// 'getLocation',// 'hideOptionMenu',// 'showOptionMenu',// 'closeWindow',// 'scanQRCode',// 'chooseWXPay',// 'openProductSpecificView',// 'addCard',// 'chooseCard',// 'openCard'// ] }); }, share_init:function(share){ if(typeof(share.img_url)=='undefined' || !share.img_url){ share.img_url=domain.www+'/Public/Wechat/images/share_logo.png'; }// 分享圖標 (typeof(share.link)=='undefined' || !share.link) && (share.link=window.location.href); // 分享連接 (typeof(share.title)=='undefined' || !share.title) && (share.title=document.title);// 分享標題 (typeof(share.desc)=='undefined' || !share.desc) && (share.desc=share.title); // 分享描述 (typeof(share.trans)=='undefined' || !share.trans) && (share.trans=1); var share_res=function(share_to){ share.share_to=share_to; share.do_action='action.share'; $.post('./', share); } var appmessage_share={ 'img_url':share.img_url, 'link':share.url, 'title':share.title, 'desc':share.desc } var timeline_share={ 'img_url':share.img_url, 'link':share.url, 'title':share.title, 'desc':share.desc } wx.ready(function(){ //獲取「分享到朋友圈」按鈕點擊狀態及自定義分享內容接口 wx.onMenuShareTimeline({ title: timeline_share.title, link: timeline_share.link, imgUrl: timeline_share.img_url, success: function () { // 用戶確認分享後執行的回調函數 }, cancel: function () { // 用戶取消分享後執行的回調函數 } }); //獲取「分享給朋友」按鈕點擊狀態及自定義分享內容接口 wx.onMenuShareAppMessage({ title: appmessage_share.title, desc: appmessage_share.desc, // 分享描述 link: appmessage_share.link, imgUrl: appmessage_share.img_url, type: '', // 分享類型,music、video或link,不填默認爲link dataUrl: '', // 若是type是music或video,則要提供數據連接,默認爲空 success: function () { // 用戶確認分享後執行的回調函數 }, cancel: function () { // 用戶取消分享後執行的回調函數 } }); }); }, }
注意:只有訂閱認證號 和服務認證號 纔有權限 調用此接口,訂閱未認證號 和服務未認證號是沒有權限的。安全
請注意不要有誘導分享等違規行爲,對於誘導分享行爲將永久回收公衆號接口權限,詳細規則請查看:http://kf.qq.com/faq/131117ne2MV7141117JzI32q.html 微信
附:生成簽名session
/** * 生成signpackage * @date: 2016-03-03 * @author: 劉炎炎 * @return: string $signPackage */ public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 這裏參數的順序要按照 key 值 ASCII 碼升序排序 $string = 'jsapi_ticket='.$jsapiTicket.'&noncestr='.$nonceStr.'×tamp='.$timestamp.'&url='.$url; $signature = sha1($string); $userconfig = session('userconfiginfo'); $signPackage = array( "appId" => $userconfig['appid'], "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } /** * 生成NonceStr 隨機字符串 * @date: 2016-03-03 * @author: 明 * @return: */ private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } /** * 得到jsapi_ticket * @date: 2016-03-03 * @author: 劉炎炎 * @return: string $ticket */ private function getJsApiTicket(){ $uid = WID; $filename = './Public/Wechat/json/jsapi_ticket'.$uid.'.json'; if(!file_exists($filename)){ @file_put_contents($filename); } $data = json_decode(file_get_contents($filename)); if($data->expire_time < time()){ $accessToken = $this->getAccessToken(); // 若是是企業號用如下 URL 獲取 ticket // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token='.$accessToken; $res = json_decode($this->https_request($url)); $ticket = $res->ticket; if($ticket){ $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen($filename, "w"); fwrite($fp, json_encode($data)); fclose($fp); } }else{ $ticket = $data->jsapi_ticket; } return $ticket; }