开通条件:必须是认证的微信公众号;
前期准备:
1、绑定域名(域名必须备案)
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

2、添加服务器ip白名单
在“基本配置”的“ip白名单”里面添加对应的服务器IP地址。

3、开通分享的所有权限
在“开发者中心”查看对应的接口权限及开通入口。

4、获取appid和appsecret
在“基本配置”里面即可获取。

 

1、cscms 部分  在csskins.php模板解析模型的cscms_common函数里面 对应位置贴入对应代码

//微信分享部分解析
		$access_token = getToken();
		$jsapiTicket = getTicket();
        // 动态获取URL
        //$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        //上面的protocol移动网络会出现http,wifi才是正常的https,这个会导致签名失败;
        $protocol = is_ssl();
        $url = str_replace("?mww=1","","$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
        // 生成时间戳
        $timestamp = time();
        // 生成nonceStr
        $createNonceStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        str_shuffle($createNonceStr);
        $nonceStr = substr(str_shuffle($createNonceStr),0,16);
        // 按照 key 值 ASCII 码升序排序
        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
        // 按顺序排列按sha1加密生成字符串
        $signature = sha1($string);

        //微信分享开始解析
        $str  = str_replace("{cscms:wx_appid}",CS_Wxpay_ID,$str);
        $str  = str_replace("{cscms:wx_timestamp}",$timestamp,$str);
        $str  = str_replace("{cscms:wx_nonceStr}",$nonceStr,$str);
        $str  = str_replace("{cscms:wx_signature}",$signature,$str);
        $str  = str_replace("{cscms:wx_url}",$url,$str);

 

2、然后在 公共助手函数  common_hleper.php 里面加入下面几个函数

// 获取access_token和jsapi_ticket
function getToken() {
	$file = file_get_contents("accessToken.json",true);
	//读取access_token.json里面的数据
	$result = json_decode($file,true);
	//判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
	//如果过期了则请求接口生成新的access_token并且缓存access_token.json
	if (time() > $result['expires']) {
		$data = array();
		$data['access_token'] = getNewToken();
		$data['expires'] = time()+7000;
		$jsonStr =  json_encode($data);
		$fp = fopen("accessToken.json", "w");
		fwrite($fp, $jsonStr);
		fclose($fp);
		return $data['access_token'];
	} else {
		return $result['access_token'];
	}
}
//获取新的access_token
function getNewToken() {
	$appid = "微信公众号的appid,这里可以借用微信支付的常量 CS_Wxpay_ID";
	$appsecret = "微信公众号的appsecret";
	$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
	//这里也要设置appid和appsecret 不知道为什么直接拿不到两个变量的值 所以直接填对应参数 
	$access_token_Arr =  file_get_contents($url);
	$token_jsonarr = json_decode($access_token_Arr, true);
	return $token_jsonarr["access_token"];
}

//缓存jsapi_ticket
function getTicket() {
	$file = file_get_contents("jsapiTicket.json",true);
	//读取jsapi_ticket.json里面的数据
	$result = json_decode($file,true);
	//判断jsapi_ticket是否在有效期内,如果在有效期则获取缓存的jsapi_ticket
	//如果过期了则请求接口生成新的jsapi_ticket并且缓存jsapi_ticket.json
	if (time() > $result['expires']) {
		$data = array();
		$data['jsapi_ticket'] = getNewTicket();
		$data['expires'] = time()+7001;
		$jsonStr =  json_encode($data);
		$fp = fopen("jsapiTicket.json", "w");
		fwrite($fp, $jsonStr);
		fclose($fp);
		return $data['jsapi_ticket'];
	} else {
		return $result['jsapi_ticket'];
	}
}
//获取新的access_token
function getNewTicket($appid,$appsecret) {
	$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".getToken()."";
	$jsapi_ticket_Arr =  file_get_contents($url);
	$ticket_jsonarr = json_decode($jsapi_ticket_Arr, true);
	return $ticket_jsonarr["ticket"];
}

 

 

3、HTML部分代码

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>    
	// 初始化配置            
	wx.config({
		debug: false, //调试的时候可以用true,调试成功后记得false。                
		appId: '{cscms:wx_appid}',
		timestamp: '{cscms:wx_timestamp}',
		nonceStr: '{cscms:wx_nonceStr}',
		signature: '{cscms:wx_signature}',
		jsApiList: ["updateTimelineShareData", "updateAppMessageShareData"]
	});
        // 配置完成后会调用ready函数    
	wx.ready(function (res) {
		//分享到朋友圈     
		wx.updateTimelineShareData({
			title: '{cscms:title}', // 分享标题       
			desc: '{cscms:description}', // 分享描述       
			link: '{cscms:wx_url}', // 分享链接
			imgUrl: '图标链接,链接不许是站内图标', // 分享图标       
			success: function (res) {
				// 分享成功       
			}
		})
		wx.updateAppMessageShareData({ 
			title: '{cscms:title}', // 分享标题       
			desc: '{cscms:description}', // 分享描述       
			link: '{cscms:wx_url}', // 分享链接
			imgUrl: '图标链接,链接不许是站内图标', // 分享图标       
			success: function (res) {
				// 分享成功       
			}
		})
	});
	//错误返回信息   
	wx.error(function(res){    
	   alert(res);
	}); 
</script>

上一篇: 没有了

下一篇: 没有了

评论 (0)

请登录

嘿,我来帮您