时间: 2021-07-06 10:47:59 人气: -
开通条件:必须是认证的微信公众号;
前期准备:
1、绑定域名(域名必须备案)
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
2、添加服务器ip白名单
在“基本配置”的“ip白名单”里面添加对应的服务器IP地址。
3、开通分享的所有权限
在“开发者中心”查看对应的接口权限及开通入口。
4、获取appid和appsecret
在“基本配置”里面即可获取。
php部分代码
<?php //分享到微信好友和朋友圈 // 声明APPID、APPSECRET $appid = "wx45676542356789"; //这里乱填的 $appsecret = "bc345678908765443567iotyrte"; //这里乱填的 // 获取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=wx45676542356789&secret=bc345678908765443567iotyrte"; //这里也要设置appid和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); //var_dump($jsapiTicket.'<bR>'.$nonceStr.'<br>'.$timestamp); 这里为了测试数据做的打印
html部分代码
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script><script> // 初始化配置 wx.config({ debug: false, //调试的时候可以用true,调试成功后记得false。 appId: '<?php echo $appid;?>', timestamp: '<?php echo $timestamp;?>', nonceStr: '<?php echo $nonceStr;?>', signature: '<?php echo $signature;?>', jsApiList: ["updateTimelineShareData", "updateAppMessageShareData"] }); // 配置完成后会调用ready函数 wx.ready(function (res) { //分享到朋友圈 wx.updateTimelineShareData({ title: '{cscms:webname}', // 分享标题 desc: '{cscms:description}', // 分享描述 link: '{cscms:path}', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '{cscms:path}tpl/mobile/skins/music/player/images/music_logo.jpg', // 分享图标 success: function (res) { // 分享成功 } }) wx.updateAppMessageShareData({ title: '{cscms:webname}', // 分享标题 desc: '{cscms:description}', // 分享描述 link: '{cscms:path}', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '{cscms:path}tpl/mobile/skins/music/player/images/music_logo.jpg', // 分享图标 success: function (res) { // 分享成功 } }) }); //错误返回信息 wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 alert(res); }); </script>