在tp5框架下对接微信分享朋友圈接口,并显示图片和标题。
要使用 微信JS-SDK 进行调用;
准备步骤:
1,先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
2,获取公众号对应的 appid 和 appsecret。
3.公众号取得认证。
不罗嗦,直接上代码:
1,js 代码,在需要分享的页面添加:
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>//引入js
<script>
window.οnlοad=function(){
var ajaxurl = '{:url("index/weixin")}';
var urll=location.href.split('#')[0];
$.ajax({
url:ajaxurl,
type:"post",
data:{urll:urll},
dataType:"json",
success:function(s){
wx.config({
debug: true, //分享成功后可以关闭 false
appId: s.appid,
timestamp: s.timestamp,
nonceStr: s.nonceStr,
signature: s.signature,
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage']
});
wx.ready(function(){
wx.onMenuShareTimeline({
title: '{$subtitle}', // 分享标题
link: s.url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: "imgurl", // 分享图标 使用绝对路径
success: function () {
}
});
wx.onMenuShareAppMessage({
title: '{$subtitle}',
desc: s.url, // 分享描述
link: s.url, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: "imgurl", // 分享图标 使用绝对路径
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
}
});
});
},
error:function(){
console.log("通信失败");
}
});
}
/* alert(location.href.split('#')[0]); */ //弹出的url必须与访问地址一致
</script>
2.php代码
public function weixin(){
$url = input('urll');//获取当前页面的url,接收请求参数
$root['url'] = $url;
//获取access_token,并缓存
$file = RUNTIME_PATH.'/access_token';//缓存文件名access_token
$appid='xxxxxxxxxxx'; // 填写自己的appid
$secret='xxxxxxxxxxx'; // 填写自己的appsecret
$expires = 3600;//缓存时间1个小时
if(file_exists($file)) {
$time = filemtime($file);
if(time() - $time > $expires) {
$token = null;
}else {
$token = file_get_contents($file);
}
}else{
fopen("$file", "w+");
$token = null;
}
if (!$token || strlen($token) < 6) {
$res = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret."");
$res = json_decode($res, true);
$token = $res['access_token'];
// write('access_token', $token, 3600);
@file_put_contents($file, $token);
}
//获取jsapi_ticket,并缓存
$file1 = RUNTIME_PATH.'/jsapi_ticket';
if(file_exists($file1)) {
$time = filemtime($file1);
if(time() - $time > $expires) {
$jsapi_ticket = null;
}else {
$jsapi_ticket = file_get_contents($file1);
}
}else{
fopen("$file1", "w+");
$jsapi_ticket = null;
}
if (!$jsapi_ticket || strlen($jsapi_ticket) < 6) {
$ur = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$token&type=jsapi";
$res = file_get_contents($ur);
$res = json_decode($res, true);
$jsapi_ticket = $res['ticket'];
@file_put_contents($file1, $jsapi_ticket);
}
$timestamp = time();//生成签名的时间戳
$metas = range(0, 9);
$metas = array_merge($metas, range('A', 'Z'));
$metas = array_merge($metas, range('a', 'z'));
$nonceStr = '';
for ($i=0; $i < 16; $i++) {
$nonceStr .= $metas[rand(0, count($metas)-1)];//生成签名的随机串
}
$string1="jsapi_ticket=".$jsapi_ticket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url."";
$signature=sha1($string1);
$root['appid'] = $appid;
$root['nonceStr'] = $nonceStr;
$root['timestamp'] = $timestamp;
$root['signature'] = $signature;
echo json_encode($root);
}
可能遇到的问题:
调用一切正常,页面弹出 {errMsg: config:ok} 但是分享出去不是自己定义好的图片和标题,很可能是公众号没认证,查看一下接口权限。