1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何自定义微信分享页小图标和标题内容

如何自定义微信分享页小图标和标题内容

时间:2018-11-05 18:03:53

相关推荐

如何自定义微信分享页小图标和标题内容

TP框架下如何自定义微信分享页小图标和标题内容,关于设置白名单、安全域名等可以查看官方文档

1、获取公众号的access_token,并保存在服务器缓存(必须,否则重复请求服务器将到达上限,无法继续请求该数据)。

/*获取access_token*/function getAccessToken(){//我们将access_token全局缓存在文件中,每次获取的时候,先判断是否过期,如果过期重新获取再全局缓存//我们缓存的在文件中的数据,包括access_token和该access_token的过期时间戳.//获取缓存的access_token$access_token_data = json_decode(F('access_token'),true);//判断缓存的access_token是否存在和过期,如果不存在和过期则重新获取.if($access_token_data !== null && $access_token_data['access_token'] && $access_token_data['expires_in'] > time()){print_r($access_token_data['access_token']);return $access_token_data['access_token'];}else{//重新获取access_token,并全局缓存$curl = curl_init();curl_setopt($curl,CURLOPT_URL,'https://api./cgi-bin/token?grant_type=client_credential&appid='.C('WECHAT_APPID').'&secret='.C('WECHAT_SECRET'));curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//获取access_token$data = json_decode(curl_exec($curl),true);if($data != null && $data['access_token']){//设置access_token的过期时间,有效期是7200s$data['expires_in'] = $data['expires_in'] + time();//将access_token全局缓存,快速缓存到文件中.F('access_token',json_encode($data));//返回access_tokenreturn $data['access_token'];}else{exit('微信获取access_token失败');}}}

2、通过获取到的access_token,像微信发起请求获取到jsapi_ticket,确保获取access_token和获取jsapi_ticket是使用的appid和appserect是一样的(最好直接全局定义一下)。关于发送请求返回的json可以去官方文档看下

/*获取jsapi_ticket*/function getJsapiTicket(){//jsapi_ticket也必须存在全局缓存文件中,每次获取的时候先判断是否过期,过期则重新获取$jsapi_ticket_data = json_decode(F('jsapi_ticket'),true);if($jsapi_ticket_data !== null && $jsapi_ticket_data['ticket'] && $jsapi_ticket_data['expires_in'] > time()){return $jsapi_ticket_data['ticket'];}else{$curl = curl_init();//获取全局缓存的access_token$access_token = getAccessToken();curl_setopt($curl,CURLOPT_URL,'https://api./cgi-bin/ticket/getticket?access_token='.$access_token.'&type=jsapi');curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//获取access_token$data = json_decode(curl_exec($curl),true);if($data != null && $data['ticket']){//设置access_token的过期时间,有效期是7200s$data['expires_in'] = $data['expires_in'] + time();//将access_token全局缓存,快速缓存到文件中.F('jsapi_ticket',json_encode($data));//返回access_tokenreturn $data['ticket'];}else{exit('微信获取jsapi_ticket失败');}}}

3、创建16位的随机数

/*获取随机字符串*/function nonceStr(){//定义一个字符串$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';//当前的时间戳$time = time();//从该字符串中获取随机字符串$chars = $chars.$time;//打乱字符串$chars = str_shuffle($chars);return substr($chars,0,16);}4、生成签名/**生成签名**$nonceStr 16位随机数**$time 获取随机数时的时间戳*/function signature($time,$url,$nonceStr){//拼接字符串$string = 'jsapi_ticket='.getJsapiTicket().'&noncestr='.$nonceStr.'&timestamp='.$time.'&url='.$url;//生成签名$string = sha1($string);return $string;}

5、上面是创建生成签名需要的函数,下面是如何验证

6、分享页面的js

var imgUrl = '小图标,完整地址如:/images/xxx.png'; var lineLink = '分享的网页,地址完整地址如:/xxx/xxx.html'; var descContent = '分享的内容';var shareTitle = '分享的内标题';var appid = '';$.ajax({type : 'POST',url : "获取wx.config所需参数的函数地址",dataType : "json",data:{url:window.location.href.split('#')[0]},success : function(data){var appId = data['appId'];var timestamp = data['timestamp'];var nonceStr = data['nonceStr'];var signature = data['signature'];wx.config({debug: false,appId: appId,timestamp: timestamp,nonceStr: nonceStr,signature: signature,jsApiList: ['updateTimelineShareData',//1.4.0的分享接口,注意:使用新版本的分享功能,一定要在该列表加上对应的老版本功能接口,否则新接口不起作用'updateAppMessageShareData',//1.4.0的分享接口,注意:使用新版本的分享功能,一定要在该列表加上对应的老版本功能接口,否则新接口不起作用'onMenuShareTimeline','onMenuShareAppMessage']});wx.ready(function() {wx.updateTimelineShareData({title: shareTitle, // 分享标题link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: imgUrl, // 分享图标success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});wx.updateAppMessageShareData({title: shareTitle, // 分享标题desc: descContent, // 分享描述link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: imgUrl, // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl:'' , // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}});});}});

7、获取config参数的函数

public function jsSDKConfig(){$url =get_value_by_post('url');$url = str_replace("&", "&", $url);//必须,否则可能会出现无效签名//$array['url'] =$url;//不是必须的参数,但是可以输出url,如果出现无效签名其他也没有问题的时候注意一下这个输出,看下是否和实际当前网页地址一致(不包#后面的),必须每个字符都一样才不会出现无效签名,这里也给自己备注一下。$array['appId'] = C('WECHAT_APPID');//定义的appId//生成签名的时间戳$time = time();$array['timestamp'] = $time;//签名使用的随机字符串$nonceStr = nonceStr();$array['nonceStr'] = $nonceStr;//生成签名$array['signature'] = signature($time,$url,$nonceStr);$this->ajaxReturn($array);}

8、总的来说,就是进入页面后通过自定义的生成签名方法jsSDKConfig获取到wx.config所需参数用来验证使用<script src="https://res2./open/js/jweixin-1.4.0.js "></script>中的接口。

9、这个也算是纪录一下自己的学习成果,中途遇到的最大问题就是在将参数输入微信 JS 接口签名校验工具生成的签名与后台输出的签名一样,但是还是提示invalid signature,一直找不到问题,最后发现是ajax在将url传递的过程中将&改为了& amp;所以导致了签名无效,所以在遇到类似问题时一定要查看网页地址和传递到后台的url是否一模一样,必须一样!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。