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) {
}
}
};