2016年开始,如果想分享链接给好友或者朋友圈,如果不是用官方的API,就不显示图片和简介,这让分享的体验下降了一大截。而如果想使用官方API,不但需要一个认证的微信号,还有后台绑定备案的域名,这里有两个蛋疼的地方:一个是域名需要备案,另一个是只能绑定三个。
2018.1.1开始,域名备案需要实名认证,所有海外域名供应商都没有这个功能,也就是说你必须将域名转回国运营商才能进行备案。海外域名基本上就无法备案了。今天想了个解决方案,在不改变先有域名和系统的情况下,让微信分享出现简介和图片。
首先你需要:
- 一个认证的微信号,用于分享API
- 一个备案的域名,随便买个备案即可
- 备案域名的网站下使用API中跑分享程序
基本原理其实非常简单,就是在备案域名下用curl获取网站,然后分享出去。用户在查看的时候会看到在备案的域名下看到原本的网站,但是进行操作的时候都会回到原先的域名中,而在微信分享的时候,微信API调用的域名是备案的域名。代码直接贴出来,写了些备注,不解释了。由于网站是GBK,所以加了GBK的转换,其实可以不需要。
<?php // wechat share api require_once ("wx/jssdk.php"); $jssdk = new JSSDK("yourkey", "yoursecret"); $signPackage = $jssdk->GetSignPackage(); //get url and set gbk(optional) header('Content-type: text/html; charset=GBK'); $url=$_GET['url']; //curl page $ch = curl_init(); $timeout = 10; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $data = curl_exec($ch); curl_close($ch); // get title, desc, keyword $doc = new DOMDocument(); @$doc->loadHTML($data); $nodes = $doc->getElementsByTagName('title'); $title = $nodes->item(0)->nodeValue; $metas = $doc->getElementsByTagName('meta'); for ($i = 0; $i < $metas->length; $i++) { $meta = $metas->item($i); if($meta->getAttribute('name') == 'description') $description = $meta->getAttribute('content'); if($meta->getAttribute('name') == 'keywords') $keywords = $meta->getAttribute('content'); } print_r($data); ?> <div id="curl-title"><?php echo mb_convert_encoding($title, 'GBK', 'utf-8'); ?></div> <div id="curl-desc"><?php echo mb_convert_encoding($description, 'GBK', 'utf-8'); ?></div> <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script> var title = document.getElementById("curl-title").innerHTML; var desc = document.getElementById("curl-desc").innerHTML; var imgurl = "https://blog.jing.do/wp-content/uploads/2017/04/icon.jpg"; wx.config({ debug: false, appId: '<?php echo $signPackage["appId"];?>', timestamp: '<?php echo $signPackage["timestamp"];?>', nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ 'checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo' ] }); window.share_config = { "share": { "imgUrl": imgurl, "desc" : desc, "title" : title, "link": window.location.href, success: function (res) { } } }; wx.ready(function () { wx.onMenuShareAppMessage(share_config.share); wx.onMenuShareTimeline(share_config.share); }); </script>
如果不太会用微信JDK,回头我再写个简单的教程。
另外分享的原网站需要对每个二维码进行重新生成,比如你备案的域名是sbicp.com,那么你原网站分享的二维码需要是:http://sbicp.com/share.php?url=oldurl.com/path/
至于怎么生成二维码,网上挺多的,我用的这个:https://www.jianshu.com/p/dfefe14d9f2f
亲测可行,有问题留言
不太会用微信JDK,有空的时候可不可以写个简单的教程呀?
微信有官方的文档,你可以看下:https://developers.weixin.qq.com/doc/
请问现在这个失效了吗?
没有。理论上是不会失效的
大神,有没有不用微信认证号分享的方法呢?
没有,只有可能未备案域名。。。
我一个未备案域名像分享带图,帮我弄下吗?付费
你需要至少有一个备案的域名做跳转。建议备案一个先
我有一个国内备案的域名,但是分享微信链接的时候只能带图片和标题。简介是URL链接,有没有办法更改简介为文章的头部内容呢?这样用户体验就好很多。
参考上面代码里面的:
window.share_config = {
"share": {
"imgUrl": imgurl,
"desc" : desc,
"title" : title,
"link": window.location.href,
success: function (res) {
}
}
};