微信分享自定义缩略图标题描述

新建Jssdk.php

fastadmin,thinkphp微信分享自定义缩略图标题描述参考代码

<?php
namespace app\index\controller;

use app\common\controller\Frontend;
use fast\Http;
use fast\Random;
use think\Cache;

class Jssdk 
{
    private $appId;
    private $appSecret;

    public function __construct()
    {

        $this->appId = $appId;
        $this->appSecret = $appSecret;
    }

    public function getSignedPackage($url)
    {
        $jsapiTicket = $this->getJsApiTicket();
        $timestamp = time();
        $nonceStr = Random::alnum(16);
        // 这里参数的顺序要按照 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,
            "jsticket" => $jsapiTicket,
        );
        return $signPackage;
    }

    private function getJsApiTicket()
    {
        $ticket = Cache::get("wechat_jsapi_ticket");
        if (!$ticket) {
            $accessToken = $this->getAccessToken();
            // 如果是企业号用以下 URL 获取 ticket
            // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={$accessToken}";
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$accessToken}";
            $ret = Http::get($url);
            $json = json_decode($ret, true);
            $ticket = isset($json['ticket']) ? $json['ticket'] : '';
            if ($ticket) {
                Cache::set('wechat_jsapi_ticket', $ticket, 7200);
            }
        }
        return $ticket;
    }

    private function getAccessToken()
    {
        $token = Cache::get("wechat_access_token");
        if (!$token) {
            // 如果是企业号用以下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}";
            $ret = Http::get($url);
            $json = json_decode($ret, true);
            $token = isset($json['access_token']) ? $json['access_token'] : '';
            if ($token) {
                Cache::set('wechat_access_token', $token, 7200);
            }
        }
        return $token;
    }
}

控制器里面引入

顶部引入use app\controller\Jssdk;

public function index(){ 
        $url = $url;
        $jssdk = new Jssdk();
        $package = $jssdk->getSignedPackage($url);
        $this->assign('pack',$package);
}

 

前端引入:

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

微信分享js:

<script type="text/javascript">
    var title = '{$data.title}';
    var imgUrl = '{$data.image}';
    var link = '分享链接';
    var desc = '{$data.destext}';

    wx.config({
      debug: false,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
      appId: '{$pack.appId}', // 必填,公众号的唯一标识
      timestamp: '{$pack.timestamp}', // 必填,生成签名的时间戳
      nonceStr: '{$pack.nonceStr}', //必填, 生成签名的随机串
      signature: '{$pack.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>

代码提供分享的思路,可以根据自己的实际项目进行二次开发