用于与 GoCardless Pro API 交互的 PHP 客户端。
安装gocardless-pro
推荐方法是使用 Composer。
# Install Composer
curl -sS https://getcomposer.org/installer | php
接下来,运行 Composer 命令来安装最新稳定版本的gocardless-pro
。
php composer.phar require gocardless/gocardless-pro
安装后,你需要需要Composer的自动加载器:
require ' vendor/autoload.php ' ;
创建一个GoCardlessProClient
实例,提供您的访问令牌和您要使用的环境。我们强烈建议将您的访问令牌存储为环境变量,而不是直接存储在代码中。您可以使用 phpdotenv 之类的工具轻松从.env
文件加载环境变量,但不要将其置于版本控制之外!
$ access_token = getenv ( ' GC_ACCESS_TOKEN ' );
$ client = new GoCardlessPro Client ([
' access_token ' => $ access_token ,
' environment ' => GoCardlessPro Environment :: SANDBOX
]);
您可以从 GoCardless 仪表板的“开发人员”选项卡创建access_token
。
环境可以是GoCardlessProEnvironment::SANDBOX
或GoCardlessProEnvironment::LIVE
,具体取决于您要使用沙箱还是实时 API。
如需完整文档,请参阅我们的 API 文档。
您可以使用list
方法发出获取资源列表的请求。
$ client -> customers ()-> list ();
注意:本自述文件将始终使用客户,但 API 中的每个资源都可以在该库中使用。
如果需要传递任何选项, list()
的最后一个(或唯一的,在没有 URL 参数的情况下)参数是一个 URL 参数数组:
$ customers = $ client -> customers ()-> list ([ ' params ' => [ ' limit ' => 400 ]]);
对list()
调用返回ListResponse
的实例。您可以使用其records
属性来迭代结果。
echo count ( $ customers -> records );
foreach ( $ customers -> records as $ resource ) {
echo $ resource -> given_name ;
}
如果需要 URL 参数,方法签名将包含所需的参数:
$ customer = $ client -> customers ()-> get ( $ customer_id );
echo $ customer -> given_name ;
与列表一样,最后一个参数可以是一个选项数组,其中包含给定的任何 URL 参数:
$ client -> customers ()-> get ( $ customer_id , [ ' params ' => [ ' some_flag ' => true ]]);
单个资源和 ListResponse 实例都有一个api_response
属性,它允许您访问请求的以下属性:
status
headers
body
$ api_response = $ client -> customers ()-> get ( $ customer_id )-> api_response ;
echo $ api_response -> status_code ;
对于 POST 和 PUT 请求,您需要通过将其作为第一个参数传递来提供请求正文。
$ client -> customers ()-> create ([
' params ' => [ ' given_name ' => ' Pete ' , ' family_name ' => ' Hamilton ' ]
]);
与 GET 请求一样,如果需要任何参数,这些参数首先出现:
$ client -> customers ()-> update ( $ customer_id , [
' params ' => [ ' family_name ' => ' Smith ' ]
]);
GoCardless API 包含幂等密钥。当您创建资源时,该库会自动将这些注入到您的请求中,从而防止在 API 出现问题(例如网络问题或超时)时出现重复。
您还可以指定自己的幂等性密钥 - 例如,您可以使用数据库中记录的 ID,不仅可以保护自己免受网络或 API 问题的影响,还可以避免可能导致重复创建的错误:
$ client -> customers ()-> create ([
' params ' => [ ' given_name ' => ' Pete ' , ' family_name ' => ' Hamilton ' ]
' headers ' => [ ' Idempotency-Key ' => ' ABC123 ' ]
]);
如果库遇到幂等键冲突(即,您尝试使用已使用的幂等键创建资源),它将自动加载并返回已存在的资源。
当 API 返回错误时,库将返回ApiException
的相应子类,其中之一:
InvalidApiUsageException
InvalidStateException
ValidationFailedException
API 文档中介绍了这些类型的错误。
如果错误是 HTTP 传输层错误(例如超时或 GoCardless 基础设施内的问题),则在引发ApiConnectionException
之前,库将自动重试请求最多 3 次,两次尝试之间有 500 毫秒的延迟。
如果库无法解析来自 GoCardless 的响应,它将抛出MalformedResponseException
。
try {
$ client -> customer ()-> create ([
' params ' => [ ' invalid_name ' => ' Pete ' ]
]);
} catch ( GoCardlessPro Core Exception ApiException $ e ) {
// Api request failed / record couldn't be created.
} catch ( GoCardlessPro Core Exception MalformedResponseException $ e ) {
// Unexpected non-JSON response.
} catch ( GoCardlessPro Core Exception ApiConnectionException $ e ) {
// Network error.
}
可以使用以下方法访问异常的属性:
$e->getType();
$e->getCode();
$e->getErrors();
$e->getDocumentationUrl();
$e->getMessage();
$e->getRequestId();
$e->getApiResponse();
GoCardless 支持 webhook,允许您在帐户发生事件时收到实时通知,以便您可以采取自动操作进行响应,例如:
客户端允许您验证收到的 Webhook 是否真正来自 GoCardless,并将其解析为易于使用的GoCardlessProResourcesEvent
对象:
// When you create a webhook endpoint, you can specify a secret. When GoCardless sends
// you a webhook, it will sign the body using that secret. Since only you and GoCardless
// know the secret, you can check the signature and ensure that the webhook is truly
// from GoCardless.
//
// We recommend storing your webhook endpoint secret in an environment variable
// for security, but you could include it as a string directly in your code
$ webhook_endpoint_secret = getenv ( ' GOCARDLESS_WEBHOOK_ENDPOINT_SECRET ' );
$ request_body = file_get_contents ( ' php://input ' );
$ headers = getallheaders ();
$ signature_header = $ headers [ ' Webhook-Signature ' ];
try {
$ events = GoCardlessPro Webhook :: parse ( $ request_body , $ signature_header , $ webhook_endpoint_secret );
foreach ( $ events as $ event ) {
// You can access each event in the webhook.
echo $ event -> id ;
}
header ( ' HTTP/1.1 200 OK ' );
} catch ( GoCardlessPro Core Exception InvalidSignatureException ) {
// The webhook doesn't appear to be genuinely from GoCardless, as the signature
// included in the `Webhook-Signature` header doesn't match the one computed with
// your webhook endpoint secret and the body.
header ( ' HTTP/1.1 498 Invalid Token ' );
}
有关使用 Webhooks 的更多详细信息,请参阅我们的“入门”指南。
此客户端库仅支持 PHP >= 8.1 PHP 的早期版本现已被视为生命周期结束,并且可能存在安全漏洞。
该客户端是由 Crank 自动生成的,我们希望很快将其开源。现在应该在此存储库上报告问题。
请不要自行修改源代码,您的更改将被覆盖!