微信分享

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.'&timestamp='.$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;
	}
相關文章
相關標籤/搜索