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 ;
목록과 마찬가지로 마지막 인수는 옵션 배열이 될 수 있으며 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
이 발생하기 전에 시도 사이에 500ms의 지연을 두고 라이브러리에서 요청을 자동으로 최대 3회 재시도합니다.
라이브러리가 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는 웹후크를 지원하므로 계정에 문제가 발생할 때 실시간 알림을 받을 수 있으므로 이에 대한 자동 조치를 취할 수 있습니다. 예를 들면 다음과 같습니다.
클라이언트를 사용하면 수신한 웹훅이 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 ' );
}
웹후크 작업에 대한 자세한 내용은 "시작하기" 가이드를 참조하세요.
이 클라이언트 라이브러리는 PHP >= 8.1만 지원합니다. 이전 PHP 릴리스는 이제 수명이 다한 것으로 간주되며 보안 취약점에 노출될 수 있습니다.
이 클라이언트는 곧 오픈 소스로 제공될 도구 체인인 Crank에서 자동 생성됩니다. 현재로서는 이 저장소에 문제가 보고되어야 합니다.
소스 코드를 직접 수정하지 마십시오. 변경 사항이 무시됩니다!