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
作成できます。
環境は、サンドボックスまたはライブ API のどちらを使用するかに応じてGoCardlessProEnvironment::SANDBOX
またはGoCardlessProEnvironment::LIVE
いずれかになります。
完全なドキュメントについては、API ドキュメントを参照してください。
list
メソッドを使用して、リソースのリストを取得するリクエストを行うことができます。
$ client -> customers ()-> list ();
注: この README では全体を通して顧客を使用しますが、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 ;
list と同様に、最後の引数には、任意の 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 ' );
}
Webhook の操作の詳細については、「はじめに」ガイドを参照してください。
このクライアント ライブラリは PHP 8.1 以上のみをサポートします。PHP の以前のリリースは現在サポート終了とみなされており、セキュリティの脆弱性が存在する可能性があります。
このクライアントは Crank から自動生成されます。Crank は、間もなくオープンソースになる予定のツールチェーンです。現時点では、問題はこのリポジトリで報告される必要があります。
ソース コードを自分で変更しないでください。変更は上書きされます。