国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程序 微信開發(fā) PHP微信分享開發(fā)詳解

PHP微信分享開發(fā)詳解

Jan 16, 2017 pm 02:00 PM

?分享一個(gè)php微信端開發(fā)的經(jīng)驗(yàn),有時(shí)候當(dāng)一個(gè)項(xiàng)目或工程需要微信端分享之后做一系列事件那么我們就需要獲取到微信分享這個(gè)動(dòng)作,也就是說我們已經(jīng)知道了當(dāng)前這個(gè)東西已經(jīng)被分享了 ,那么走微信默認(rèn)的分享顯然是不行的我們需要自己動(dòng)手來配置微信分享,當(dāng)用戶分享時(shí)走的是我們預(yù)定好的程序那么我們就可以輕松實(shí)現(xiàn)分享之后所做的事情。

? 在頁面端主要是一個(gè)js如下:

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
 
<script>
wx.config({
   debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會(huì)通過log打出,僅在pc端時(shí)才會(huì)打印。
   appId: &#39;{$appid}&#39;, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
   timestamp:{$timestamp} , // 必填,生成簽名的時(shí)間戳
   nonceStr: &#39;{$nonceStr}&#39;, // 必填,生成簽名的隨機(jī)串
   signature: &#39;{$signature}&#39;,// 必填,簽名,見附錄1
   jsApiList: [&#39;onMenuShareAppMessage&#39;,&#39;onMenuShareTimeline&#39;] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
 });
 
 wx.ready(function(){
  //分享給朋友
  wx.onMenuShareAppMessage({
    title: {$title}, // 分享標(biāo)題 此處$title可在控制器端傳遞也可在頁面?zhèn)鬟f 頁面?zhèn)鬟f講解在下面哦
    desc: {$desc}, //分享描述
    link: {$link}, // 分享鏈接
    imgUrl: {$imgurl}, // 分享圖標(biāo)
    type: &#39;&#39;, // 分享類型,music、video或link,不填默認(rèn)為link
    dataUrl: &#39;&#39;, // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
    success: function () {
       alert(&#39;分享成功&#39;);
    },
    cancel: function () {
      // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
      // alert(&#39;取消分享&#39;);
    }
  });
  //分享到朋友圈
   wx.onMenuShareTimeline({
    title: {$title}, // 分享標(biāo)題
    desc: {$desc}, // 分享描述
    link: {$link}, // 分享鏈接
    imgUrl: {$imgurl}, // 分享圖標(biāo)
    success: function () {
      // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
    },
    cancel: function () {
      // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
    }
  });
 });
 
</script>

當(dāng)wx.config配置好后程序才會(huì)接著走下面的分享,此處調(diào)試可將false改成true若配置好那么正常彈出ok等信息 若未配置好 那么此處改成true也不會(huì)有任何彈出效果

wx.config需要控制器傳來四個(gè)參數(shù)即appId、timestamp、nonceStr、signature;控制器代碼如下:

<?php
 
$jssdk = new \Home\Util\JSSDK(C(&#39;APPID&#39;), C(&#39;SECRET&#39;));//此處C里面的東西為你所使用的公眾號(hào)的appid和secret,這倆個(gè)東西可在微信公眾平臺(tái)獲取到 不詳細(xì)解釋 找不到追加評(píng)論(講解) 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等信息 在這里舉個(gè)例子

$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 一定要?jiǎng)討B(tài)獲取,不能 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();
  // 這里參數(shù)的順序要按照 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 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例
  $data = json_decode($this->get_php_file("jsapi_ticket.php"));
  if ($data->expire_time < time()) {
   $accessToken = $this->getAccessToken();  
   // 如果是企業(yè)號(hào)用以下 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 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例
  $data = json_decode($this->get_php_file("access_token.php")); 
  if ($data->expire_time < time()) {
   // 如果是企業(yè)號(hào)用以下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);
  // 為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩?,所有微信接口采用https方式調(diào)用,必須使用下面2行代碼打開ssl安全校驗(yàn)。
  // 如果在部署過程中代碼在此處驗(yàn)證失敗,請(qǐng)到 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);
 }
}

講到這里微信分享就告一段落了 但是有瑕疵哦 如果我們想動(dòng)態(tài)傳遞參數(shù)怎么辦 也就是說當(dāng)頁面信息wx.config配置好后我們突然又想重新賦值給$title等變量信息 怎么辦?

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

<script>
var zl= function (title,link,imgurl,desc){
 wx.ready(function(){
  //分享給朋友
  wx.onMenuShareAppMessage({
    title: title, // 分享標(biāo)題
    desc: desc, //分享描述
    link: link, // 分享鏈接
    imgUrl: imgurl, // 分享圖標(biāo)
    type: &#39;&#39;, // 分享類型,music、video或link,不填默認(rèn)為link
    dataUrl: &#39;&#39;, // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
    success: function () {
       alert(&#39;分享成功&#39;);
    },
    cancel: function () {
      // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
      // alert(&#39;取消分享&#39;);
    }
  });
  //分享到朋友圈
   wx.onMenuShareTimeline({
    title: title, // 分享標(biāo)題
    desc: desc, // 分享描述
    link: link, // 分享鏈接
    imgUrl: imgurl, // 分享圖標(biāo)
    success: function () {
      // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
    },
    cancel: function () {
      // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
      // alert(&#39;已取消分享&#39;);
    }
  });
 });
};
</script>

解釋一下啊 從控制器進(jìn)入頁面已經(jīng)配置好了分享內(nèi)的title等信息 那么在配置好之后我又想在頁面重新給title值 那么就是這個(gè)方法了 頁面復(fù)制代碼如下

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

easy吧 小伙伴們 如想詳細(xì)了解微信端此功能和其他功能可參考手冊(cè)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持PHP中文網(wǎng)。

更多PHP微信分享開發(fā)詳解相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276