请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 75|回复: 0

网址带图分享到微信朋友圈和微信朋友

[复制链接]

69

主题

105

帖子

2671

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2671
发表于 2020-8-22 22:53:24 | 显示全部楼层 |阅读模式
开通条件:必须是认证的微信公众号;
前期准备:
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>



谁来看过此贴
此贴被TA们浏览了75次
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表