微信分享朋友圈

参考博客 https://www.cnblogs.com/CHEUNGKAMING/p/5717429.html

            https://blog.csdn.net/sh13523149003/article/details/73692699


后台:

    class JSSDK {
  private $appId;
  private $appSecret;


  public function __construct($appId, $appSecret) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
  }


  public function getSignPackage() {
    $jsapiTicket = $this->getJsApiTicket();
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $timestamp = time();
    $nonceStr = $this->createNonceStr();


    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";


    $signature = sha1($string);


    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return $signPackage; 
  }


  private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }


  private function getJsApiTicket() {
    // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("jsapi_ticket.json"));
    if ($data->expire_time < time()) {
      $accessToken = $this->getAccessToken();
      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
      $res = json_decode($this->httpGet($url));
      $ticket = $res->ticket;
      if ($ticket) {
        $data->expire_time = time() + 7000;
        $data->jsapi_ticket = $ticket;
        $fp = fopen("jsapi_ticket.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $ticket = $data->jsapi_ticket;
    }
    return $ticket;
  }


  private function getAccessToken() {
    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("access_token.json"));
    if ($data->expire_time < time()) {
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appId}&secret={$this->appSecret}";
      $res = json_decode($this->httpGet($url));
      $access_token = $res->access_token;
      if ($access_token) {
        $data->expire_time = time() + 7000;
        $data->access_token = $access_token;
        $fp = fopen("access_token.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $access_token = $data->access_token;
    }
    return $access_token;
  }


  private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_URL, $url);


    $res = curl_exec($curl);
    curl_close($curl);


    return $res;
  }

}

前端

<?php 
$appid="你的appid";
$secret="你的secret";
$jssdk = new JSSDK($appid,$secret);
$signPackage = $jssdk->GetSignPackage();
extract(array("signPackage"=>$signPackage));
?>
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>js微信自定义分享标题、链接和图标</title> 
         <meta name="keywords" content="js微信分享,php微信分享" /> 
        <meta name="description" content="PHP自定义微信分享内容,包括标题、图标、链接等,分享成功和取消有js回调函数。" /> 
    </head> 
    <body> 
 
    </body> 
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 
    <script> 
        /* 
         * 注意: 
         * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 
         * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 
         * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 
         * 
         * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: 
         * 邮箱地址:[email protected] 
         * 邮件主题:【微信JS-SDK反馈】具体问题 
         * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 
         */ 
        wx.config({ 
            debug: false, 
            appId: '<?php echo $appid; ?>', 
            timestamp: <?php echo $signPackage["timestamp"]; ?>, 
            nonceStr: '<?php echo $signPackage["nonceStr"]; ?>', 
            signature: '<?php echo $signPackage["signature"]; ?>', 
            jsApiList: [ 
               'onMenuShareTimeline',
               'onMenuShareAppMessage'
            ] 
        }); 
        wx.ready(function() { 
            wx.onMenuShareTimeline({
            title: '张学友表情包',
            desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',
            link: 'http://qzds.tianhusheji.com/wechat/add.php', //这里需要注意是配置自己网站域名的 不然找不到或者无效
            imgUrl: 'http://qzds.tianhusheji.com/static/index/image/timg.jpeg',//同上
            trigger: function (res) {
                // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
                alert('用户点击分享到朋友圈');
            },
            success: function (res) {
                //这里可以处理分享成功之后做什么处理
            },
            cancel: function (res) {
                alert('已取消');
            },
            fail: function (res) {
                alert(JSON.stringify(res));
            }
        });


        wx.onMenuShareAppMessage({
            title: '张学友表情包',
            desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',
            link: 'http://www.baidu.com',
            imgUrl: 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530531714209&di=56d2fe832796e0fe17c65365e89047ba&imgtype=0&src=http%3A%2F%2Fimg.1oc.cn%2F2017%2F12%2F01%2F23-1G020131246-51.jpg',
            trigger: function (res) {
                // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
                alert('用户点击分享给朋友');
            },
            success: function (res) {
                alert('已分享');
            },
            cancel: function (res) {
                alert('已取消');
            },
            fail: function (res) {
                alert(JSON.stringify(res));
            }
        });
        }); 
    </script> 
    <p style="text-align: center;color:red;font-size:20px;margin-top: 120px"><img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530531714209&di=56d2fe832796e0fe17c65365e89047ba&imgtype=0&src=http%3A%2F%2Fimg.1oc.cn%2F2017%2F12%2F01%2F23-1G020131246-51.jpg"></p> 
</html>


猜你喜欢

转载自blog.csdn.net/weixin_38738277/article/details/80887487