简书IT

微信分享缩略图和简介修改

2017-08-17  本文已影响27人  3f9db0513314

发现网上好多教程都是不行的,我钻研了一晚上,终于搞定。官方都没有那么详细,所以我就分享一下,微信静态页面的分享,转发。

首先我们先上效果图,本次效果是这样的

微信分享

一般我们的网站转发是这样的

Paste_Image.png

废话不说,开始演示:
(1)要和微信公众号关联
步骤一:绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
备注:登录后可在“开发者中心”查看对应的接口权限。

Paste_Image.png Paste_Image.png

步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js

ps:这里有官方的示例代码(http://demo.open.weixin.qq.com/jssdk/sample.zip)。可以看看,有java,php,python,node各种版本,为什么需要这些呢,因为你需要动态获取这些参数

Paste_Image.png

这些就在后台生成。

本次我就以php作为后台,ps:本人java,不会php,我知道用java搭后台比较麻烦,所以用php比较快捷
在文件目录写一个"jssdk.php"文件,需要改2个位置AppID和AppSecret

<?php    
$url = $_GET['url'];    
class JSSDK {    
  private $appId;    
  private $appSecret;    
  private $url;    
  public function __construct($appId, $appSecret,$url) {    
    $this->appId = $appId;    
    $this->appSecret = $appSecret;    
$this->url = $url;    
  }    
    
    
  public function getSignPackage() {    
    $jsapiTicket = $this->getJsApiTicket();    
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";    
   // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";    
$url =$this->url;    
    $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 获取 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";    
      $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获取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;    
        $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_SSL_VERIFYPEER, false);    
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);    
    curl_setopt($curl, CURLOPT_URL, $url);    
    $res = curl_exec($curl);    
    curl_close($curl);    
    return $res;    
  }    
}    
    
$jssdk = new JSSDK("公众号AppID", "公众号AppSecret",$url);//按照自己的公众号填写    
$signPackage = $jssdk->GetSignPackage();    
// var_dump($signPackage);  
$tmp=json_encode(array ('appId'=>$signPackage["appId"],'timestamp'=>$signPackage["timestamp"],'nonceStr'=>$signPackage["nonceStr"],'signature'=>$signPackage["signature"],'url'=>$signPackage["url"]));    
$callback = $_GET['callback'];    
echo $callback.'('.$tmp.')';    
exit;    
?>

在"html"就如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=640, target-densitydpi=device-dpi, user-scalable=no">
    <meta name="keywords" content="测试">
    <script src="jquery.min.js"></script>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">
    </script>
    <script>
        url = location.href.split('#')[0];  
        url = encodeURIComponent(url); 
        $.ajax({
            type: "get",
            url: "http://xxxxxx/jssdk.php?url=" + url,
            //替换网址,xxxxx根据自己jssdk.php文件位置修改
            dataType: "jsonp",
            jsonp: "callback",
            jsonpCallback: "success_jsonpCallback",
            success: function(data) {
                wx.config({
                    appId: data.appId,
                    timestamp: data.timestamp,
                    nonceStr: data.nonceStr,
                    signature: data.signature,
                    jsApiList: [
            "onMenuShareTimeline", //分享给好友
                        "onMenuShareAppMessage", //分享到朋友圈
                        "onMenuShareQQ", //分享到QQ
                        "onMenuShareWeibo" //分享到微博
                    ]
                });
            },
            error: function(data) {
                alert("连接失败!");
            }
        });
        wx.ready(function() {
            var shareData = {
                title: '老王标题',
                desc: '老王不想写简介',
                //这里请特别注意是要去除html
                link: 'http://wwl0660.club',
                imgUrl: 'wwl0660.club/logo.jpg'
            };
            wx.onMenuShareAppMessage(shareData);
            wx.onMenuShareTimeline(shareData);
            wx.onMenuShareQQ(shareData);
            wx.onMenuShareWeibo(shareData);
        });
    </script>
<title>老王的测试</title>
</head>
<body>
![](logo.jpg)
<h1>123微信测试</h1>
</body>
</html>

当然运行php要有php的服务器,我用的就是“phpstudy”,简单,作为程序员,自己去摸索,简单

上一篇下一篇

猜你喜欢

热点阅读