80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			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;
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |