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; }