HEX
Server: nginx/1.22.1
System: Linux VM-16-9-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: www (1001)
PHP: 7.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.sanjiangapp.com/core/weixin/WxJsSDK.php
<?php
/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 * @author XingMeng
 * @email hnxsh@foxmail.com
 * @date 2019年05月27日
 *  微信网页授权
 */
namespace core\weixin;

use core\basic\Config;

class WxJsSDK
{

    protected $appid;

    protected $secret;

    protected $noncestr;

    public function __construct()
    {
        $this->appid = Config::get('weixin_appid');
        $this->secret = Config::get('weixin_secret');
        $this->noncestr = get_uniqid();
    }

    // 获取JsAPI签名授权信息
    public function getAuthInfo()
    {
        // 签名数据数组
        $data['jsapi_ticket'] = $this->getJsapiTicket();
        $data['noncestr'] = $this->noncestr;
        $data['timestamp'] = time();
        $data['url'] = get_current_url();
        $signature = sha1(urldecode(http_build_query($data)));
        
        // 返回数据数组
        $result['appid'] = $this->appid;
        $result['timestamp'] = $data['timestamp'];
        $result['noncestr'] = $this->noncestr;
        $result['signature'] = $signature;
        return $result;
    }

    // 获取访问Ticket
    private function getJsapiTicket()
    {
        if (! $this->checkJsapiTicket()) {
            $access_token = WxAccessToken::get();
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$access_token&type=jsapi";
            $result = json_decode(get_url($url));
            if (isset($result->errcode) && $result->errcode) {
                error('获取微信JsapiTicket发生错误:' . $result->errmsg . '(' . $result->errcode . ')');
                return false;
            } else {
                $data['weixin_jsapi_ticket'] = $result->ticket;
                $data['weixin_jsapi_ticket_expires_in'] = $result->expires_in;
                $data['weixin_jsapi_ticket_timestamp'] = time();
                Config::set(sha1('weixin_jsapi_ticket'), $data); // 缓存数据
                return $result->ticket;
            }
        } else {
            return Config::get('weixin_jsapi_ticket');
        }
    }

    // 检查Ticket是否可用
    private function checkJsapiTicket()
    {
        Config::assign(RUN_PATH . '/config/' . sha1('weixin_jsapi_ticket') . '.php');
        if (Config::get('weixin_jsapi_ticket') && time() - Config::get('weixin_jsapi_ticket_timestamp') < Config::get('weixin_jsapi_ticket_expires_in')) {
            return true;
        } else {
            return false;
        }
    }
}