Thinkphp5.1調用微信掃一掃實例,學會再也不怕客戶在微信提的奇葩要求了

哎!苦于客戶一直要求,官方文檔看起來又蛋疼,磨了一個下午整理出一套試用Thinkphp5.1 調用微信掃一掃示例

別小瞧這些代碼哦,它們能幫你實現幾乎所有的微信功能^_^

示例地址:http://spt.zmtek.net/Wxshop/Wxtest/options (手機微信打開)

1 先在Thinkphp -- Vendor 目錄下面創建WxJDK文件夾,然后在創建文件JSSDK.php.

<?php

namespace WxJDK;

class JSSDK

{

? ? //公眾號appid ,公眾號開發配置處可查看

? ? public? ? $appId;

//公眾號appi , 公眾號開發配置處可查看

? ? private $appSecret;

/**

? ? * @name? ? ? ? 初始化參數

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? public function __construct($appId ,$appSecret ){

? ? ? ? $this? ? -> appId? ? ? ? ? ? = $appId;

$this? ? -> appSecret? ? ? ? = $appSecret;

}

? ? /**

? ? * @name? ? ? ? 獲取accessToken

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? public function getAcc(){

? ? ? ? return $this -> getAccessToken();

}

? ? /**

? ? * @name? ? ? ? 獲取config接口注入權限驗證配置

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? public function getWxConfig(){

? ? ? ? # - 獲取 jsapi_ticket

? ? ? ? $jsapiTicket = $this -> getJsApiTicket();

# - 獲取調用頁面的url

? ? ? ? $protocol = (!empty($_SERVER['HTTPS'])&& $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443)? "https://" : "http://";

$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

# - 時間戳

? ? ? ? $timestamp = time();

# - 獲取隨機字符串

? ? ? ? $nonceStr = $this -> createNonceStr();

# - 這里參數的順序要按照 key 值 ASCII 碼升序排序

# - 亦可把參數以數組存值,ksort() - 以升序對關聯數組進行排序

? ? ? ? $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

# - sha1獲取簽名

? ? ? ? $signature = sha1($string);

# - 頁面所需注入參數

? ? ? ? $WxConfig = array(

"appId"? ? => $this -> appId,

"nonceStr"? => $nonceStr,

"timestamp" => $timestamp,

"url"? ? ? => $url,

"signature" => $signature,

"rawString" => $string

? ? ? ? );

# - 返回

? ? ? ? return $WxConfig;

}

? ? /**

? ? * @name? ? ? ? 獲取JsApiTicket

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? private function getJsApiTicket(){

? ? ? ? # - 判斷緩存

? ? ? ? $ticket = session('ticket');

if(!$ticket){

? ? ? ? ? ? # - 獲取

? ? ? ? ? ? $accessToken = $this->getAccessToken();

# - 獲取Ticket

# - 如果是企業號用以下 URL 獲取 ticket

? ? ? ? ? ? $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

# - get請求,轉換數組

? ? ? ? ? ? $result = json_decode($this->httpGet($url),true);

$ticket = $result['ticket'];

# - 全局緩存

? ? ? ? ? ? if ($ticket){

? ? ? ? ? ? ? ? # - 官方返回

# - {

# -? ? ? ? "errcode":0,

# -? ? ? ? "errmsg":"ok",

# -? ? ? ? "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",

# -? ? "expires_in":7200

# - }

//? ? ? ? ? ? ? ? session('ticket',$ticket,$result['expires_in']);

? ? ? ? ? ? ? ? session('ticket',$ticket);

}

}

? ? ? ? # - 返回

? ? ? ? return $ticket;

}

? ? /**

? ? * @name? ? ? ? 獲取AccessToken

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? private function getAccessToken(){

? ? ? ? # - 判斷緩存

? ? ? ? $access_token = session('accesToken');

if(!$access_token){

? ? ? ? ? ? # - 如果是企業號用以下URL獲取access_token

? ? ? ? ? ? $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";

# - get請求,轉換數組

? ? ? ? ? ? $result = json_decode($this->httpGet($url),true);

$access_token = $result['access_token'];

# - 全局緩存

? ? ? ? ? ? if ($access_token){

//? ? ? ? ? ? ? ? session('accesToken',$result['access_token'],$result['expires_in']);

? ? ? ? ? ? ? ? session('accesToken',$result['access_token']);

}

}

? ? ? ? # - 返回

? ? ? ? return $access_token;

}

? ? /**

? ? * @name? ? ? ? GET請求

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? private function httpGet($url){

? ? ? ? # - 初始化

? ? ? ? $curl = curl_init();

# - 為保證第三方服務器與微信服務器之間數據傳輸的安全性,所有微信接口采用https方式調用,必須使用下面2行代碼打開ssl安全校驗。

# - 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。

? ? ? ? curl_setopt($curl,CURLOPT_URL,$url);

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl,CURLOPT_TIMEOUT,500);

# - 請求

? ? ? ? $res = curl_exec($curl);

//? ? ? ? $res = json_decode($res, true);

# - 關閉

? ? ? ? curl_close($curl);

# - 返回

? ? ? ? return $res;

}

? ? /**

? ? * @name? ? ? ? POST請求

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? private function httpPost($url,$query_data){

? ? ? ? # - 初始化

? ? ? ? $curl = curl_init();

# - 為保證第三方服務器與微信服務器之間數據傳輸的安全性,所有微信接口采用https方式調用,必須使用下面2行代碼打開ssl安全校驗。

# - 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。

? ? ? ? curl_setopt($curl,CURLOPT_URL,$url);

curl_setopt($curl,CURLOPT_POSTFIELDS,$query_data);

curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);

curl_setopt($curl,CURLOPT_TIMEOUT,500);

# - 請求

? ? ? ? $res = curl_exec($curl);

//? ? ? ? $res = json_decode($res, true);

# - 關閉

? ? ? ? curl_close($curl);

# - 返回

? ? ? ? return $res;

}

? ? /**

? ? * @name? ? ? ? 產生隨機字符串

? ? * @author? ? ? ? cq <just_leaf@foxmail.com>

? ? * @copyright? ? zydbbt 2018-10-27

*/

? ? 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 getCommodityInfo($sub){

//聚合數據接口

# - 如果是企業號用以下URL獲取access_token

? ? ? ? $url = "http://feedback.api.juhe.cn/ISBN?key=c74a5cde7c1e58709624454f18447a54&sub=".$sub;

# - get請求,轉換數組

? ? ? ? $result = json_decode($this->httpGet($url),true);

halt($result);

}

}



2 把網站的Ip 授權,不然無法獲取access_token值,那么jspai_ticket也將無法獲取

使用方法看下列代碼:

php:action如下


namespace app\index\controller;

use app\common\controller\Base;

use think\Loader;

class Smsb extends Base

{

? ? public function index()

{

? ? ? ? # 公眾號獲取

? ? ? ? $appid = config('wechat')['wechat_options']['appid'];

# 公眾號獲取

? ? ? ? $appSecret = config('wechat')['wechat_options']['appsecret'];

# 實例化

? ? ? ? $wx = new \WxJDK\JSSDK($appid,$appSecret);

# 獲取參數

? ? ? ? $info = $wx-> getWxConfig();

$info['url']=str_replace('http://','',$info['url']);

# 傳參頁面

? ? ? ? $this -> assign('wxConfig',$info);

return $this->fetch('');

}

? public function WeChat()

{

? ? ? ? return ['appId'=>config('WeChat')['appId'],'timestamp'=>time(),'noncestr'=>'123456','signature'=>''];

}

? ? public function sp(){

? ? ? ? # 公眾號獲取

? ? ? ? $appid = config('wechat')['wechat_options']['appid'];

# 公眾號獲取

? ? ? ? $appSecret = config('wechat')['wechat_options']['appsecret'];

$wx = new \WxJDK\JSSDK($appid,$appSecret);

$wx->getCommodityInfo(input('ISBN'));

return $this->fetch('index');

}

? ? public function hello($name = 'ThinkPHP5')

{

? ? ? ? return 'hello,' . $name;

}

}


html:頁面如下

<!DOCTYPE html>

<html>

? <head>

? ? ? <meta charset="utf-8" />

? ? ? <title></title>

? ? ? <script src="/static/js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script>

? ? ? <script src="/static/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script>

? </head>

? <body>

? ? ? <a class="weui-btn weui-btn_primary submit-btn" id="wxcode" type="button">掃一掃</a>

? <div id="content"></div>

? </body>

</html>

<script>

? wx.config({

? ? ? // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。

? ? ? debug: false,

// 必填,公眾號的唯一標識

? ? ? appId: "{$wxConfig.appId}",

// 必填,生成簽名的時間戳

? ? ? timestamp:"{$wxConfig.timestamp}",

// 必填,生成簽名的隨機串

? ? ? nonceStr:"{$wxConfig.nonceStr}",

// 必填,簽名,見附錄1

? ? ? signature:"{$wxConfig.signature}",

// 必填,需要使用的JS接口列表,所有JS接口列表見附錄2

? ? ? jsApiList : [ 'scanQRCode' ]

? });

wx.error(function(res){

? ? ? ? ? ? alert("----------出錯了-----------:" + res.errMsg);//這個地方的好處就是wx.config配置錯誤,會彈出窗口哪里錯誤,然后根據微信文檔查詢即可。

? });

wx.ready(function(){

? ? ? wx.checkJsApi({

? ? ? ? jsApiList : ['scanQRCode'],

success : function(res){

}

? ? ? });

//點擊按鈕掃描二維碼

? ? ? $('#wxcode').click(function(){

//? ? ? ? ? ? ? alert(1);

? ? ? ? wx.scanQRCode({

? ? ? ? ? ? needResult: 1,// 默認為0,掃描結果由微信處理,1則直接返回掃描結果,

? ? ? ? ? ? scanType: ["qrCode","barCode"],// 可以指定掃二維碼還是一維碼,默認二者都有

? ? ? ? ? ? success: function (res){

? ? ? ? ? ? ? var result = res.resultStr;// 當needResult 為 1 時,掃碼返回的結果

? ? ? ? ? ? ? result=result.replace('EAN_13,','');

var url= '{:url("smsb/sp")}';

url = url+'?ISBN='+result;

//? ? ? ? ? ? $('#content').html(url);

? ? ? ? ? ? ? window.location = url;

}

? ? ? ? });

})

});

</script>



轉自https://www.cnblogs.com/leaf-cq/p/8877270.html?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379