Method: card.verifycard

Xác minh thẻ của người dùng để xem thẻ đó có hợp lệ hay không.

Phương thức này được Google gọi để xác minh thông tin chi tiết về thẻ của người dùng và để xem liệu thẻ đó có thể dùng để thanh toán hay không. Cuộc gọi này không chuyển tiền và sẽ không có thay đổi vĩnh viễn nào đối với tài khoản của người dùng.

Yêu cầu mẫu sẽ có dạng như sau:


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 0,
      "revision": 0
    },
    "requestId": "ZWNobyB0cmFuc2FjdGlvbg",
    "requestTimestamp": "1481855969503"
  },
  "standardCard": {
    "accountNumber": "4123456789101112",
    "expiryDate": "01/2020",
    "cvn": "123"
  },
  "avsData": {
    "streetAddress": "123 Main St APT #200",
    "localityName": "Springfield",
    "administrativeAreaName": "CO",
    "countryCode": "US"
  }
}

Câu trả lời mẫu sẽ có dạng như sau:


{
  "responseHeader": {
    "responseTimestamp": "1481855970403",
  },
  "cardNetworkResult": {
    "network": "VISA",
    "iso8583Result": "00",
    "rawNetworkResult": "00"
  },
  "avsResult": {
    "rawAvsResult": "B",
    "streetAddress": "MATCH",
    "localityName": "MATCH",
    "administrativeAreaName": "MATCH",
    "postalCodeNumber": "NOT_SENT",
    "countryCode": "SKIPPED"
  },
  "cvnResult": "MATCH"
}

Yêu cầu HTTP

POST https://card-verification-service.google.com/v1/card/verifycard

URL sử dụng cú pháp Chuyển mã gRPC.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "requestHeader": {
    object(RequestHeader)
  },
  "standardCard": {
    object(StandardCard)
  },
  "avsData": {
    object(AvsData)
  }
}
Trường
requestHeader

object(RequestHeader)

BẮT BUỘC: Tiêu đề chung cho tất cả các yêu cầu.

standardCard

object(StandardCard)

BẮT BUỘC: Dữ liệu về thẻ thanh toán của người dùng.

avsData

object(AvsData)

KHÔNG BẮT BUỘC: Địa chỉ của người dùng sẽ được AVS xác minh.

Nội dung phản hồi

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Đối tượng phản hồi cho phương thức Payment Integrator card.verifycard được lưu trữ.

Biểu diễn dưới dạng JSON
{
  "responseHeader": {
    object(ResponseHeader)
  },
  "cardNetworkResult": {
    object(CardNetworkResult)
  },
  "avsResult": {
    object(AvsResult)
  },
  "cvnResult": enum(CvnResult)
}
Trường
responseHeader

object(ResponseHeader)

BẮT BUỘC: Tiêu đề chung cho tất cả câu trả lời.

cardNetworkResult

object(CardNetworkResult)

BẮT BUỘC: Kết quả của việc cấp phép trên mạng lưới thẻ.

avsResult

object(AvsResult)

KHÔNG BẮT BUỘC: Kết quả của việc xác minh các trường địa chỉ được gửi trong yêu cầu.

Đây là trường bắt buộc nếu bạn đã đặt addressVerificationSystemData trong yêu cầu.

cvnResult

enum(CvnResult)

BẮT BUỘC: Kết quả xác minh CVN được gửi trong yêu cầu. Nếu bạn không đặt CVN theo yêu cầu, thì giá trị này phải là NOT_SENT.

RequestHeader

Đối tượng tiêu đề được xác định trên tất cả các yêu cầu gửi đến máy chủ.

Biểu diễn dưới dạng JSON
{
  "requestId": string,
  "requestTimestamp": string,
  "userLocale": string,
  "protocolVersion": {
    object(Version)
  }
}
Trường
requestId

string

BẮT BUỘC: Giá trị nhận dạng duy nhất của yêu cầu này.

Đây là chuỗi có độ dài tối đa là 100 ký tự và chỉ chứa các ký tự "a-z", "A-Z", "0-9", ":", "-" và "_".

requestTimestamp

string (int64 format)

BẮT BUỘC: Dấu thời gian của yêu cầu này được biểu thị dưới dạng mili giây kể từ thời gian bắt đầu của hệ thống. Trình nhận phải xác minh rằng dấu thời gian này dài 60 giây so với "hiện tại". Dấu thời gian yêu cầu này không đồng đều sau khi thử lại.

userLocale
(deprecated)

string

KHÔNG BẮT BUỘC: Mã ngôn ngữ ISO 639-2 Alpha 3 gồm hai hoặc ba chữ cái (không bắt buộc) theo sau là dấu gạch nối và mã quốc gia theo ISO 3166-1 Alpha-2, ví dụ: "pt", "pt-BR", "fil" hoặc "fil-PH". Sử dụng mã này để giúp điều khiển các trường user_message trong phản hồi.

protocolVersion

object(Version)

BẮT BUỘC: Phiên bản của yêu cầu này.

Phiên bản

Đối tượng Version (phiên bản) là một dạng có cấu trúc của cấu trúc phiên bản a.b.c cũ. Các phiên bản chính của cùng một số điện thoại được đảm bảo sẽ tương thích. Xin lưu ý rằng các bản sửa đổi và bản sửa đổi nhỏ có thể thay đổi thường xuyên mà không cần thông báo trước. Trình tích hợp phải hỗ trợ tất cả các yêu cầu cho cùng một phiên bản chính.

Biểu diễn dưới dạng JSON
{
  "major": number,
  "minor": number,
  "revision": number
}
Trường
major

number

BẮT BUỘC: Phiên bản lớn. Giá trị này được đánh dấu cho các yêu cầu về khả năng tương thích với nhiều phiên bản và không đảm bảo sẽ tương thích.

minor

number

BẮT BUỘC: Phiên bản nhỏ. Điều này cho thấy các bản sửa lỗi quan trọng.

revision

number

BẮT BUỘC: Phiên bản nhỏ. Điều này biểu thị các bản sửa lỗi nhỏ.

StandardCard

Hình ảnh đại diện tiêu chuẩn của một thẻ

Biểu diễn dưới dạng JSON
{
  "accountNumber": string,
  "expiryDate": string,
  "cvn": string
}
Trường
accountNumber

string

BẮT BUỘC: Số tài khoản chính (PAN) của thẻ ở dạng văn bản thuần tuý.

expiryDate

string

KHÔNG BẮT BUỘC: Ngày hết hạn của thẻ ở định dạng MM/YYYY. Không bắt buộc vì một số thẻ nhất định ở một số khu vực không có ngày hết hạn.

cvn

string

KHÔNG BẮT BUỘC: Nếu Google thu thập CVN từ người dùng, thì bạn sẽ thấy CVN ở đây và cần được xác minh.

AvsData

Chứa các trường địa chỉ sẽ được AVS xác minh.

Biểu diễn dưới dạng JSON
{
  "streetAddress": string,
  "localityName": string,
  "administrativeAreaName": string,
  "postalCodeNumber": string,
  "countryCode": string
}
Trường
streetAddress

string

KHÔNG BẮT BUỘC: Địa chỉ đường phố trong địa chỉ thanh toán của người dùng. Khi người dùng đã cung cấp nhiều dòng để nhập địa chỉ đường phố của họ (ví dụ: một dòng cho số căn hộ), các dòng này sẽ được nối với nhau bằng dấu cách.

localityName

string

KHÔNG BẮT BUỘC: Đây là một cụm từ không rõ ràng, nhưng thường đề cập đến phần thành phố/thị trấn của một địa chỉ. Ở các khu vực trên thế giới nơi các địa phương không được xác định rõ hoặc không phù hợp với cấu trúc này (ví dụ: Nhật Bản và Trung Quốc), hãy để trống localityName và sử dụng address_line.

Ví dụ: Thành phố ở Hoa Kỳ, xã CNTT, thị trấn có bưu điện của Vương quốc Anh.

administrativeAreaName

string

KHÔNG BẮT BUỘC: Phân khu hành chính cấp cao nhất của quốc gia này đối với địa chỉ thanh toán của người dùng.

Ví dụ: Tiểu bang ở Hoa Kỳ, khu vực CNTT, quốc gia cấu thành ở Vương quốc Anh, tỉnh Nhật Bản

Khi quốc gia == Hoa Kỳ, đây được kỳ vọng là chữ viết tắt gồm 2 ký tự của Tiểu bang Hoa Kỳ.

postalCodeNumber

string

KHÔNG BẮT BUỘC: Mã bưu chính thanh toán của người dùng.

countryCode

string

KHÔNG BẮT BUỘC: Mã quốc gia trong địa chỉ thanh toán của người dùng ở định dạng ISO-3166-1 Alpha-2.

ResponseHeader

Đối tượng tiêu đề được xác định trên tất cả các phản hồi gửi từ máy chủ.

Biểu diễn dưới dạng JSON
{
  "responseTimestamp": string
}
Trường
responseTimestamp

string (int64 format)

BẮT BUỘC: Dấu thời gian của phản hồi này được biểu thị dưới dạng mili giây kể từ thời gian bắt đầu của hệ thống. Trình nhận phải xác minh rằng dấu thời gian này dài 60 giây so với "hiện tại".

CardNetworkResult

Chứa một mạng và mã kết quả thô từ mạng đó.

Biểu diễn dưới dạng JSON
{
  "network": enum(Network),
  "iso8583Result": string,
  "rawNetworkResult": string
}
Trường
network

enum(Network)

BẮT BUỘC: Mạng nơi chứa mã kết quả.

iso8583Result

string

BẮT BUỘC: Mã trả về theo tiêu chuẩn ISO-8583 do mạng lưới trả về.

Nếu mạng sử dụng định dạng mã phản hồi riêng thì đơn vị tích hợp phải liên kết các mã phản hồi đó với mã trả về theo ISO-8583.

rawNetworkResult

string

BẮT BUỘC: Giá trị thô được mạng trả về. Mạng đã sử dụng mã trả lại ISO-8583 sẽ có cùng giá trị trong trường này và trong iso8583Result. Trường này dùng để cung cấp thông tin cho công cụ đánh giá rủi ro của Google và hữu ích nhất đối với các mạng sử dụng mã phản hồi riêng.

Mạng

Xác định các mạng thẻ có thể đã trả về rawResult.

Enum
UNKNOWN_NETWORK Không nhận dạng được mạng
NETWORK_NOT_INVOLVED Hãy sử dụng giá trị này nếu khoản thanh toán bị từ chối không xuất phát từ mạng lưới, chẳng hạn như nếu đơn vị tích hợp từ chối giao dịch mua trước khi giao dịch đó được gửi qua mạng lưới thẻ.
AMEX Mạng AMEX
COMPROCARD Mạng COMPROCARD
DANKORT Mạng DANKORT
DINACARD Mạng DINACARD
DINERS_CLUB Mạng DINERS_CLUB
DISCOVER Mạng KHÁM PHÁ
EFTPOS Mạng EFTPOS
ELO Mạng ELO
ENROUTE Mạng ENROUTE
FELICA Mạng FELICA
GE_CAPITAL Mạng GE_CAPITAL
HIPERCARD Mạng HIPERCARD
ID Mạng mã nhận dạng
INTERAC Mạng INTERAC
JCB Mạng JCB
LASER Mạng LASER
MAESTRO Mạng MAESTRO
MASTERCARD Mạng MASTERCARD
PPT Mạng PPT
QUICPAY Mạng QUICPAY
RUPAY Mạng RUPAY
SBERCARD Mạng SBERCARD
SOLO Mạng SOLO
SYNCHRONY Mạng ĐỒNG BỘ
UNIONPAY Mạng UNIONPAY
VISA Mạng VISA

AvsResult

Kết quả của việc xác minh các trường địa chỉ đã cung cấp trong yêu cầu.

Tất cả các trường đều là bắt buộc vì chúng ta muốn có kết quả rõ ràng cho từng trường thay vì dựa vào việc không có trường nào là kết quả ngụ ý.

Biểu diễn dưới dạng JSON
{
  "rawAvsResult": string,
  "streetAddress": enum(VerificationResult),
  "localityName": enum(VerificationResult),
  "administrativeAreaName": enum(VerificationResult),
  "postalCodeNumber": enum(VerificationResult),
  "countryCode": enum(VerificationResult)
}
Trường
rawAvsResult

string

BẮT BUỘC: Giá trị AVS thô được trả về từ mạng thẻ.

streetAddress

enum(VerificationResult)

BẮT BUỘC: Kết quả xác minh streetAddress được gửi trong trường addressVerificationSystemData của yêu cầu.

Nếu trường không được đặt trong yêu cầu, giá trị này phải là "NOT_SENT".

localityName

enum(VerificationResult)

BẮT BUỘC: Kết quả xác minh localityName được gửi trong trường addressVerificationSystemData của yêu cầu.

Nếu trường không được đặt trong yêu cầu, giá trị này phải là "NOT_SENT".

administrativeAreaName

enum(VerificationResult)

BẮT BUỘC: Kết quả xác minh administrativeAreaName được gửi trong trường addressVerificationSystemData của yêu cầu.

Nếu trường không được đặt trong yêu cầu, giá trị này phải là "NOT_SENT".

postalCodeNumber

enum(VerificationResult)

BẮT BUỘC: Kết quả xác minh postalCodeNumber được gửi trong trường addressVerificationSystemData của yêu cầu.

Nếu trường không được đặt trong yêu cầu, giá trị này phải là "NOT_SENT".

countryCode

enum(VerificationResult)

BẮT BUỘC: Kết quả xác minh countryCode được gửi trong trường addressVerificationSystemData của yêu cầu.

Nếu trường không được đặt trong yêu cầu, giá trị này phải là "NOT_SENT".

VerificationResult

Enum
UNKNOWN_AVS_MATCH Đừng bao giờ đặt giá trị mặc định này!
NOT_SENT Google không gửi trường này nên bạn không thể làm gì được.
MATCH Google đã gửi trường này đến đối tác tích hợp và hệ thống đã kiểm tra trường này thông qua AVS và kết quả khớp với giá trị dự kiến.
MISMATCH Google đã gửi trường này cho đối tác tích hợp và trường đó đã được kiểm tra thông qua AVS nhưng không khớp với giá trị dự kiến.
SKIPPED Google đã gửi trường này cho đơn vị tích hợp nhưng đơn vị tích hợp không kiểm tra trường đó.
NOT_SPECIFIED Google đã gửi trường này đến đơn vị tích hợp và đối tác tích hợp đã kiểm tra trường thông qua AVS, nhưng mã kết quả AVS không cung cấp đủ thông tin để đối tác tích hợp biết liệu trường đó có khớp với giá trị dự kiến hay không.

CvnResult

Kết quả xác minh CVN được cung cấp trong yêu cầu.

Enum
UNKNOWN_CVN_RESULT Đừng bao giờ đặt giá trị mặc định này!
NOT_SENT Google không cung cấp CVN nên chúng tôi không thể xác minh thông tin này.
NOT_VERIFIED Google đã gửi CVN nhưng không được xác minh. Mã này tương ứng với mã kết quả mạng là "F"
MATCH Google đã gửi CVN, số này đã được xác minh và kết quả trùng khớp. Kết quả này tương ứng với mã kết quả mạng là "M".
MISMATCH Google đã gửi CVN, số này đã được xác minh nhưng không khớp. Mã này tương ứng với mã kết quả mạng là "N".