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


    前端引入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;
        }
  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/xuanjiange/p/13958073.html
Copyright © 2020-2023  润新知