Skip to content

Commit

Permalink
feat 新增刷新ticket (#2733)
Browse files Browse the repository at this point in the history
  • Loading branch information
153264 committed Aug 21, 2023
1 parent 24e8c93 commit d087e07
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
8 changes: 8 additions & 0 deletions src/Kernel/Contracts/RefreshableJsApiTicket.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace EasyWeChat\Kernel\Contracts;

interface RefreshableJsApiTicket extends JsApiTicket
{
public function refreshTicket(): string;
}
5 changes: 3 additions & 2 deletions src/OfficialAccount/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use EasyWeChat\Kernel\Contracts\AccessToken as AccessTokenInterface;
use EasyWeChat\Kernel\Contracts\JsApiTicket as JsApiTicketInterface;
use EasyWeChat\Kernel\Contracts\RefreshableJsApiTicket as RefreshableJsApiTicketInterface;
use EasyWeChat\Kernel\Contracts\RefreshableAccessToken as RefreshableAccessTokenInterface;
use EasyWeChat\Kernel\Contracts\Server as ServerInterface;
use EasyWeChat\Kernel\Encryptor;
Expand Down Expand Up @@ -187,7 +188,7 @@ public function getOAuth(): SocialiteProviderInterface
return $provider;
}

public function getTicket(): JsApiTicketInterface
public function getTicket(): JsApiTicketInterface|RefreshableJsApiTicketInterface
{
if (! $this->ticket) {
$this->ticket = new JsApiTicket(
Expand All @@ -202,7 +203,7 @@ public function getTicket(): JsApiTicketInterface
return $this->ticket;
}

public function setTicket(JsApiTicketInterface $ticket): static
public function setTicket(JsApiTicketInterface|RefreshableJsApiTicketInterface $ticket): static
{
$this->ticket = $ticket;

Expand Down
11 changes: 8 additions & 3 deletions src/OfficialAccount/JsApiTicket.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

namespace EasyWeChat\OfficialAccount;

use EasyWeChat\Kernel\Contracts\JsApiTicket as JsApiTicketInterface;
use EasyWeChat\Kernel\Contracts\RefreshableJsApiTicket as RefreshableJsApiTicketInterface;
use EasyWeChat\Kernel\Exceptions\HttpException;
use JetBrains\PhpStorm\ArrayShape;

use function sprintf;

class JsApiTicket extends AccessToken implements JsApiTicketInterface
class JsApiTicket extends AccessToken implements RefreshableJsApiTicketInterface
{
/**
* @throws \Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface
Expand All @@ -30,14 +30,19 @@ public function getTicket(): string
return $ticket;
}

return $this->refreshTicket();
}

public function refreshTicket(): string
{
$response = $this->httpClient->request('GET', '/cgi-bin/ticket/getticket', ['query' => ['type' => 'jsapi']])
->toArray(false);

if (empty($response['ticket'])) {
throw new HttpException('Failed to get jssdk ticket: '.\json_encode($response, JSON_UNESCAPED_UNICODE));
}

$this->cache->set($key, $response['ticket'], \intval($response['expires_in']));
$this->cache->set($this->getKey(), $response['ticket'], \intval($response['expires_in']));

return $response['ticket'];
}
Expand Down

0 comments on commit d087e07

Please sign in to comment.