搜尋
首頁微信小程式微信開發PHP微信分享開發詳解

PHP微信分享開發詳解

Jan 16, 2017 pm 02:00 PM

 分享一個php微信端開發的經驗,有時候當一個專案或工程需要微信端分享之後做一系列事件那麼我們就需要獲取到微信分享這個動作,也就是說我們已經知道了當前這個東西已經被分享了,那麼走微信預設的分享顯然是不行的我們需要自己動手來配置微信分享,當用戶分享時走的是我們預定好的程式那麼我們就可以輕鬆實現分享之後所做的事情。

  在頁面端主要是一個js如下:

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
 
<script>
wx.config({
   debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   appId: &#39;{$appid}&#39;, // 必填,公众号的唯一标识
   timestamp:{$timestamp} , // 必填,生成签名的时间戳
   nonceStr: &#39;{$nonceStr}&#39;, // 必填,生成签名的随机串
   signature: &#39;{$signature}&#39;,// 必填,签名,见附录1
   jsApiList: [&#39;onMenuShareAppMessage&#39;,&#39;onMenuShareTimeline&#39;] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
 });
 
 wx.ready(function(){
  //分享给朋友
  wx.onMenuShareAppMessage({
    title: {$title}, // 分享标题 此处$title可在控制器端传递也可在页面传递 页面传递讲解在下面哦
    desc: {$desc}, //分享描述
    link: {$link}, // 分享链接
    imgUrl: {$imgurl}, // 分享图标
    type: &#39;&#39;, // 分享类型,music、video或link,不填默认为link
    dataUrl: &#39;&#39;, // 如果type是music或video,则要提供数据链接,默认为空
    success: function () {
       alert(&#39;分享成功&#39;);
    },
    cancel: function () {
      // 用户取消分享后执行的回调函数
      // alert(&#39;取消分享&#39;);
    }
  });
  //分享到朋友圈
   wx.onMenuShareTimeline({
    title: {$title}, // 分享标题
    desc: {$desc}, // 分享描述
    link: {$link}, // 分享链接
    imgUrl: {$imgurl}, // 分享图标
    success: function () {
      // 用户确认分享后执行的回调函数
    },
    cancel: function () {
      // 用户取消分享后执行的回调函数
    }
  });
 });
 
</script>

當wx.config配置好後程式才會接著走下面的分享,此處調試可將false改成true若配置好那麼正常彈出ok等資訊若未調試設定好那麼這裡改成true也不會有任何彈出效果

wx.config需要控制器傳來四個參數即appId、timestamp、nonceStr、signature;控制器程式碼如下:

<?php
 
$jssdk = new \Home\Util\JSSDK(C(&#39;APPID&#39;), C(&#39;SECRET&#39;));//此处C里面的东西为你所使用的公众号的appid和secret,这俩个东西可在微信公众平台获取到 不详细解释 找不到追加评论(讲解) JSSDK文件代码在下
$signPackage = $jssdk->GetSignPackage();
 
$this->assign(&#39;appid&#39;,$signPackage["appId"]);
$this->assign(&#39;timestamp&#39;,$signPackage["timestamp"]);
$this->assign(&#39;nonceStr&#39;,$signPackage["nonceStr"]);
 $this->assign(&#39;signature&#39;,$signPackage["signature"]);

在這裡就設定好了wx.config,還可以接著穿title等資訊在這裡舉個例子

$this->assign('title',$title);

JSSDK檔碼:

<?php
namespace Home\Util;
use Think\Controller;
class JSSDK{
 private $appId;
 private $appSecret;
 public function __construct($appId, $appSecret) {
  $this->appId = $appId;
  $this->appSecret = $appSecret;
 }
 public function getSignPackage() {
  $jsapiTicket = $this->getJsApiTicket();
  // 注意 URL 一定要动态获取,不能 hardcode.
  $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]";
  $timestamp = time();
  $nonceStr = $this->createNonceStr();
  // 这里参数的顺序要按照 key 值 ASCII 码升序排序
  $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$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;
 }
 public function getJsApiTicket() {
  // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
  $data = json_decode($this->get_php_file("jsapi_ticket.php"));
  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?access_token=$accessToken&type=jsapi";
   $res = json_decode($this->httpGet($url));
   $ticket = $res->ticket;
   // var_dump($url);
   if ($ticket) {
    $data->expire_time = time() + 7000;
    $data->jsapi_ticket = $ticket;
    $this->set_php_file("jsapi_ticket.php", json_encode($data));
   }
  } else {
   $ticket = $data->jsapi_ticket;
  }
  return $ticket;
 }
 public function getAccessToken() {
  // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
  $data = json_decode($this->get_php_file("access_token.php")); 
  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 = $this->getJson($url);
   $access_token = $res[&#39;access_token&#39;];
   // var_dump($res);
   if ($access_token) {
    $data->expire_time = time() + 7000;
    $data->access_token = $access_token;
    $this->set_php_file("access_token.php", json_encode($data));
   }
  } else {
   $access_token = $data->access_token;
  }
  return $access_token;
  // $aa = $access_token;
  // var_dump($aa);
 }
 //获取access_token
 public function getJson($url){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $output = curl_exec($ch);
   curl_close($ch);
   // var_dump(json_decode($output, true));
   return json_decode($output, true);
 }
 //获取ticket
 private function httpGet($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  // curl_setopt($curl, CURLOPT_TIMEOUT, 500);
  // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
  // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  $res = curl_exec($curl);
  // var_dump($res);
  curl_close($curl);  
  return $res;
 }
 private function get_php_file($filename) {
  return trim(substr(file_get_contents($filename), 15));
  // echo trim(substr(file_get_contents($filename), 15));die;
  // $aa = trim(substr(file_get_contents($filename), 15));
 }
 private function set_php_file($filename, $content) {
  $fp = fopen($filename, "w");
  fwrite($fp, "<?php exit();?>" . $content);
  fclose($fp);
 }
}

講到這裡微信就告一段落了但是有瑕疵哦如果我們想動態傳遞參數怎麼辦  也就是說當頁面資訊wx.config配置好後我們突然又想重新賦值給$title等變數資訊怎麼辦?

我們可以這樣  講分享寫在一個方法裡面如下(大致代碼):

<script>
var zl= function (title,link,imgurl,desc){
 wx.ready(function(){
  //分享给朋友
  wx.onMenuShareAppMessage({
    title: title, // 分享标题
    desc: desc, //分享描述
    link: link, // 分享链接
    imgUrl: imgurl, // 分享图标
    type: &#39;&#39;, // 分享类型,music、video或link,不填默认为link
    dataUrl: &#39;&#39;, // 如果type是music或video,则要提供数据链接,默认为空
    success: function () {
       alert(&#39;分享成功&#39;);
    },
    cancel: function () {
      // 用户取消分享后执行的回调函数
      // alert(&#39;取消分享&#39;);
    }
  });
  //分享到朋友圈
   wx.onMenuShareTimeline({
    title: title, // 分享标题
    desc: desc, // 分享描述
    link: link, // 分享链接
    imgUrl: imgurl, // 分享图标
    success: function () {
      // 用户确认分享后执行的回调函数
    },
    cancel: function () {
      // 用户取消分享后执行的回调函数
      // alert(&#39;已取消分享&#39;);
    }
  });
 });
};
</script>

解釋一下啊從控制器進入頁面已經配置好了分享內的title等信息  那麼在配置好之後我又想在頁面重新給title值那麼就是這個方法了頁面複製程式碼如下

<script>
zl(title,link,imgurl,desc);
</script>

easy吧小夥伴們如想詳細了解微信端此功能和其他功能可參考手冊

以上就是本文的全部內容,希望對大家的學習有幫助,也希望大家多多支援PHP中文網。

更多PHP微信分享開發詳解相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),