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

目錄
1、文件名及位置
2、代碼
后臺(tái)控制器處理
微信事件響應(yīng)
 全部分享接口
首頁 php框架 ThinkPHP ThinkPHP5怎么集成JS-SDK實(shí)現(xiàn)微信自定義分享功能

ThinkPHP5怎么集成JS-SDK實(shí)現(xiàn)微信自定義分享功能

May 27, 2023 am 08:07 AM
thinkphp js-sdk

Jssdk類庫

1、文件名及位置

名字:Jssdk.php
位置:extend\util\Jssdk.php

2、代碼

<?php
namespace util;

class Jssdk {

    protected $appid = &#39;xxxx&#39;;
    protected $secret = &#39;xxxx&#39;;

    /**
     * 獲取access_token方法
     */
    public function getAccessToken(){
        //定義文件名稱
        $name = &#39;token_&#39; . md5($this->appid . $this->secret);
        //定義存儲(chǔ)文件路徑
        // $filename = __DIR__ . &#39;/cache/&#39; . $name . &#39;.php&#39;;
		$filename = &#39;../runtime/temp/&#39; . $name . &#39;.php&#39;;
        //判斷文件是否存在,如果存在,就取出文件中的數(shù)據(jù)值,如果不存在,就向微信端請求
        if (is_file($filename) && filemtime($filename) + 7100 > time()){
            $result = include $filename;
            //定義需要返回的內(nèi)容$data
            $data = $result[&#39;access_token&#39;];
        }else{
            // https請求方式: GET
			// https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
            // 調(diào)用curl方法完成請求
            $url = &#39;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=&#39;.$this->appid.&#39;&secret=&#39; . $this->secret;
            $result = $this->curl($url);
            //將返回得到的json數(shù)據(jù)轉(zhuǎn)成php數(shù)組
            $result = json_decode($result,true);
            //將內(nèi)容寫入文件中
            file_put_contents($filename,"<?php\nreturn " . var_export($result,true) . ";\n?>");
            //定義需要返回的內(nèi)容
            $data = $result[&#39;access_token&#39;];
        }

        //將得到的access_token的值返回
        return $data;

    }

    /**
     *
     * 獲取臨時(shí)票據(jù)方法
     *
     * @return mixed
     */
    public function getJsapiTicket(){
        //存入文件中,定義文件的名稱和路徑
        $name = &#39;ticket_&#39; . md5($this->appid . $this->secret);
        //定義存儲(chǔ)文件路徑
        //$filename = __DIR__ . &#39;/cache/&#39; . $name . &#39;.php&#39;;
		$filename = &#39;../runtime/temp/&#39; . $name . &#39;.php&#39;;
        //判斷是否存在臨時(shí)票據(jù)的文件,如果存在,就直接取值,如果不存在,就發(fā)送請求獲取并保存
        if (is_file($filename) && filemtime($filename) + 7100 > time()){
            $result = include $filename;
        }else{
            //定義請求地址
            $url = &#39;https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=&#39;.$this
                    ->getAccessToken().&#39;&type=jsapi&#39;;
            //使用curl方法發(fā)送請求,獲取臨時(shí)票據(jù)
            $result = $this->curl($url);
            //轉(zhuǎn)換成php數(shù)組
            $result = json_decode($result,true);
            //將獲取到的值存入文件中
            file_put_contents($filename,"<?php\nreturn " . var_export($result,true) . ";\n?>");

        }
        //定義返回的數(shù)據(jù)
        $data = $result[&#39;ticket&#39;];
        //將得到的臨時(shí)票據(jù)結(jié)果返回
        return $data;
    }

    /**
     * 獲取簽名方法
     */
    public function sign(){
        //需要定義4個(gè)參數(shù),分別包括隨機(jī)數(shù),臨時(shí)票據(jù),時(shí)間戳和當(dāng)前url地址
        $nonceStr = $this->makeStr();
        $ticket = $this->getJsapiTicket();
        $time = time();
        //組合url
		//$url = $_SERVER[&#39;REQUEST_SCHEME&#39;] . &#39;://&#39; . $_SERVER[&#39;SERVER_NAME&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
        $url = &#39;http://&#39; . $_SERVER[&#39;SERVER_NAME&#39;] . $_SERVER[&#39;REQUEST_URI&#39;];
        //將4個(gè)參數(shù)放入一個(gè)數(shù)組中
        $arr = [
            &#39;noncestr=&#39; . $nonceStr,
            &#39;jsapi_ticket=&#39; . $ticket,
            &#39;timestamp=&#39; . $time,
            &#39;url=&#39; . $url
        ];
        //對數(shù)組進(jìn)行字段化排序
        sort($arr,SORT_STRING);
        //對數(shù)組進(jìn)行組合成字符串
        $string = implode(&#39;&&#39;,$arr);
        //將字符串加密生成簽名
        $sign = sha1($string);
        //由于調(diào)用簽名方法的時(shí)候不只需要簽名,還需要生成簽名的時(shí)候的隨機(jī)數(shù),時(shí)間戳,所以我們應(yīng)該返回由這些內(nèi)容組成的一個(gè)數(shù)組
        $reArr = [
            &#39;appId&#39; => $this->appid,
            &#39;timestamp&#39; => $time,
            &#39;nonceStr&#39; => $nonceStr,
            &#39;signature&#39; => $sign,
            &#39;url&#39; => $url
        ];
        //將數(shù)組返回
        return $reArr;
    }

    /**
     *
     * 生成隨機(jī)數(shù)
     *
     * @return string
     */
    protected function makeStr(){
        //定義字符串組成的種子
        $seed = &#39;www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net&#39;;
        //通過循環(huán)來組成一個(gè)16位的隨機(jī)字符串
        //定義一個(gè)空字符串 用來接收組合成的字符串內(nèi)容
        $str = &#39;&#39;;
        for ($i = 0;$i < 16; $i++){
            //定義一個(gè)隨機(jī)數(shù)
            $num = rand(0,strlen($seed) - 1);
            //循環(huán)連接隨機(jī)生成的字符串
            $str .= $seed[$num];
        }
        //將隨機(jī)數(shù)返回
        return $str;
    }


    /**
     *
     * 服務(wù)器之間請求的curl方法
     *
     * @param $url 請求地址
     * @param array $field post參數(shù)
     * @return string
     */
    public function curl($url,$field = []){
        //初始化curl
        $ch = curl_init();
        //設(shè)置請求的地址
        curl_setopt($ch,CURLOPT_URL,$url);
        //設(shè)置接收返回的數(shù)據(jù),不直接展示在頁面
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        //設(shè)置禁止證書校驗(yàn)
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        //判斷是否為post請求方式,如果傳遞了第二個(gè)參數(shù),就代表是post請求,如果么有傳遞,第二個(gè)參數(shù)為空,就是get請求
        if (!empty($field)){
            //設(shè)置請求超時(shí)時(shí)間
            curl_setopt($ch,CURLOPT_TIMEOUT,30);
            //設(shè)置開啟post
            curl_setopt($ch,CURLOPT_POST,1);
            //傳遞post數(shù)據(jù)
            curl_setopt($ch,CURLOPT_POSTFIELDS,$field);
        }
        //定義一個(gè)空字符串,用來接收請求的結(jié)果
        $data = &#39;&#39;;
        if (curl_exec($ch)){
            $data = curl_multi_getcontent($ch);
        }
        //關(guān)閉curl
        curl_close($ch);
        //將得到的結(jié)果返回
        return $data;
    }

}
//測試獲取access_token值的方法
//$obj = new Wx();
//$data = $obj->getAccessToken();
//echo $data;

//測試獲取jsapiticket方法
//$obj = new Wx();
//$data = $obj->getJsapiTicket();
//echo $data;

//測試生成簽名方法
//$obj = new Wx();
//$data = $obj->sign();
//echo &#39;<pre class="brush:php;toolbar:false">&#39;;
//print_r($data);

?>

后臺(tái)控制器處理

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use app\admin\model\Menu;
use util\Jssdk;

class Index extends Controller {
    public function demo(){
        $id = input(&#39;id&#39;,0);//ID
        $catid = input(&#39;catid&#39;,0);//分類ID

        $modelInfo = getModInfoById($catid);

        $info = Db::name($modelInfo[&#39;tablename&#39;])->where(&#39;id&#39;,$id)->find();
        $catinfo = getCatInfoById($catid);
        $p_catname = getCatInfoById($catinfo[&#39;parentid&#39;],&#39;catname&#39;);

		$obj = new Jssdk();
		$data = $obj->sign();

        $this->assign(&#39;infos&#39;,$info);
        $this->assign(&#39;catids&#39;,$catid);
        $this->assign(&#39;catnames&#39;,$catinfo[&#39;catname&#39;]);
        $this->assign(&#39;p_catnames&#39;,$p_catname);
		$this->assign(&#39;data&#39;,$data);

        return view(&#39;../application/index/view/default/index/&#39; . $modelInfo[&#39;show_template&#39;]);
    }
}
?>

微信事件響應(yīng)

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
	// 通過config接口注入權(quán)限驗(yàn)證配置
	wx.config({
		debug: false, 
		appId: &#39;{$data.appId}&#39;,
		timestamp: &#39;{$data.timestamp}&#39;,
		nonceStr: &#39;{$data.nonceStr}&#39;, 
		signature: &#39;{$data.signature}&#39;,
		jsApiList: [
			&#39;onMenuShareTimeline&#39;,
			&#39;onMenuShareAppMessage&#39;
		]
	});
	// 通過ready接口處理成功驗(yàn)證
	wx.ready(function(){
		// 分享到朋友圈
		wx.onMenuShareTimeline({
			title: &#39;{$info.title}&#39;,
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			success: function () {
				// 用戶點(diǎn)擊了分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
		// 分享給朋友
		wx.onMenuShareAppMessage({
			title: &#39;{$info.title}&#39;, 
			desc: &#39;{$info.description}&#39;, 
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			type: &#39;link&#39;, // 分享類型,music、video或link,不填默認(rèn)為link
			dataUrl: &#39;&#39;, // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
			success: function () {
				// 用戶點(diǎn)擊了分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
	});
</script>

全部分享接口

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
	// 通過config接口注入權(quán)限驗(yàn)證配置
	wx.config({
		debug: true, 
		appId: &#39;{$data.appId}&#39;,
		timestamp: &#39;{$data.timestamp}&#39;,
		nonceStr: &#39;{$data.nonceStr}&#39;, 
		signature: &#39;{$data.signature}&#39;,
		jsApiList: [
			&#39;onMenuShareTimeline&#39;,
			&#39;onMenuShareAppMessage&#39;,
			&#39;onMenuShareQQ&#39;,
			&#39;onMenuShareWeibo&#39;,
			&#39;onMenuShareQZone&#39;
		]
	});
	// 通過ready接口處理成功驗(yàn)證
	wx.ready(function(){
		// 分享到朋友圈
		wx.onMenuShareTimeline({
			title: &#39;{$info.title}&#39;,
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			success: function () {
				// 用戶點(diǎn)擊了分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
		// 分享給朋友
		wx.onMenuShareAppMessage({
			title: &#39;{$info.title}&#39;, 
			desc: &#39;{$info.description}&#39;, 
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			type: &#39;link&#39;, // 分享類型,music、video或link,不填默認(rèn)為link
			dataUrl: &#39;&#39;, // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
			success: function () {
				// 用戶點(diǎn)擊了分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
		// 分享到QQ
		wx.onMenuShareQQ({
			title: &#39;{$info.title}&#39;, 
			desc: &#39;{$info.description}&#39;, 
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			success: function () {
				// 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
			},
			cancel: function () {
				// 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
		// 分享到騰訊微博
		wx.onMenuShareWeibo({
			title: &#39;{$info.title}&#39;,
			desc: &#39;{$info.description}&#39;, 
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			success: function () {
				// 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
			},
			cancel: function () {
				// 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
		// 分享到QQ空間
		wx.onMenuShareQZone({
			title: &#39;{$info.title}&#39;, 
			desc: &#39;{$info.description}&#39;, 
			link: &#39;{$data.url}&#39;, 
			imgUrl: &#39;http://m.psnav.com/uploads/image/{$info.thumb}&#39;, 
			success: function () {
				// 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
			},
			cancel: function () {
				// 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
			}
		});
	});
</script>

以上是ThinkPHP5怎么集成JS-SDK實(shí)現(xiàn)微信自定義分享功能的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(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版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
thinkphp項(xiàng)目怎么運(yùn)行 thinkphp項(xiàng)目怎么運(yùn)行 Apr 09, 2024 pm 05:33 PM

運(yùn)行 ThinkPHP 項(xiàng)目需要:安裝 Composer;使用 Composer 創(chuàng)建項(xiàng)目;進(jìn)入項(xiàng)目目錄,執(zhí)行 php bin/console serve;訪問 http://localhost:8000 查看歡迎頁面。

thinkphp有幾個(gè)版本 thinkphp有幾個(gè)版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個(gè)版本,針對不同 PHP 版本而設(shè)計(jì)。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修復(fù) bug 和提供新功能。當(dāng)前最新穩(wěn)定版本為 ThinkPHP 6.0.16。在選擇版本時(shí),需考慮 PHP 版本、功能需求和社區(qū)支持。建議使用最新穩(wěn)定版本以獲得最佳性能和支持。

thinkphp怎么運(yùn)行 thinkphp怎么運(yùn)行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本地運(yùn)行步驟:下載并解壓 ThinkPHP Framework 到本地目錄。創(chuàng)建虛擬主機(jī)(可選),指向 ThinkPHP 根目錄。配置數(shù)據(jù)庫連接參數(shù)。啟動(dòng) Web 服務(wù)器。初始化 ThinkPHP 應(yīng)用程序。訪問 ThinkPHP 應(yīng)用程序 URL 運(yùn)行。

laravel和thinkphp哪個(gè)好 laravel和thinkphp哪個(gè)好 Apr 09, 2024 pm 03:18 PM

Laravel 和 ThinkPHP 框架的性能比較:ThinkPHP 性能通常優(yōu)于 Laravel,專注于優(yōu)化和緩存。Laravel 性能良好,但對于復(fù)雜應(yīng)用程序,ThinkPHP 可能更適合。

thinkphp怎么安裝 thinkphp怎么安裝 Apr 09, 2024 pm 05:42 PM

ThinkPHP 安裝步驟:準(zhǔn)備 PHP、Composer、MySQL 環(huán)境。使用 Composer 創(chuàng)建項(xiàng)目。安裝 ThinkPHP 框架及依賴項(xiàng)。配置數(shù)據(jù)庫連接。生成應(yīng)用代碼。啟動(dòng)應(yīng)用并訪問 http://localhost:8000。

thinkphp性能怎么樣 thinkphp性能怎么樣 Apr 09, 2024 pm 05:24 PM

ThinkPHP 是一款高性能的 PHP 框架,具備緩存機(jī)制、代碼優(yōu)化、并行處理和數(shù)據(jù)庫優(yōu)化等優(yōu)勢。官方性能測試顯示,它每秒可處理超過 10,000 個(gè)請求,實(shí)際應(yīng)用中被廣泛用于京東商城、攜程網(wǎng)等大型網(wǎng)站和企業(yè)系統(tǒng)。

開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā) 開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā) Nov 22, 2023 pm 05:18 PM

開發(fā)建議:如何利用ThinkPHP框架進(jìn)行API開發(fā)隨著互聯(lián)網(wǎng)的不斷發(fā)展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。API是不同應(yīng)用程序之間進(jìn)行通信的橋梁,它可以實(shí)現(xiàn)數(shù)據(jù)共享、功能調(diào)用等操作,為開發(fā)者提供了相對簡單和快速的開發(fā)方式。而ThinkPHP框架作為一款優(yōu)秀的PHP開發(fā)框架,具有高效、可擴(kuò)展和易用

開發(fā)建議:如何利用ThinkPHP框架實(shí)現(xiàn)異步任務(wù) 開發(fā)建議:如何利用ThinkPHP框架實(shí)現(xiàn)異步任務(wù) Nov 22, 2023 pm 12:01 PM

《開發(fā)建議:如何利用ThinkPHP框架實(shí)現(xiàn)異步任務(wù)》隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,Web應(yīng)用程序?qū)τ谔幚泶罅坎l(fā)請求和復(fù)雜業(yè)務(wù)邏輯的需求也越來越高。為了提高系統(tǒng)的性能和用戶體驗(yàn),開發(fā)人員常常會(huì)考慮利用異步任務(wù)來執(zhí)行一些耗時(shí)操作,比如發(fā)送郵件、處理文件上傳、生成報(bào)表等。在PHP領(lǐng)域,ThinkPHP框架作為一款流行的開發(fā)框架,提供了一些便捷的方式來實(shí)現(xiàn)異步任務(wù)。

See all articles