- HTTP 요청
- 요청 본문
- 응답 본문
- RequestHeader
- 타임스탬프
- 버전
- PaymentLookupCriteria
- ArnCriteria
- GoogleTransactionReferenceNumberCriteria
- CaptureRequestCriteria
- RequestOriginator
- GetDisputeInquiryReportResponse
- ResponseHeader
- GetDisputeInquiryReportResult
- SuccessDetails
- PurchaseReport
- CustomerAccount
- 주문
- 금액
- 주소
- 항목
- 세금
- 결제
- 환불
- PaymentCardDetails
- AuthResult
- 비어 있음
- ErrorResponse
- ErrorResponseResult
- InvalidApiVersion
- InvalidPayloadSignature
- InvalidPayloadEncryption
- RequestTimestampOutOfRange
- InvalidIdentifier
- IdempotencyViolation
- InvalidFieldValue
- MissingRequiredField
- PreconditionViolation
- UserActionInProgress
- InvalidDecryptedRequest
- 금지됨
결제의 잠재적 분쟁에 관해 고객과의 고객 지원 대화를 진행하는 데 도움이 되는 정보가 포함된 보고서를 받습니다.
이 메서드가 HTTP 200을 반환하지 않는 경우 이 쿼리에 대한 응답이 비어 있을 수 있습니다.
요청을 처리하는 동안 엔드포인트에서 오류가 발생하면 이 엔드포인트의 응답은
유형입니다.ErrorResponse
이 메서드가 HTTP 200을 반환하지 않는 경우 이 쿼리에 대한 응답이 비어 있을 수 있습니다. 명확한 설명이 있는
를 사용하여 공격자가 다른 통합업체의 결제 통합업체 계정 식별자를 파악할 수 있는 상황에서는 응답 본문이 비어 있습니다. 서명 키가 일치하지 않거나 결제 통합업체 식별자를 찾을 수 없거나 암호화 키를 알 수 없는 경우 이 메서드는 빈 본문과 함께 HTTP 404를 반환합니다. 요청 서명을 확인할 수 있는 경우 오류에 관한 추가 정보가 응답 본문에 반환됩니다.ErrorResponse
요청의 예는 다음과 같습니다.
{
"requestHeader": {
"protocolVersion": {
"major": 3
},
"requestId": "HsKv5pvtQKTtz7rdcw1YqE",
"requestTimestamp": {
"epochMillis": "1519996751331"
},
"paymentIntegratorAccountId": "InvisiCashUSA_USD"
},
"paymentLookupCriteria": {
"googleTransactionReferenceNumberCriteria": {
"googleTransactionReferenceNumber": "714545417102363157911822",
"authorizationCode": "111111"
}
},
"existingGoogleClaimId": "138431383281",
"requestOriginator": {
"organizationId": "ISSUER_256",
"organizationDescription": "Community Bank of Some City",
"agentId": "982749"
}
}
응답의 예는 다음과 같습니다.
{
"responseHeader": {
"responseTimestamp": {
"epochMillis": "1519996752221"
}
},
"result": {
"success": {
"googleClaimId": "138431383281",
"report": {
"customerAccount": {
"customerEmail": "example@gmail.com",
"customerName" : "Example Customer"
},
"order": {
"timestamp": {
"epochMillis": "1517992525972"
},
"orderId": "SOP.8976-1234-1234-123456..99",
"subTotalAmount": {
"amountMicros": "206990000",
"currencyCode": "USD"
},
"totalAmount": {
"amountMicros": "212990000",
"currencyCode": "USD"
},
"shippingAddress": {
"addressLine": ["123 Main St"],
"localityName": "Springfield",
"administrativeAreaName": "CO",
"postalCodeNumber": "80309",
"countryCode": "US"
},
"taxes": [
{
"description": "Colorado Sales Tax",
"amount": {
"amountMicros": "6000000",
"currencyCode": "USD"
}
}
],
"items": [
{
"description": "Super cool gizmo",
"merchant": "HTC",
"googleProductName": "Google Store",
"quantity": "2",
"totalPrice": {
"amountMicros": "198000000",
"currencyCode": "USD"
}
},
{
"description": "Gizmo charger",
"merchant": "HTC",
"googleProductName": "Google Store",
"quantity": "1",
"totalPrice": {
"amountMicros": "8990000",
"currencyCode": "USD"
}
}
]
},
"payment": {
"billingAddress" : {
"addressLine": ["123 Main St"],
"localityName": "Springfield",
"administrativeAreaName": "CO",
"postalCodeNumber": "80309",
"countryCode": "US"
},
"amount": {
"amountMicros": "100000000",
"currencyCode": "USD"
},
"refunds": [
{
"amount": {
"amountMicros": "9250000",
"currencyCode": "USD"
},
"initiatedTimestamp": {
"epochMillis": "1518811245384"
}
}
],
"cardDetails": {
"authResult": "APPROVED"
}
}
}
}
}
}
HTTP 요청
POST https://vgw.googleapis.com/secure-serving/gsp/v3/getDisputeInquiryReport/:PIAID
요청 본문
요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.
JSON 표현 |
---|
{ "requestHeader": { object ( |
입력란 | |
---|---|
requestHeader |
필수: 모든 요청의 공통 헤더입니다. |
paymentLookupCriteria |
필수: 이 문의에서 조회되어야 하는 결제를 나타내는 기준입니다. |
existingGoogleClaimId |
선택사항: 이전 소유권 주장 ID가 없으면 새 소유권 주장 ID가 생성됩니다. 동일한 고객 이의 제기가 이어지는 경우 호출자는 이전 여기에 입력되거나 생성된 소유권 주장 ID는 응답의 이전 |
requestOriginator |
필수: 이 요청을 보낸 조직 또는 조직의 하위 그룹에 대한 정보입니다. |
응답 본문
이 메서드는 여러 반환 유형을 지원합니다. ErrorResponse
와 함께 반환되는 4XX 또는 5XX HTTP 상태 코드에 관한 자세한 내용은 ErrorResponse
객체 및 HTTP 상태 코드 문서를 참조하세요.
이 메서드는 여러 반환 유형을 지원합니다. ErrorResponse
와 함께 반환되는 4XX 또는 5XX HTTP 상태 코드에 관한 자세한 내용은 ErrorResponse
객체 및 HTTP 상태 코드 문서를 참조하세요.
성공할 경우 응답 본문에 다음 구조의 데이터가 포함됩니다.
가능한 응답 메시지 | |
---|---|
HTTP 200 상태 |
|
HTTP 4XX / 5XX 상태 |
|
RequestHeader
서버로 전송되는 모든 요청에 정의된 헤더 객체입니다.
JSON 표현 |
---|
{ "requestId": string, "requestTimestamp": { object ( |
입력란 | |
---|---|
requestId |
필수: 이 요청의 고유 식별자입니다. 이 문자열은 최대 길이가 100자(영문 기준)이며 'a~z', 'A~Z', '0~9', ':', '-', '_' 문자만 포함합니다. |
requestTimestamp |
필수: 이 요청의 타임스탬프입니다. 수신자는 이 타임스탬프가 '현재'의 ±60초인지 확인하고, 그렇지 않은 경우 요청을 거부해야 합니다. 이 요청 타임스탬프는 재시도 시 멱등성이 없습니다. |
protocolVersion |
필수: 이 요청의 버전입니다. |
paymentIntegratorAccountId |
필수: 계약 제약 조건이 있는 고유 계정을 식별합니다. |
타임스탬프
Unix 에포크 이후 ISO 타임라인의 특정 지점을 밀리초 단위로 나타내는 타임스탬프 객체입니다.
JSON 표현 |
---|
{ "epochMillis": string } |
입력란 | |
---|---|
epochMillis |
필수: Unix epoch를 기준으로 하는 밀리초 |
버전
버전 객체에는 API의 주 버전이 포함됩니다. 동일한 메이저 버전의 버전은 호환성이 보장됩니다. 통합자는 동일한 주 버전에 대한 모든 요청을 지원해야 합니다.
JSON 표현 |
---|
{ "major": integer } |
입력란 | |
---|---|
major |
필수: 메이저 버전입니다. 버전이 다르면 호환성 요청이 표시되어도 호환성이 보장되지 않습니다. |
PaymentLookupCriteria
결제를 고유하게 조회할 수 있는 기준의 컨테이너입니다. 하나의 구성원 필드만 채워야 합니다.
JSON 표현 |
---|
{ // Union field |
입력란 | |
---|---|
통합 필드
|
|
arnCriteria |
선택사항: ARN (Acquirer Reference Number)을 기준으로 조회합니다. |
googleTransactionReferenceNumberCriteria |
선택사항: Google 거래 참조 번호를 기준으로 조회합니다. |
captureRequestCriteria |
선택사항: 원래 캡처 요청을 기반으로 조회합니다. |
ArnCriteria
ARN (Acquirer Reference Number)을 기반으로 한 결제 조회 기준입니다.
JSON 표현 |
---|
{ "acquirerReferenceNumber": string, "authorizationCode": string } |
입력란 | |
---|---|
acquirerReferenceNumber |
필수: 결제를 고유하게 식별하는 획득자 참조 번호 (ARN)입니다. 23자리 숫자여야 합니다. |
authorizationCode |
필수: 거래의 승인 코드입니다. |
GoogleTransactionReferenceNumberCriteria
Google에서 생성한 거래 참조 번호를 토대로 한 결제 조회 기준
JSON 표현 |
---|
{ "googleTransactionReferenceNumber": string, "authorizationCode": string } |
입력란 | |
---|---|
googleTransactionReferenceNumber |
필수: 결제를 고유하게 식별하는 Google 생성 거래 참조 번호입니다. |
authorizationCode |
필수: 거래의 승인 코드입니다. |
CaptureRequestCriteria
원래 캡처 요청을 기반으로 한 결제 조회 기준
JSON 표현 |
---|
{ "captureRequestId": string } |
입력란 | |
---|---|
captureRequestId |
필수: 이 거래의 고유 식별자입니다. 조회 중인 |
RequestOriginator
이 요청이 발생한 조직 또는 조직 하위 그룹(선택사항)에 대한 정보입니다. 이를 통해 Google은 문제나 악용을 식별하고 paymentIntegratorAccountId
보다 더 세분화된 수준에서 제어 기능을 구현할 수 있습니다. 이는 호출이 여러 외부 클라이언트의 요청을 가져오는 중개 서비스 제공업체인 경우 특히 유용합니다.
JSON 표현 |
---|
{ "organizationId": string, "organizationDescription": string, "agentId": string } |
입력란 | |
---|---|
organizationId |
필수: 이 요청이 시작된 회사, 조직 또는 조직 그룹의 식별자입니다. |
organizationDescription |
필수: 조직과 관련하여 Google 직원과 통합업체 간의 커뮤니케이션을 용이하게 하는 데 사용할 수 있는, 사람이 읽을 수 있는 조직 이름 또는 설명입니다. |
agentId |
선택사항: 이 요청이 발생한 |
GetDisputeInquiryReportResponse
getDisputeInquiryReport
메서드의 응답 페이로드입니다.
JSON 표현 |
---|
{ "responseHeader": { object ( |
입력란 | |
---|---|
responseHeader |
필수: 모든 응답의 공통 헤더입니다. |
result |
필수: 이 호출의 결과입니다. |
ResponseHeader
서버에서 전송된 모든 응답에 정의된 헤더 객체입니다.
JSON 표현 |
---|
{
"responseTimestamp": {
object ( |
입력란 | |
---|---|
responseTimestamp |
필수: 이 응답의 타임스탬프입니다. 수신자는 이 타임스탬프가 '지금'의 ±60초인지 확인하고, 그렇지 않은 경우 응답을 거부해야 합니다. |
GetDisputeInquiryReportResult
JSON 표현 |
---|
{ // Union field |
입력란 | |
---|---|
통합 필드
|
|
success |
결제 내역이 확인되어 보고서가 제공됩니다. |
paymentNotFound |
요청하신 결제 금액을 찾을 수 없습니다. |
paymentTooOld |
요청한 결제가 확인되었지만 결제 기간이 지났기 때문에 보고서가 제공되지 않았습니다. |
orderCannotBeReturned |
요청된 결제가 존재하지만 반품할 수 없는 주문에 포함되어 있습니다. 소유자의 요청으로 주문이 삭제된 경우가 사유에 포함됩니다. |
noAdditionalDetails |
요청한 결제가 확인되었으나 보고서가 제공되지 않습니다. |
SuccessDetails
JSON 표현 |
---|
{
"googleClaimId": string,
"report": {
object ( |
입력란 | |
---|---|
googleClaimId |
필수: 이 고객 이의 제기를 고유하게 식별하는 Google 생성 문자열입니다. 요청에 |
report |
필수: 요청에 명시된 결제의 이의 제기와 관련된 세부정보입니다. |
PurchaseReport
요청된 결제와 관련된 구매 관련 세부정보가 포함된 보고서
JSON 표현 |
---|
{ "customerAccount": { object ( |
입력란 | |
---|---|
customerAccount |
필수: 고객 및 고객 계정에 관한 정보입니다. |
order |
선택사항: 결제가 이루어진 주문에 관한 정보입니다. 일부 구매 보고서에서는 제공되지 않습니다. |
payment |
필수: 결제 관련 정보입니다. 참고: 하나의 주문에 여러 번 결제할 수 있지만 여기에는 원래 요청에서 확인된 결제에 대한 정보만 포함됩니다. |
CustomerAccount
고객의 계정에 관한 정보입니다.
JSON 표현 |
---|
{ "customerEmail": string, "customerName": string } |
입력란 | |
---|---|
customerEmail |
선택사항: 고객의 Google 계정과 연결된 이메일 주소입니다. |
customerName |
필수: 고객의 이름입니다. |
주문
주문에 관한 정보입니다.
JSON 표현 |
---|
{ "timestamp": { object ( |
입력란 | |
---|---|
timestamp |
필수: 주문 시점의 타임스탬프입니다. |
orderId |
필수: 이 주문을 고유하게 식별하는 문자열입니다. |
subTotalAmount |
필수: 세전 주문 총액입니다. |
totalAmount |
REQUIRED: 세금을 포함한 이 주문의 총 금액입니다. |
shippingAddress |
OPTIONAL: 이 주문에 포함된 실제 상품의 배송지 주소입니다. |
items[] |
필수: 이 주문에 포함된 상품의 목록입니다. |
taxes[] |
필수: 이 주문에 포함된 세금 목록입니다. 이 목록은 비어 있을 수 있습니다. |
금액
마이크로 단위의 금액을 통화 코드와 연결합니다.
JSON 표현 |
---|
{ "amountMicros": string, "currencyCode": string } |
입력란 | |
---|---|
amountMicros |
필수: 마이크로 단위의 금액입니다. |
currencyCode |
필수: ISO 4217 3자리 통화 코드 |
주소
실제 주소에 관한 정보를 보유하는 집입니다.
JSON 표현 |
---|
{ "addressLine": [ string ], "localityName": string, "administrativeAreaName": string, "postalCodeNumber": string, "countryCode": string } |
입력란 | |
---|---|
addressLine[] |
선택사항: 구조화되지 않은 주소 텍스트를 포함합니다. |
localityName |
선택사항: 모호한 용어이지만 일반적으로 주소의 시/군/구 부분을 나타냅니다. 지역이 잘 정의되지 않거나 이 구조에 잘 맞지 않는 지역 (예: 일본 및 중국)에서는 localityName을 비워두고 addressLine을 사용합니다. 예: 미국 도시, IT 코뮌, 영국 우체국 |
administrativeAreaName |
선택사항: 이 국가의 최상위 행정 구역 단위입니다. 예: 미국 주, IT 지역, 중국 주, 일본 현 |
postalCodeNumber |
선택사항: 이름에도 불구하고 postalCodeNumber 값은 대개 영숫자입니다. 예: '94043', 'SW1W', 'SW1W 9TQ'. |
countryCode |
선택사항: 고객의 주소 국가 코드입니다. ISO-3166-1 Alpha-2여야 합니다. |
항목
주문에 포함된 상품에 관한 정보입니다.
JSON 표현 |
---|
{
"description": string,
"merchant": string,
"quantity": string,
"totalPrice": {
object ( |
입력란 | |
---|---|
description |
필수: 구매한 상품에 대한 설명입니다. |
merchant |
필수: 상품의 판매자, 아티스트 또는 제조업체입니다. |
quantity |
선택사항: 이 상품의 주문 수량입니다. 정수 수량이 제품에 적용되지 않는 경우 이 필드는 생략됩니다 (예: 측정되는 제품은 소수 수량일 수 있음). |
totalPrice |
필수: 이 상품의 총 가격입니다. |
googleProductName |
필수: 상품에 대한 Google 제품 서비스의 이름입니다. |
세금
이 주문에 적용되는 세금에 대한 정보입니다.
JSON 표현 |
---|
{
"description": string,
"amount": {
object ( |
입력란 | |
---|---|
description |
필수: 세금에 대한 설명입니다. |
amount |
필수: 세금의 액수입니다. |
지급
결제 관련 정보입니다.
JSON 표현 |
---|
{ "billingAddress": { object ( |
입력란 | |
---|---|
billingAddress |
필수: 이 결제에 대한 청구서 수신 주소입니다. |
amount |
필수: 결제 금액입니다. |
refunds[] |
필수: 이 결제에 대한 환불 목록입니다. 이 목록은 비어 있을 수 있습니다. |
통합 필드
|
|
cardDetails |
선택사항: 신용카드 및 체크카드 결제 수단과 관련된 결제 세부정보입니다. |
환불
결제로 인한 환불에 관한 정보입니다.
JSON 표현 |
---|
{ "amount": { object ( |
입력란 | |
---|---|
amount |
필수: 환불 금액입니다. |
initiatedTimestamp |
필수: 환불이 시작된 시점의 타임스탬프입니다. |
PaymentCardDetails
신용카드 및 체크카드와 관련된 결제 세부정보
JSON 표현 |
---|
{
"authResult": enum ( |
입력란 | |
---|---|
authResult |
필수: 결제 인증의 결과입니다. |
AuthResult
결제 인증 결과
열거형 | |
---|---|
UNKNOWN_RESULT |
이 기본값은 설정해서는 안 됩니다. |
APPROVED |
인증이 승인되었습니다. |
DENIED |
인증이 거부되었습니다. |
NOT_ATTEMPTED |
인증을 시도하지 않았습니다. |
비어 있음
이 유형에는 필드가 없습니다.
불리언 및 열거형을 추가 데이터로 확장해야 하는 경우가 많으므로 이 객체는 확장성을 위해 사용됩니다. 구현자는 이를 사용하여 존재를 확인합니다. 이 열거형은 향후 버전에서 데이터를 포함하도록 확장될 수 있습니다.
Empty
의 JSON 표현은 빈 JSON 객체 {}
입니다.
ErrorResponse
모든 메서드의 오류 응답 객체입니다.
JSON 표현 |
---|
{ "responseHeader": { object ( |
입력란 | |
---|---|
responseHeader |
필수: 모든 응답의 공통 헤더입니다. |
errorDescription |
선택사항: 오류를 디버그할 수 있도록 지원 담당자가 이 상태에 관한 설명을 제공합니다. 사용자에게는 표시되지 않습니다. 디버깅에 사용되는 설명적이고 민감하지 않은 텍스트를 포함할 수 있습니다. errorResponseCode의 일부 값에는 이 필드에 추가 세부정보가 포함되어야 합니다. 경고: 공개로 정의되지 않은 한 이 메시지에 토큰을 포함하지 마세요. |
paymentIntegratorErrorIdentifier |
선택사항: 이 식별자는 통합업체에 따라 다르며 통합업체에 의해 생성됩니다. 이 호출을 식별하기 위한 목적으로만 디버깅 목적으로만 사용됩니다. 이는 통합업체가 이 호출에 사용하는 식별자입니다. |
errorResponseResult |
선택사항: 발생한 오류 유형을 캡처하는 코드입니다. |
ErrorResponseResult
오류 코드
JSON 표현 |
---|
{ // Union field |
입력란 | |
---|---|
통합 필드
|
|
invalidApiVersion |
요청의 API 버전이 지원되지 않는 경우 사용됩니다. 권장 HTTP 코드: 400 |
invalidPayloadSignature |
페이로드의 서명이 알 수 없거나 비활성 키인 경우 사용됩니다. 권장 HTTP 코드: 401 |
invalidPayloadEncryption |
페이로드 암호화가 알 수 없거나 비활성 키인 경우 사용됩니다. 권장 HTTP 코드: 400 |
requestTimestampOutOfRange |
requestTimestamp가 현재 ± 60초가 아닌 경우 사용됩니다. 권장 HTTP 코드: 400 |
invalidIdentifier |
요청에 전송된 식별자가 잘못되었거나 알 수 없는 경우에 사용됩니다. 여기에는 PIAID, captureRequestId, Google Payment Token 등이 포함될 수 있습니다. 권장 HTTP 코드: 404 |
idempotencyViolation |
요청이 요청의 멱등성 요구사항을 위반하는 경우 사용됩니다. 권장 HTTP 코드: 412 |
invalidFieldValue |
지원되는 값 집합에 없는 필드 값이 요청에 포함된 경우 사용됩니다. 권장 HTTP 코드: 400 |
missingRequiredField |
요청에서 필수 필드가 설정되지 않은 경우 사용됩니다. 권장 HTTP 코드: 400 |
preconditionViolation |
작업의 제약조건을 위반하는 경우 (예: 환불 금액 요청이 거래의 남은 금액을 초과하는 경우) 사용됩니다. 권장 HTTP 코드: 400 |
userActionInProgress |
현재 요청을 처리할 수 없는 경우 사용됩니다. 이는 사실상 시스템 잠금 역할을 하는 진행 중인 사용자 작업을 방해하기 때문입니다. 이 코드는 구현별 내부 동시 실행 오류로 인한 실패를 나타내는 데 사용하면 안 됩니다. 권장 HTTP 코드: 423 |
invalidDecryptedRequest |
요청 페이로드를 복호화할 수 있지만 결과 메시지를 파싱할 수 없는 경우에 사용됩니다. 권장 HTTP 코드: 400 |
forbidden |
요청된 리소스에 대한 액세스가 금지되어 있습니다. 권장 HTTP 코드: 403 |
InvalidApiVersion
JSON 표현 |
---|
{ "requestVersion": { object ( |
입력란 | |
---|---|
requestVersion |
필수: 요청에 지정된 잘못된 버전입니다. |
expectedVersion |
필수: 예상 버전입니다. |
InvalidPayloadSignature
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
InvalidPayloadEncryption
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
RequestTimestampOutOfRange
JSON 표현 |
---|
{ "requestTimestamp": { object ( |
입력란 | |
---|---|
requestTimestamp |
필수: 요청에 제공된 타임스탬프 |
serverTimestampAtReceipt |
필수: 수신 시점의 서버 시간으로, 비교에 사용됩니다. |
InvalidIdentifier
JSON 표현 |
---|
{ "invalidIdentifierType": string } |
입력란 | |
---|---|
invalidIdentifierType |
필수: 잘못된 식별자 유형입니다(예: PIAID, captureRequestId 등). |
IdempotencyViolation
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
InvalidFieldValue
JSON 표현 |
---|
{ "invalidFieldName": string } |
입력란 | |
---|---|
invalidFieldName |
필수: 잘못된 것으로 확인된 필드의 이름입니다. |
MissingRequiredField
JSON 표현 |
---|
{ "missingFieldNames": [ string ] } |
입력란 | |
---|---|
missingFieldNames[] |
필수: 누락된 필드의 이름입니다. |
PreconditionViolation
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
UserActionInProgress
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
InvalidDecryptedRequest
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.
금지
이 유형에는 필드가 없습니다.
이 메시지는 현재 의도적으로 비어 있습니다. 향후 새 필드를 추가할 수 있습니다.