ThinkPHP实现微信分享好友转发朋友圈自定义图片和文字的方法,在开始之前呢,我们需要准备好一些东西:

前期准备

  • 认证的公众号,订阅号或者服务号都可以,只要是认证过的就可以。
  • 公众号的AppID和AppSecret,登录微信公众平台,开发—基本配置,就可以看到啦。
  • 设置JSJS接口安全域名,登录微信公众平台,设置—公众号设置—功能设置里,填写就可以了。
  • 官方SDK,我们直接下载案例就可以,下载地址:http://demo.open.weixin.qq.com/jssdk/sample.zip里面包含php、java、nodejs以及python的示例代码。

服务端准备(ThinkPHP)

  • 将刚刚下载的jssdk.php文件重命名为Jssdk.php,然后和access_token.php、jsapi_ticket.php一起放入到ThinkPHP框架的第三方接口扩展目录下(extend/org/wechat/)。
  • 修改Jssdk.php文件

    1. 首先我们需要在构造函数中设置 $this->path = __DIR__ . DS; 即:

      namespace wechat;
      class Jssdk  {
        private $appId;
        private $appSecret;
        private $path;
        public function __construct($appId, $appSecret) {
          $this->appId = $appId;
          $this->appSecret = $appSecret;
          $this->path = __DIR__ . DS;
        }
        ...
      }
    2. get_php_file函数返回值中的$filename改为 $this->path.$filename ,即:
    private function get_php_file($filename) {
      return trim(substr(file_get_contents($this->path.$filename), 15));
    }
    1. 设置token的缓存,修改getAccessToken,加入cache
    private function getAccessToken() {
      // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
      // cache('at', ['access_token'=>'sss', 'expire_time' => '123']);
      // $data = json_decode($this->get_php_file("access_token.php"));
      $data = cache('at');
      if ($data['expire_time'] < time()) {
        // 如果是企业号用以下URL获取access_token
        // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
        $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;
          cache('at', ['access_token'=>$access_token, 'expire_time' => time() + 7000]);
          // $this->set_php_file("access_token.php", json_encode($data));
        }
      } else {
        $access_token = $data['access_token'];
      }
      return $access_token;
    }
  • 在控制器里面调用

    1. 导入jssdk, use wechat\Jssdk;
    2. 传给前端

      $jssdk = new Jssdk($AppID, $AppSecret);
      $res = $jssdk->getSignPackage();
      $appId = $res['appId'];
      $timestamp = $res['timestamp'];
      $nonceStr = $res['nonceStr'];
      $signature = $res['signature'];
      $this->assign(
          array(
              'appId'=>$appId,
              'timestamp'=>$timestamp,
              'nonceStr'=>$nonceStr,
              'signature'=>$signature,
          )
      );

网页端

  • 导入jssdk

    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    
  • 设置分享内容

    <script type="text/javascript">
    var title = '分享标题';
    var imgUrl = '分享图片';
    var link = '分享地址';
    var desc = '分享描述';
     
    wx.config({
      debug: false,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
      appId: '{$appId}', // 必填,公众号的唯一标识
      timestamp: '{$timestamp}', // 必填,生成签名的时间戳
      nonceStr: '{$nonceStr}', //必填, 生成签名的随机串
      signature: '{$signature}', //必填,签名
      jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone'] //必填, JS接口列表,这里只填写了分享需要的接口
    })
    wx.ready(function () {
      wx.onMenuShareTimeline({
          title: title,
          link: link,
          desc:desc,
          imgUrl: imgUrl,
          success: function() {
              // 用户确认分享后执行的回调函数
          },
          cancel: function() {
              // 用户取消分享后执行的回调函数
          }
      });
      wx.onMenuShareAppMessage({
          title: title, // 分享标题
          desc: desc, // 分享描述
          link: link, // 分享链接
          imgUrl: imgUrl, // 分享图标
          type: 'link', // 分享类型,music、video或link,不填默认为link
          dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
          success: function() {
              // 用户确认分享后执行的回调函数
          },
          cancel: function() {
              // 用户取消分享后执行的回调函数
          }
      });
    })
    </script>
Last modification:January 21st, 2021 at 08:28 pm
If you think my article is useful to you, please feel free to appreciate