要实现微信分享功能,你需要遵循以下步骤:
1、注册微信公众平台账号并创建公众号。
2、配置公众号的JS接口安全域名。
3、获取微信公众号的AppID和AppSecret。
4、使用微信JSSDK实现分享功能。
详细步骤如下:
第一步:注册微信公众平台账号并创建公众号
访问微信公众平台官网(https://mp.weixin.qq.com/),注册一个公众号账号,并按照提示完成公众号的创建。
第二步:配置公众号的JS接口安全域名
登录微信公众平台,进入“开发”>“基本配置”,填写你的网站域名,确保域名已经备案。
第三步:获取微信公众号的AppID和AppSecret
在微信公众平台的“开发”>“基本配置”页面,你可以找到你的AppID和AppSecret,请妥善保管这两个密钥,不要泄露给他人。
第四步:使用微信JSSDK实现分享功能
在你的PHP项目中,引入微信JSSDK文件:
<script src="https://res.wx.qq.com/open/js/jweixin1.6.0.js"></script>调用微信JSSDK的wx.config()方法配置分享参数:
wx.config({
debug: false, // 开启调试模式
appId: 'your_app_id', // 必填,公众号的唯一标识
timestamp: 'your_timestamp', // 必填,生成签名的时间戳
nonceStr: 'your_nonceStr', // 必填,生成签名的随机串
signature: 'your_signature', // 必填,签名
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表
});接下来,调用wx.ready()方法,当配置完成后执行分享功能:
wx.ready(function () {
// 分享到朋友圈
wx.onMenuShareTimeline({
title: '分享标题', // 分享标题
link: '分享链接', // 分享链接
imgUrl: '分享图片链接', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
alert('分享成功');
},
cancel: function () {
// 用户取消分享后执行的回调函数
alert('取消分享');
}
});
// 分享给朋友
wx.onMenuShareAppMessage({
title: '分享标题', // 分享标题
desc: '分享描述', // 分享描述
link: '分享链接', // 分享链接
imgUrl: '分享图片链接', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
alert('分享成功');
},
cancel: function () {
// 用户取消分享后执行的回调函数
alert('取消分享');
}
});
});全代码如下:
<?php
// 声明页面header
header("Content-type:charset=utf-8");
// 声明APPID、APPSECRET
$appid = "填写你的APPID";
$appsecret = "填写你的APPSECRET";
// 获取access_token和jsapi_ticket
function getToken(){
$file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
$result = json_decode($file,true);
//判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
//如果过期了则请求接口生成新的access_token并且缓存access_token.json
if (time() > $result['expires']){
$data = array();
$data['access_token'] = getNewToken();
$data['expires'] = time()+7000;
$jsonStr = json_encode($data);
$fp = fopen("access_token.json", "w");
fwrite($fp, $jsonStr);
fclose($fp);
return $data['access_token'];
}else{
return $result['access_token'];
}
}
//获取新的access_token
function getNewToken($appid,$appsecret){
global $appid;
global $appsecret;
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret."";
$access_token_Arr = file_get_contents($url);
$token_jsonarr = json_decode($access_token_Arr, true);
return $token_jsonarr["access_token"];
}
$access_token = getToken();
//缓存jsapi_ticket
function getTicket(){
$file = file_get_contents("jsapi_ticket.json",true);//读取jsapi_ticket.json里面的数据
$result = json_decode($file,true);
//判断jsapi_ticket是否在有效期内,如果在有效期则获取缓存的jsapi_ticket
//如果过期了则请求接口生成新的jsapi_ticket并且缓存jsapi_ticket.json
if (time() > $result['expires']){
$data = array();
$data['jsapi_ticket'] = getNewTicket();
$data['expires'] = time()+7000;
$jsonStr = json_encode($data);
$fp = fopen("jsapi_ticket.json", "w");
fwrite($fp, $jsonStr);
fclose($fp);
return $data['jsapi_ticket'];
}else{
return $result['jsapi_ticket'];
}
}
//获取新的access_token
function getNewTicket($appid,$appsecret){
global $appid;
global $appsecret;
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".getToken()."";
$jsapi_ticket_Arr = file_get_contents($url);
$ticket_jsonarr = json_decode($jsapi_ticket_Arr, true);
return $ticket_jsonarr["ticket"];
}
$jsapiTicket = getTicket();
// 动态获取URL
$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 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
str_shuffle($createNonceStr);
$nonceStr = substr(str_shuffle($createNonceStr),0,16);
// 按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
// 按顺序排列按sha1加密生成字符串
$signature = sha1($string);
?>
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<title>要分享的index模板页面</title>
</head>
<body>
<h3>已获得updateAppMessageShareData</h3>
<h3>已获得updateTimelineShareData</h3>
<h3>这两个API权限</h3>
<h3>请点击右上角[···]体验</h3>
</body>
</html>
<!-- 引入微信分享js-->
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script type="text/javascript">
// 初始化配置
wx.config({
debug: true, // 正式上线后改成false不在弹出调试信息
appId: '<?php echo $appid;?>',
timestamp: '<?php echo $timestamp;?>',
nonceStr: '<?php echo $nonceStr;?>',
signature: '<?php echo $signature;?>',
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'updateAppMessageShareData', //分享到朋友圈
'updateTimelineShareData',//分享给朋友
]
});
// 配置完成后会调用ready函数
wx.ready(function (res) {
//分享到朋友圈
wx.updateTimelineShareData({
title: '调用成功!分享到朋友圈!', // 分享标题
link: 'http://www.liketube.cn/res/share.php', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'http://www.liketube.cn/res/1.jpg', // 分享图标
success: function (res) {
// 分享成功
}
})
wx.updateAppMessageShareData({
title: '调用成功!分享给好友!', // 分享标题
desc: '微信JSSDK1.6新版分享接口成功调用!', // 分享描述
link: 'http://www.liketube.cn/res/share.php', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'http://www.liketube.cn/res/1.jpg', // 分享图标
success: function (res) {
// 分享成功
}
})
});
//错误返回信息
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
alert(res);
});
</script>相关问题与解答
1、Q: 如何获取微信公众号的access_token?
A: 你可以通过调用微信公众平台提供的https://api.weixin.qq.com/cgibin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET接口获取access_token,APPID和APPSECRET分别为你在微信公众平台上申请的AppID和AppSecret。
评论 (0)