首页 > 编程语言 >PHP获取微信JS-SDK接口设置(access_token、jsapi_ticket、signature)

PHP获取微信JS-SDK接口设置(access_token、jsapi_ticket、signature)

时间:2023-01-25 22:35:16浏览次数:45  
标签:setopt 微信 jsapi JS access token curl ticket CURLOPT

前端

引入JS文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

<script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

后端

PHP-Main


if (empty(Cache::get('accessToken'))) {
                $access_token = $this->getAccessToken($setting['weixin_appid'], $setting['weixin_appsecret']);// 传入微信公众号信息
                Cache::set('accessToken', $access_token, 7200);
            }
            else {
                $access_token = Cache::get('accessToken');
            }
            if (empty(Cache::get('jsapiTicket'))) {
                $jsapi_ticket = $this->getJsapiTicket($access_token);// 传入access_token
                Cache::set('jsapiTicket', $jsapi_ticket, 7200);
            }
            else {
                $jsapi_ticket = Cache::get('jsapiTicket');
            }

            if ($jsapi_ticket) {
                $timestamp = time();
                $nonceStr  = $this->createNonceStr();
                $http      = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
                $url       = "$http$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; // 调用JSSDK的页面地址
                $str       = "jsapi_ticket={$jsapi_ticket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";
                $signature = sha1($str);
       }

//$access_token、$jsapi_ticket、$signature均已获取

PHP-Function

public function getAccessToken($appid, $secret)
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
        $res = $this->curl_get($url);
        if ($res['errcode'] != 0) return false;// 获取AccessToken错误
        return $res['access_token'];
    }
public function getJsapiTicket($access_token)
    {
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$access_token}&type=jsapi";
        $res = $this->curl_get($url);
        if ($res['errcode'] != 0) return false;// 获取JsapiTicket错误
        return $res['ticket'];
    }

public function curl_get($url)
    {
        $headerArray = array("Content-type:application/json;", "Accept:application/json");
        $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);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
        $output = curl_exec($ch);
        curl_close($ch);
        $output = json_decode($output, true);
       return $output;
    }


public function curl_post($url, $data)
    {
        $data        = json_encode($data);
        $headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
        $curl        = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        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);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return json_decode($output, true);
    }

public 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;
    }

标签:setopt,微信,jsapi,JS,access,token,curl,ticket,CURLOPT
From: https://www.cnblogs.com/guowenrui/p/17067369.html

相关文章

  • JSP六个动作详解...
    JSP中6个动作为:1.Include、 2.Forward、3.UseBean、 4.GetProperty、 5.SetProperty、6.Plugin。一、Include指令<jsp:include>标签表示包含一个静态的或者动态的文件......
  • JavaScript学习笔记—使用JSON进行深复制
    constobj={name:"孙悟空",friend:{name:"猪八戒"}};//对obj进行浅复制constobj2=Object.assign({},obj);//对obj进行深复制constobj3=s......
  • js中判断数据类型的方法有哪些
    判断数据类型可以使用typeof但是typeof判断数组和函数时返回的都是Object不能具体判断,这时使用instanceof可以判断对象是否是另一个函数创造的;用法:typeof([]) ......
  • 怎么添加微信已下架的表情包?
    前言你有没有遇到过这种情况?发现喜欢的表情包,想添加却发现已经下架,无法保存,收藏或者下载,每当这时就突然好难受有没有,甚至夜不能寐。不过搞技术的怎么能被这个难倒呢,果断爬起......
  • js中数据的基本类型
    有5种基本数据类型分类;1.数字型 number 2.字符型string 3.布尔型boolean4.undefined未定义 就是声明了但是没有赋值5.null空指针可以理解成一个占位......
  • JS实现异步的方法?
    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。回调函数:是异步操作最基本的方法,比如AJAX回调。优点:简单、容易理解和实现;缺点:不利于代码的阅读和维......
  • 说一说JS数据类型有哪些,区别是什么?
    Number、String、Boolean、BigInt、Symbol、Null、Undefined、Object、8种标准回答JS数据类型分为两类:一类是基本数据类型,也叫简单数据类型,包含7种类型,分别是Number、St......
  • js表单和submit 区别
    js表单提交和submit提交的区别 <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><h......
  • js window.requestAnimationFrame
    https://stackoverflow.com/questions/17926327/why-requestanimationframe-recursion-wont-eat-up-ramfunctionwindow.requestAnimationFrame()告诉浏览器——你希望执......
  • 视频号主页添加微信,私域流量管理系统
    关于视频号主页实现一键添加个人微信的功能,之前写过一篇相关的文章,可以查看【视频号主页,实现一键添加个人微信功能,留客更方便,真香】。比起添加企业微信,可以直接添加个人微信......