欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年03月11日 11:40:29   投稿:yin  
這篇文章主要介紹了ThinkPHP5集成JS-SDK實(shí)現(xiàn)微信自定義分享功能的相關(guān)資料,需要的朋友可以參考下

微信鏈接分享給好友時(shí)能夠自定義標(biāo)題、簡(jiǎn)介和logo,現(xiàn)將ThinkPHP5集成JS-SDK實(shí)現(xiàn)微信自定義分享功能的過(guò)程整理成文。

Jssdk類(lèi)庫(kù)

1、文件名及位置

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

2、代碼

<?php
namespace util;

class Jssdk {

    protected $appid = 'xxxx';
    protected $secret = 'xxxx';

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

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

    }

    /**
     *
     * 獲取臨時(shí)票據(jù)方法
     *
     * @return mixed
     */
    public function getJsapiTicket(){
        //存入文件中,定義文件的名稱(chēng)和路徑
        $name = 'ticket_' . md5($this->appid . $this->secret);
        //定義存儲(chǔ)文件路徑
        //$filename = __DIR__ . '/cache/' . $name . '.php';
		$filename = '../runtime/temp/' . $name . '.php';
        //判斷是否存在臨時(shí)票據(jù)的文件,如果存在,就直接取值,如果不存在,就發(fā)送請(qǐng)求獲取并保存
        if (is_file($filename) && filemtime($filename) + 7100 > time()){
            $result = include $filename;
        }else{
            //定義請(qǐng)求地址
            $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this
                    ->getAccessToken().'&type=jsapi';
            //使用curl方法發(fā)送請(qǐng)求,獲取臨時(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['ticket'];
        //將得到的臨時(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['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
        $url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
        //將4個(gè)參數(shù)放入一個(gè)數(shù)組中
        $arr = [
            'noncestr=' . $nonceStr,
            'jsapi_ticket=' . $ticket,
            'timestamp=' . $time,
            'url=' . $url
        ];
        //對(duì)數(shù)組進(jìn)行字段化排序
        sort($arr,SORT_STRING);
        //對(duì)數(shù)組進(jìn)行組合成字符串
        $string = implode('&',$arr);
        //將字符串加密生成簽名
        $sign = sha1($string);
        //由于調(diào)用簽名方法的時(shí)候不只需要簽名,還需要生成簽名的時(shí)候的隨機(jī)數(shù),時(shí)間戳,所以我們應(yīng)該返回由這些內(nèi)容組成的一個(gè)數(shù)組
        $reArr = [
            'appId' => $this->appid,
            'timestamp' => $time,
            'nonceStr' => $nonceStr,
            'signature' => $sign,
            'url' => $url
        ];
        //將數(shù)組返回
        return $reArr;
    }

    /**
     *
     * 生成隨機(jī)數(shù)
     *
     * @return string
     */
    protected function makeStr(){
        //定義字符串組成的種子
        $seed = 'www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net';
        //通過(guò)循環(huán)來(lái)組成一個(gè)16位的隨機(jī)字符串
        //定義一個(gè)空字符串 用來(lái)接收組合成的字符串內(nèi)容
        $str = '';
        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ù)器之間請(qǐng)求的curl方法
     *
     * @param $url 請(qǐng)求地址
     * @param array $field post參數(shù)
     * @return string
     */
    public function curl($url,$field = []){
        //初始化curl
        $ch = curl_init();
        //設(shè)置請(qǐng)求的地址
        curl_setopt($ch,CURLOPT_URL,$url);
        //設(shè)置接收返回的數(shù)據(jù),不直接展示在頁(yè)面
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        //設(shè)置禁止證書(shū)校驗(yàn)
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
        //判斷是否為post請(qǐng)求方式,如果傳遞了第二個(gè)參數(shù),就代表是post請(qǐng)求,如果么有傳遞,第二個(gè)參數(shù)為空,就是get請(qǐng)求
        if (!empty($field)){
            //設(shè)置請(qǐng)求超時(shí)時(shí)間
            curl_setopt($ch,CURLOPT_TIMEOUT,30);
            //設(shè)置開(kāi)啟post
            curl_setopt($ch,CURLOPT_POST,1);
            //傳遞post數(shù)據(jù)
            curl_setopt($ch,CURLOPT_POSTFIELDS,$field);
        }
        //定義一個(gè)空字符串,用來(lái)接收請(qǐng)求的結(jié)果
        $data = '';
        if (curl_exec($ch)){
            $data = curl_multi_getcontent($ch);
        }
        //關(guān)閉curl
        curl_close($ch);
        //將得到的結(jié)果返回
        return $data;
    }

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

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

//測(cè)試生成簽名方法
//$obj = new Wx();
//$data = $obj->sign();
//echo '<pre>';
//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('id',0);//ID
        $catid = input('catid',0);//分類(lèi)ID

        $modelInfo = getModInfoById($catid);

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

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

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

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

微信事件響應(yīng)

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

到此這篇關(guān)于ThinkPHP5集成JS-SDK實(shí)現(xiàn)微信自定義分享功能的文章就介紹到這了,更多相關(guān)ThinkPHP5微信自定義分享內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Laravel Eloquent ORM 實(shí)現(xiàn)查詢(xún)表中指定的字段

    Laravel Eloquent ORM 實(shí)現(xiàn)查詢(xún)表中指定的字段

    今天小編就為大家分享一篇Laravel Eloquent ORM 實(shí)現(xiàn)查詢(xún)表中指定的字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • php時(shí)間戳格式化顯示友好的時(shí)間函數(shù)分享

    php時(shí)間戳格式化顯示友好的時(shí)間函數(shù)分享

    在一些微博系統(tǒng)中經(jīng)常要將時(shí)間于現(xiàn)在時(shí)間相比顯示為多久以前發(fā)布的,如顯示為:剛剛、5秒前、5小時(shí)前、5天前..這種顯示非常的友好,那么我們?cè)趺从胮hp來(lái)實(shí)現(xiàn)呢,這就是本文探討的內(nèi)容,各位看官請(qǐng)仔細(xì)閱讀下文
    2014-10-10
  • thinkphp中字符截取函數(shù)msubstr()用法分析

    thinkphp中字符截取函數(shù)msubstr()用法分析

    這篇文章主要介紹了thinkphp中字符截取函數(shù)msubstr()用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了thinkPHP中字符截取函數(shù)msubstr()的功能、定義使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2016-01-01
  • php url路由入門(mén)實(shí)例

    php url路由入門(mén)實(shí)例

    這篇文章主要介紹了php url路由入門(mén)實(shí)例,解析url路由的實(shí)現(xiàn)細(xì)節(jié),需要的朋友可以參考下
    2014-04-04
  • Laravel5.0+框架郵件發(fā)送功能實(shí)現(xiàn)方法圖文與實(shí)例詳解

    Laravel5.0+框架郵件發(fā)送功能實(shí)現(xiàn)方法圖文與實(shí)例詳解

    這篇文章主要介紹了Laravel5.0+框架郵件發(fā)送功能實(shí)現(xiàn)方法,結(jié)合圖文與實(shí)例形式詳細(xì)分析了Laravel5.0+框架郵件發(fā)送相關(guān)原理、配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-04-04
  • Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例

    Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例

    這篇文章主要介紹了Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作,結(jié)合實(shí)例形式分析了Yii框架控制器調(diào)用、參數(shù)傳遞與響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • PHP+MySql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的留言板

    PHP+MySql實(shí)現(xiàn)一個(gè)簡(jiǎn)單的留言板

    留言板是接觸WEB開(kāi)發(fā)的基礎(chǔ),寫(xiě)一個(gè)留言板需要知道前端的一些基礎(chǔ)標(biāo)簽,對(duì)數(shù)據(jù)庫(kù)有一個(gè)了解會(huì)基礎(chǔ)SQL語(yǔ)言,PHP基礎(chǔ)知識(shí),前段基礎(chǔ)+數(shù)據(jù)庫(kù)基礎(chǔ)+PHP基礎(chǔ)=>留言板
    2020-07-07
  • php使用函數(shù)pathinfo()、parse_url()和basename()解析URL

    php使用函數(shù)pathinfo()、parse_url()和basename()解析URL

    眾所周知在PHP中函數(shù)pathinfo()、parse_url()和basename(),這三個(gè)都是解析URL的函數(shù),但是也存在一些區(qū)別,下面列舉了一些實(shí)例,通過(guò)實(shí)例更容易理解這三個(gè)函數(shù)的使用方法和技巧,有需要的朋友可以參考借鑒,感興趣的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • PHP命名空間和自動(dòng)加載類(lèi)

    PHP命名空間和自動(dòng)加載類(lèi)

    PHP的命名空間(namespace)是php5.3之后才有的。這篇文章主要介紹了PHP命名空間和自動(dòng)加載類(lèi)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • PHP的重載使用魔術(shù)方法代碼實(shí)例詳解

    PHP的重載使用魔術(shù)方法代碼實(shí)例詳解

    這篇文章主要介紹了PHP的重載使用魔術(shù)方法代碼實(shí)例詳解,文章利用文字和代碼說(shuō)明的很清晰,有感興趣的同學(xué)可以借鑒參考下
    2021-02-02

最新評(píng)論