虽然微信官方开放了js-sdk,但是在某些老版本的微信上存在兼容性问题,比如在安卓微信6.0.1版本上分享接口就无法使用,官方给出的解决方案就是升级微信。这不坑爹呢!我又不能强制我的用户去升级微信版本,总不能就抛弃他们吧?所以我们需要:
###破解版js接口 点击查看项目 该接口为一大牛 @Alienfe 所做,当时在微信屏蔽私有接口的情况下,这个js库帮了大忙,破解了微信的限制,使得我们能够继续使用私有接口。但是在最新微信6.1版本,该库已经失效。
###官方sdk 既然官方提供了接口,我们以后肯定是切换到上面的,代码重构少不了的,该接口的开发文档在这里: 官方js-sdk文档 说实话,该文档虽然功能强大,但是配置麻烦,需要请求授权后拿到授权码放到前端js里,简直蛋疼无比,而且不知道未认证的公众号能否使用。
这里就不详细介绍两个接口的使用方法了,这里主要说明一下如何合理使用两个接口,前面说过了,破解版js接口在6.1以上无效,而官方接口在低版本上存在兼容性问题,所以这里我们需要同时使用两个接口,以保证所有微信用户都能够正常分享。
那么,我的策略是:
1.微信版本<6.0.2 使用破解版接口 2.微信版本>=6.0.2 使用官方sdk
就以我的PHP项目为例,在后端,我通过 userAgent 提取微信版本号:
//判断微信版本是否高于6.0.2,低版本用旧接口,高版本用jssdk
preg_match('/MicroMessenger\/(.*?)[^\d\.]/',$_SERVER['HTTP_USER_AGENT'],$m);
if (version_compare($m[1], '6.0.2') == 1) {
$this->assign('wxHighVersion',true);
} else {
$this->assign('wxHighVersion',false);
}
wxHighVersion 是绑定到视图模板的变量名,以便我们在模板决定用哪个接口。模板部分:
<script>
//自定义分享参数
var wxData = {
"imgUrl": "",//图片
"link": "",//分享链接
"title": "",//定义分享标题
"desc":""
};
</script>
<?php if(!$wxHighVersion): ?>
<script src="/js/WeixinApi.js"></script>
<script>
//使用破解版接口
</script>
<?php else: ?>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
//使用官方接口
</script>
<?php endif; ?>
这样,我就实现了全版本兼容,只是重构代码需要细心+耐心。
来源:oschina
链接:https://my.oschina.net/u/878142/blog/370122