Maison  >  Article  >  interface Web  >  Explication détaillée de l'analyse d'un exemple de code de pages statiques HTML pour mettre en œuvre des idées de partage WeChat

Explication détaillée de l'analyse d'un exemple de code de pages statiques HTML pour mettre en œuvre des idées de partage WeChat

黄舟
黄舟original
2017-05-26 15:21:594279parcourir

Lors du partage d'une page Web sur WeChat, le lien que vous souhaitez partager est titre + description + vignette. La méthode est fournie dans l'exemple de code de développement WeChat, mais elle ne s'applique qu'aux pages dynamiques. Puisque dedecms génère des fichiers statiques, je souhaite en fait utiliser ajax pour obtenir les paramètres jssdk et également implémenter la fonction de partage WeChat, je vais le partager avec vous ici.
Exemple de code HTML front-end :

<script src="http://外部站点引入/js/jquery-1.11.1.min.js"></script>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script><script>var url=location.href;
  $.ajax({
    type : "get",
    url : "http://xxx/jssdk.php?url="+url,//替换网址,xxx根据自己jssdk文件位置修改    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: &#39;标题&#39;,
  desc: &#39;简介&#39;,//这里请特别注意是要去除html  link: &#39;链接&#39;,
  imgUrl: &#39;标题图&#39;
  };
  wx.onMenuShareAppMessage(shareData);
  wx.onMenuShareTimeline(shareData);
  wx.onMenuShareQQ(shareData);
  wx.onMenuShareWeibo(shareData);
    });</script>

Modifier le fichier serveur jssdk.php

<?php$url = $_GET[&#39;url&#39;];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[&#39;HTTPS&#39;]) && $_SERVER[&#39;HTTPS&#39;] !== &#39;off&#39; || $_SERVER[&#39;SERVER_PORT&#39;] == 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("公众号ID", "公众号密钥",$url);//按照自己的公众号填写$signPackage = $jssdk->GetSignPackage();$tmp=json_encode(array (&#39;appId&#39;=>$signPackage["appId"],&#39;timestamp&#39;=>$signPackage["timestamp"],&#39;nonceStr&#39;=>$signPackage["nonceStr"],&#39;signature&#39;=>$signPackage["signature"],&#39;url&#39;=>$signPackage["url"]));$callback = $_GET[&#39;callback&#39;];echo $callback.&#39;(&#39;.$tmp.&#39;)&#39;;exit;
?>

D'autres peuvent être définis en fonction des paramètres dynamiques de la page.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn