微信分享

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;
	}
相关文章
相关标签/搜索