GET
GET = 'get'
Class Js.
$http : \EasyWeChat\Core\Http
Http instance.
$accessToken : \EasyWeChat\Core\AccessToken
The request token.
$cache : \Doctrine\Common\Cache\Cache
Cache.
__construct(\EasyWeChat\Core\AccessToken $accessToken)
Constructor.
\EasyWeChat\Core\AccessToken | $accessToken |
getHttp() : \EasyWeChat\Core\Http
Return the http instance.
setHttp(\EasyWeChat\Core\Http $http) : $this
Set the http instance.
\EasyWeChat\Core\Http | $http |
getAccessToken() : \EasyWeChat\Core\AccessToken
Return the current accessToken.
setAccessToken(\EasyWeChat\Core\AccessToken $accessToken) : $this
Set the request token.
\EasyWeChat\Core\AccessToken | $accessToken |
parseJSON(string $method, array $args) : \EasyWeChat\Support\Collection
Parse JSON from response and check error.
string | $method | |
array | $args |
| null
setUrl(string $url) : \EasyWeChat\Js\Js
Set current url.
string | $url |
setCache(\Doctrine\Common\Cache\Cache $cache) : $this
Set cache manager.
\Doctrine\Common\Cache\Cache | $cache |
getCache() : \Doctrine\Common\Cache\Cache
Return cache manager.
<?php
/*
* This file is part of the overtrue/wechat.
*
* (c) overtrue <i@overtrue.me>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
/**
* Js.php.
*
* @author overtrue <i@overtrue.me>
* @copyright 2015 overtrue <i@overtrue.me>
*
* @see https://github.com/overtrue
* @see http://overtrue.me
*/
namespace EasyWeChat\Js;
use Doctrine\Common\Cache\Cache;
use Doctrine\Common\Cache\FilesystemCache;
use EasyWeChat\Core\AbstractAPI;
use EasyWeChat\Support\Str;
use EasyWeChat\Support\Url as UrlHelper;
/**
* Class Js.
*/
class Js extends AbstractAPI
{
/**
* Cache.
*
* @var Cache
*/
protected $cache;
/**
* Current URI.
*
* @var string
*/
protected $url;
/**
* Ticket cache prefix.
*/
const TICKET_CACHE_PREFIX = 'overtrue.wechat.jsapi_ticket.';
/**
* Api of ticket.
*/
const API_TICKET = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket';
/**
* Get config json for jsapi.
*
* @param array $APIs
* @param bool $debug
* @param bool $beta
* @param bool $json
*
* @return array|string
*/
public function config(array $APIs, $debug = false, $beta = false, $json = true)
{
$signPackage = $this->signature();
$base = [
'debug' => $debug,
'beta' => $beta,
];
$config = array_merge($base, $signPackage, ['jsApiList' => $APIs]);
return $json ? json_encode($config) : $config;
}
/**
* Return jsapi config as a PHP array.
*
* @param array $APIs
* @param bool $debug
* @param bool $beta
*
* @return array
*/
public function getConfigArray(array $APIs, $debug = false, $beta = false)
{
return $this->config($APIs, $debug, $beta, false);
}
/**
* Get jsticket.
*
* @param bool $forceRefresh
*
* @return string
*/
public function ticket($forceRefresh = false)
{
$key = self::TICKET_CACHE_PREFIX.$this->getAccessToken()->getAppId();
$ticket = $this->getCache()->fetch($key);
if (!$forceRefresh && !empty($ticket)) {
return $ticket;
}
$result = $this->parseJSON('get', [self::API_TICKET, ['type' => 'jsapi']]);
$this->getCache()->save($key, $result['ticket'], $result['expires_in'] - 500);
return $result['ticket'];
}
/**
* Build signature.
*
* @param string $url
* @param string $nonce
* @param int $timestamp
*
* @return array
*/
public function signature($url = null, $nonce = null, $timestamp = null)
{
$url = $url ? $url : $this->getUrl();
$nonce = $nonce ? $nonce : Str::quickRandom(10);
$timestamp = $timestamp ? $timestamp : time();
$ticket = $this->ticket();
$sign = [
'appId' => $this->getAccessToken()->getAppId(),
'nonceStr' => $nonce,
'timestamp' => $timestamp,
'url' => $url,
'signature' => $this->getSignature($ticket, $nonce, $timestamp, $url),
];
return $sign;
}
/**
* Sign the params.
*
* @param string $ticket
* @param string $nonce
* @param int $timestamp
* @param string $url
*
* @return string
*/
public function getSignature($ticket, $nonce, $timestamp, $url)
{
return sha1("jsapi_ticket={$ticket}&noncestr={$nonce}×tamp={$timestamp}&url={$url}");
}
/**
* Set current url.
*
* @param string $url
*
* @return Js
*/
public function setUrl($url)
{
$this->url = $url;
return $this;
}
/**
* Get current url.
*
* @return string
*/
public function getUrl()
{
if ($this->url) {
return $this->url;
}
return UrlHelper::current();
}
/**
* Set cache manager.
*
* @param \Doctrine\Common\Cache\Cache $cache
*
* @return $this
*/
public function setCache(Cache $cache)
{
$this->cache = $cache;
return $this;
}
/**
* Return cache manager.
*
* @return \Doctrine\Common\Cache\Cache
*/
public function getCache()
{
return $this->cache ?: $this->cache = new FilesystemCache(sys_get_temp_dir());
}
}