微信分享时没有缩略图时的解决方案!
2017-05-23 16:20
330 查看
其实之前微信分享都是默认抓取页面第一张图片的,后来随着微信的版本升级,也防止那种诱导式分享,腾讯屏蔽了这一功能,目前仅在PC版本是自动抓取,所以手机版微信分享带缩略图及简介的话就要使用jssdk。我之前也是不会,后来网上看到了一大神写的,参照他的,自己写了一下这个功能。这个是基于ecshop写的
商品详情页代码:
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script type="text/javascript"> wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: "{$signPackage.appId}", // 必填,公众号的唯一标识 timestamp: "{$signPackage.timestamp}", // 必填,生成签名的时间戳 nonceStr: "{$signPackage.nonceStr}", // 必填,生成签名的随机串 signature: "{$signPackage.signature}",// 必填,签名,见附录1 jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //IOS系统分享时读取图片路径会出现问题 用 encodeURI 来处理下 var img_url = encodeURI("http://{$smarty.server.SERVER_NAME}{$goods_share_img}"); //分享到朋友圈 wx.onMenuShareTimeline({ title: "{$goods.goods_style_name}", // 分享标题 link: "http://{$smarty.server.SERVER_NAME}{$smarty.server.REQUEST_URI}", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: img_url, // 分享图标 success: function () { alert('已分享'); }, cancel: function () { alert('已取消'); } }); //分享给微信好友 wx.onMenuShareAppMessage({ title: "{$goods.goods_style_name}", // 分享标题 desc: "{$goods.goods_style_name}", // 分享描述 link: "http://{$smarty.server.SERVER_NAME}{$smarty.server.REQUEST_URI}", // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: img_url, // 分享图标 type: '', // 分享类型,music、video或link,不填默认为link dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空 success: function () { alert('已分享'); }, cancel: function () { alert('已取消'); } }); }); </script>
PHP脚本代码:
// 微信分享 start //把要用全部封装一个方法里,方便模版中使用 function getSignPackage() { $jsapiTicket = 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 = createNonceStr(); $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string);//生成签名 $signPackage = array( "appId" => 'wxf888b6qb96c0cf91', //自己公众号的AppId,我这里随便写一个 "nonceStr" => $nonceStr, "timestamp" => $timestamp, "signature" => $signature ); return $signPackage; } //生成随机字符串 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 function getJsApiTicket() { $data = $_SESSION['jsapiticket_all']; if ($data['expire_time'] < time()) { $accessToken = getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode(httpGet($url)); foreach ($res as $k=>$v){ $all[$k] = $v; } $ticket = $all['ticket']; if ($ticket) { $_SESSION['jsapiticket_all']['expire_time'] = time() + 7000; $_SESSION['jsapiticket_all']['jsapi_ticket'] = $ticket; } } else { $ticket = $_SESSION['jsapiticket_all']['jsapi_ticket']; } return $ticket; } //获取AccessToken function getAccessToken() { $data = $_SESSION['access_token_all']; if ($data['expire_time'] < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxb338b6a276c0cf25&secret=28cafa17194e9241e6685260b7ebef89"; $res = json_decode(httpGet($url)); foreach ($res as $k=>$v){ $all[$k] = $v; } $access_token = $all['access_token']; if ($access_token) { $_SESSION['access_token_all']['expire_time'] = time() + 7000; $access_token = $all['access_token']; $_SESSION['access_token_all'] =$all; } } else { $access_token = $_SESSION['access_token_all']['access_token']; } return $access_token; } //安全处理 function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } $smarty->assign('signPackage',getSignPackage()); //赋值到模板 // 微信分享end
相关文章推荐
- 微信分享没有缩略图,描述
- 微信分享没有缩略图
- Discuz!手机版微信分享不显示缩略图的解决方案
- 微信分享没有缩略图
- 微信分享卡片中自定义缩略图和标题的技术解决方案
- shareSDK分享 没有安装qq 微信的时候
- 关于MFC控件删除出现“具有该ID的控件已存在”这样的情况的解决方案,详细,网上都没有这么详细的,我是“深受其害”,所以想将详细的方法分享出去。
- 微信分享的标题、缩略图、连接及描述设置方法
- 设置 微信分享时候的的标题 缩略图 连接 描述
- 分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
- 微信分享JS接口失效说明及解决方案
- ios9 qq微信微博等分享用不了的解决方案
- 设置微信分享的标题 缩略图 连接 描述
- 微信分享到朋友圈带上自定义的缩略图
- shareSDK分享 没有安装qq 微信的时候
- android微信分享中bmpToByteArray报错的解决方案
- 设置微信分享的标题 缩略图 连接 描述
- 微信分享带缩略图,标题,简介的JS代码(亲测有效)