tp6下保存微信公众号的access_token以及ticket
在做公众号开发的时候,无非就是用接口调用。首先是获取access_token,然后把它保存起来。之后就可以拿这个access_token做为参数来调用一些接口。
<?php
//以下两个方法是一样的,只是写法不一样而已。在实际开发中,任选一个即可
//它的做用是用来curl请求(我的专业述语不好,暂且这样子称呼)
//以下两个方法的代码也是来源于网上找的。
public function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
public function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER , true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
?>
//注意,如果调用这些接口,第二个参数需要传入json的格式,不然会报错。
//例如 https_request($url,$json);
//json 格式如下 $json = '{"tag":{"name":"小冰"}}'
//或者直接将数组 利用 json_encode($arr,JSON_UNESCAPED_UNICODE); //也可以转换成带中文的json
获取access_token
<?php
public function getAccessToken(){
$appid = '你的appid';
$appsecret = '你的appsecret ';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
$weChatApi = new weChatApi;
$output = $weChatApi->https_request($url);
$output = json_decode( $output, true);
Cache::set('access_token', $output['access_token'], 7200); //这儿 我把token保存在缓存
}
?>
//当然,在实际中,如果需要使用access_token来调用接口的时候,我们还需要在调用之前做一个判断,
//判断当前的access_token是否会过期或不存在,如果是过期或者是不存在。
//那么,请重新发起一次请求,来获取最新的access_token
//这儿,以获取ticket为例,来说明一下。
<?php
$access_token = Cache::get('access_token');
if($access_token){
$this->getAccessToken();
}
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $access_token . "&type=jsapi";
$output = $this->https_request($url);
$output = json_decode( $output, true);
Cache::set('ticket', $output['ticket'], 7200); //这儿 我把ticket保存在缓存
?>
//分享好友
//控制器
<?php
namespace app\weChat\controller;
use think\facade\Config;
use think\facade\Cache;
use app\BaseController;
use think\facade\View;
class GetApi extends BaseController{
public function onMenuShareAppMessage(){
if(request()->isAjax()){
$noncestr = getRandStr(32); //随机数
$jsapi_ticket = Cache::get('ticket');
$timestamp = time();
$url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$string1 = 'jsapi_ticket=' . $jsapi_ticket . '&' . 'noncestr=' . $noncestr . '&' . 'timestamp=' . $timestamp . '&' . 'url=' . $url;
$signature = sha1($string1);
$appid = Config('weChat')['appid'];
$result = array(
'noncestr' => $noncestr,
'jsapi_ticket' => $jsapi_ticket,
'timestamp' => $timestamp,
'signature' => $signature,
'appid' => $appid,
'url' => $url,
);
return json($result);
}
return View();
}
}
?>
<!--视图文件-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script src="https://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
$(function(){
(function(){
var data;
$.ajax({
//url:'',//不填默认为当前页面
type:'post',
data:{},
dataType:'json',
async:false,
success:function(res){
data = res;
}
})
function api(){
var appId = data['appid'];
var noncestr = data['noncestr'];
var jsapi_ticket = data['jsapi_ticket'];
var timestamp = data['timestamp'];
var signature = data['signature'];
var url = data['url'];
wx.config({
debug:false,
appId:appId,
timestamp:timestamp,
nonceStr:noncestr,
signature:signature,
jsApiList:[
'onMenuShareAppMessage',
],
});
wx.ready(function(){
wx.onMenuShareAppMessage({
title:'需要分享的标题',
desc:'需要分享的简短描述',
link:url,
imgUrl:'',//图片路径
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success:function(success){
alert('t');
console.log('t');
console.log(success);
},
fail:function(fail){
alert('f');
console.log('f');
console.log(fail);
},
complete:function(complete){
alert('com');
console.log(complete);
}
})
});
}
api();
})();
})
</script>
</body>
</html>
非特殊说明,本文版权归原作者所有,转载请注明出处
评论列表
发表评论