antavo / loyalty-sdk-php
此包的最新版本(1.0.4)没有可用的许可证信息。
Antavo Loyalty SDK for PHP
1.0.4
2019-06-13 13:32 UTC
Requires
- php: >=5.5
- antavo/escher-php: ^0.2.13
- antavo/signed-token: ^1.0
- pakard/rest-client-php: ^1.0
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is not auto-updated.
Last update: 2024-09-13 13:52:12 UTC
README
目录
需求
- PHP 5.5
- PHP cURL 扩展
使用
包含库
使用 Phar 包
require 'phar://antavo-loyalty-sdk.phar'; // Now you can use the classes inside the archive.
REST 客户端
Antavo API REST 客户端是一个用于执行 API 请求的小型客户端。
它使用两个其他库
Antavo\SignedToken
来处理 Web 令牌。Escher
是一个用于签名 HTTP 请求并验证它们的库。它通用化 AWS 使用的签名方法。Pakard\RestClient
是一个小型、通用的 REST 客户端。
创建实例
$client = new Antavo\Loyalty\Sdk\RestClient('REGION', 'API KEY', 'API SECRET');
在哪里
REGION
是凭证作用域的一部分(用于签名请求),它由账户确定;API KEY
识别账户本身;API SECRET
用于签名请求。
API 端点基本 URL 使用 REGION
计算(尽管可以通过 setBaseUrl()
方法更改)。
发送请求
底层客户端有一个具有以下签名的 send()
方法
public function send(string $method, string $url, mixed $data = NULL): mixed;
它使得执行任何类型的 REST 请求成为可能
$response = $client->send('GET', '/customer/' . $customer->id);
$response
将包含解析后的 JSON 响应。
$response = $client->send( 'POST', '/events', [ 'customer' => $customer->id, 'action' => 'profile', 'data' => [ 'email' => $customer->email, ] ] );
简写
发送事件
// Assuming $customer is some kind of model object instance. $client->sendEvent( $customer->id, 'profile', [ 'email' => $customer->email, 'custom_field' => get_custom_value(), ] );
错误处理
注意,API 可能返回 2xx 以外的 HTTP 状态码,在这种情况下,客户端会抛出异常。
因此,强烈建议将所有请求包装在 try-catch 中
try { $result = $client->send('GET', '/customer'); } catch (\Pakard\RestClient\StatusCodeException $e) { // You can still retrieve the original (error) response: $result = $client->getResponse()->getBody(); }
可能发生其他类型的异常,所有都是 Pakard\RestClient\Exception
的后代
Pakard\RestClient\ResponseParserException
在有误的响应体上;Pakard\RestClient\TransportException
在 PHP cURL 扩展产生的任何错误上。
客户令牌
Antavo\Loyalty\Sdk\CustomerToken
用于创建和验证 Web 令牌以在嵌入式忠诚度中心中验证客户。
创建实例
// Initializing a new token with the secret and with expiration time. $token = new Antavo\Loyalty\Sdk\CustomerToken('API SECRET', $expires_in);
- 用于将散列附加到令牌的
API SECRET
,以便以后可以验证。 $expires_in
是一个整数值:令牌被认为有效的时间数。0 表示没有过期,小于 30 天(以秒为单位)的值被认为是生存时间,更大的值被视为 Unix 时间戳。
在实例化时,令牌会根据环境设置默认的 cookie 域,可以通过 setCookieDomain()
覆盖。
创建新令牌
可以通过设置客户 ID 来检索它,然后简单地将令牌对象转换为字符串
echo (string) (new Antavo\Loyalty\Sdk\CustomerToken('API SECRET', $expires_in)) ->setCustomer($customer->id);
客户令牌在 cookie 中
设置客户令牌 cookie
$token = (new Antavo\Loyalty\Sdk\CustomerToken('API SECRET', $expires_in)) ->setCustomer($customer->id); if (!$token->setCookie()) { // Couldn't set the cookie... }
然后取消设置
$token->unsetCookie();
检索 cookie 值
$token = new Antavo\Loyalty\Sdk\CustomerToken('API SECRET', $expires_in); try { if (isset($_COOKIE[$token->getCookieName()]) { $token->setToken($_COOKIE[$token->getCookieName()]); } } catch (Antavo\SignedToken\Exceptions\Exception $e) { // The token is either expired or invalid... }
验证 Webhook 消息
在某些情况下,您需要处理由 Antavo 发送的 webhook 消息。您也可以使用 REST 客户端来验证此类请求
// Creating a REST client with valid region and credentials // (though credentials won't be used for authentication -- see below). $client = new Antavo\Loyalty\Sdk\RestClient('REGION', 'API KEY', 'API SECRET'); // Obtaining a configured Escher client from the REST client. $escher = $client->createEscher(); // Authenticating current request using credential key-value pairs. $escher->authenticate( [ 'API KEY' => 'API SECRET' ] );
有关更多详细信息,请参阅EscherPHP 文档页面。