Chuyển tới nội dung chính

THÔNG SỐ KỸ THUẬT API THẺ IFRAME GLODIPAY

PHIÊN BẢN 2.0.0

Mục lục

Sử dụng môi trường Thử nghiệm (Test). Không có chi phí thực tế nào được tính.

Không có 3DS4111 1111 1111 111101/30029
Không có 3DS5555 5555 5555 444401/30029
Thanh toán 3DS4012 8888 8888 188101/30029Thành công: 123456 / Thất bại: 111111
Thanh toán 3DS5111 1111 1111 111801/30029Thành công: 123456 / Thất bại: 111111
Thanh toán 3DS4141 4141 4141 414112/30123Thành công: 123456 / Thất bại: 111111

Giới thiệu

Tài liệu này mô tả GLODIPAY iFrame Card API v2, cho phép người bán nhúng biểu mẫu nhập thẻ do GLODIPAY lưu trữ vào bên trong trang web của chính họ bằng cách sử dụng thẻ HTML <iframe>.

Tổng quan quy trình:

  • Máy chủ của người bán gửi một yêu cầu POST đến /v2/card/iframe để tạo một phiên làm việc với thẻ.
  • GLODIPAY trả về một URL tạm thời đã được ký, trỏ đến biểu mẫu nhập thẻ được lưu trữ.
  • Người bán nhúng URL này vào bên trong một <iframe> trên trang thanh toán của mình.
  • Người mua nhập chi tiết thẻ trên biểu mẫu do GLODIPAY lưu trữ bên trong iframe.
  • GLODIPAY xử lý thanh toán và gửi kết quả qua IPN đến notificationUrl, sau đó chuyển hướng người mua đến callbackUrl hoặc errorUrl.

Trang của người bán vẫn giữ nguyên bố cục trong khi GLODIPAY xử lý dữ liệu thẻ một cách an toàn. URL phiên làm việc với thẻ sẽ hết hạn vào thời điểm được chỉ định bởi expiresAt (mặc định: 24 giờ).

Điểm cuối (Endpoints)

Thử nghiệmSẽ được cung cấp
Sản xuấtLấy từ trang API Keys trong Dashboard của người bán

Chữ ký (Signature)

Tất cả các yêu cầu gửi đến GLODIPAY phải bao gồm trường signature. Tất cả các phản hồi và payload IPN từ GLODIPAY cũng bao gồm trường signature để xác minh tính xác thực.

Chữ ký sử dụng RSA với MD5 (md5WithRSAEncryption).

Tạo chữ ký (Người bán -> GLODIPAY)

Sử dụng khóa riêng của người bán (có sẵn trong Dashboard của người bán).

Các bước:

  • Thu thập tất cả các tham số yêu cầu ngoại trừ signature dưới dạng đối tượng khóa-giá trị phẳng.
  • Sắp xếp chỉ các khóa cấp cao nhất theo thứ tự tăng dần tự nhiên (SORT_NATURAL trong PHP / localeCompare với { numeric: true } trong JavaScript). Không sắp xếp các khóa bên trong các đối tượng lồng nhau (ví dụ: fees, paymentMethodDetails).
  • Cắt bỏ khoảng trắng ở đầu và cuối tất cả các giá trị chuỗi một cách đệ quy.
  • Tuần tự hóa thành một chuỗi JSON.
  • Ký bằng openssl_sign(..., 'md5WithRSAEncryption').
  • Mã hóa Base64 đầu ra nhị phân.

Xác minh chữ ký (GLODIPAY -> Người bán)

Sử dụng khóa công khai của GLODIPAY (có sẵn từ Cổng thông tin).

Các bước:

  • Loại bỏ signature khỏi payload.
  • Sắp xếp chỉ các khóa cấp cao nhất theo thứ tự tăng dần tự nhiên. Không sắp xếp các khóa bên trong các đối tượng lồng nhau.
  • Cắt bỏ khoảng trắng ở đầu và cuối tất cả các giá trị chuỗi một cách đệ quy.
  • Tuần tự hóa thành một chuỗi JSON.
  • Xác minh bằng openssl_verify(..., base64_decode($signature), $publicKey, 'md5WithRSAEncryption').
  • Giá trị trả về 1 = hợp lệ.

Lưu ý (Node.js): Chuyển đổi tất cả các giá trị số thành chuỗi trước khi sắp xếp/tuần tự hóa. Thoát các dấu gạch chéo xuôi trong chuỗi JSON: .replace(///g, '\/').

POST PAYMENT

Tạo một phiên làm việc với iFrame thẻ. GLODIPAY trả về một URL đã ký trỏ đến biểu mẫu nhập thẻ mà người bán sẽ nhúng vào một <iframe>.

Endpoint: POST /v2/card/iframe Phương thức: POST Content-Type: application/x-www-form-urlencoded

Tham số yêu cầu (Request Parameters)

merchantIdString(1,50)MID của người bán
orderRefString(1,250)MMã tham chiếu giao dịch duy nhất cho mỗi người bán
amountFloatMSố tiền hóa đơn. Tối thiểu: 1. Tối đa 2 chữ số thập phân
currencyString(3)MMã tiền tệ ISO 4217. Ví dụ: USD
cancelUrlString(1,300)MURL để chuyển hướng người mua khi hủy bỏ. Phải là https
callbackUrlString(1,300)MURL để chuyển hướng người mua sau khi thanh toán thành công. Phải là https
notificationUrlString(1,300)MEndpoint máy chủ của bạn để nhận webhook IPN. Phải là https
errorUrlString(1,300)MURL để chuyển hướng người mua khi có lỗi. Phải là https
orderDescriptionString(max:3000)MMô tả ngắn gọn về đơn hàng
metadataJSONOCác cặp khóa-giá trị gắn vào phiên. Được trả về trong IPN và phản hồi truy vấn
transactionDocumentsJSONOTài liệu hỗ trợ cho giao dịch
paymentMethodStringMPhải là card cho phiên làm việc với iframe thẻ
feeBySellerNumber(0-100)OPhần trăm phí xử lý do người bán trả. 0 = người mua trả 100%. Tối đa 2 chữ số thập phân
billingEmailString(max:255)OĐịa chỉ email người mua
billingCountryStringOMã quốc gia ISO 3166-1 alpha-2
billingFirstNameString(max:255)OTên thanh toán
billingLastNameString(max:255)OHọ thanh toán
billingStreet1String(max:255)OĐịa chỉ dòng 1
billingStreet2String(max:255)OĐịa chỉ dòng 2
billingCityString(max:255)OThành phố
billingStateString(2,255)OBang / Tỉnh
billingPostalCodeString(max:25)OMã bưu điện / ZIP
billingPhoneCountryCodeString(max:10)OMã vùng quốc gia của điện thoại
billingPhoneNumberString(max:20)OSố điện thoại
customerIpStringOĐịa chỉ IP của khách hàng
websiteUrlString(max:300)OURL trang web của người bán
brandNameString(1,255)OGhi đè tên thương hiệu hiển thị trên biểu mẫu thẻ
colorModeString(1,255)OTối đa 3 màu được ngăn cách bởi ---. Ví dụ: #2e7d32---#e8f5e9---#81c784
logoSourceString(1,255)OGhi đè logo hiển thị trên biểu mẫu thẻ
signatureString(max:750)MChữ ký RSA-MD5. Xem phần Chữ ký
expiresAtStringOHết hạn phiên theo định dạng ISO 8601. Ví dụ: 2025-09-14T14:03:42.102862Z. Mặc định: 24 giờ

M = Bắt buộc (Mandatory), O = Tùy chọn (Optional)

Ví dụ yêu cầu

{
"merchantId": "1100000123",
"orderRef": "ORDER-001",
"amount": "100.00",
"currency": "USD",
"paymentMethod": "card",
"callbackUrl": "https://yoursite.com/callback",
"notificationUrl": "https://yoursite.com/webhook",
"cancelUrl": "https://yoursite.com/cancel",
"errorUrl": "https://yoursite.com/error",
"orderDescription": "Test order",
"billingFirstName": "John",
"billingLastName": "Doe",
"billingStreet1": "123 Main St",
"billingStreet2": "",
"billingCity": "New York",
"billingEmail": "john@example.com",
"billingState": "NY",
"billingCountry": "US",
"billingPostalCode": "10001",
"billingPhoneCountryCode": "1",
"billingPhoneNumber": "5551234567",
"cardNumber": "4111111111111111",
"cardMonth": "12",
"cardYear": "30",
"cardSecurityCode": "123",
"customerIp": "1.2.3.4",
"signature": "base64-encoded-signature"
}

Phản hồi (Response)

Content-Type: application/json

statusStringcreated
transactionIdString (ULID)ID giao dịch của GLODIPAY
urlStringURL đã ký trỏ đến biểu mẫu nhập thẻ -- nhúng cái này vào một <iframe/>
messageStringThông báo dễ hiểu cho người dùng

Ví dụ -- Thành công:

{
"status": "created",
"transactionId": "01jza90dy6w82dfrrqvadn5vs4",
"url": "https://payment.gpayprocessing.com/v2/card-iframe/01jza90dy6w82dfrrqvadn5vs4?...",
"message": "Iframe card created successfully"
}

Ví dụ -- Lỗi:

{
"status": "error",
"transactionId": null,
"url": null,
"message": "No active payment service providers found. Please contact support."
}

Nhúng iFrame

Sau khi nhận được url, hãy nhúng nó vào trang của bạn:

<iframe
src="{url}"
width="100%"
height="600"
frameborder="0"
scrolling="no"
allowtransparency="true">
</iframe>

URL đã được ký và sẽ hết hạn vào thời điểm expiresAt. Không lưu trữ hoặc chia sẻ nó ra ngoài phiên thanh toán hiện tại. Người mua phải hoàn tất thanh toán trong thời gian hết hạn của phiên làm việc.

TRANSACTION QUERY (Truy vấn giao dịch)

Truy vấn trạng thái hiện tại và chi tiết đầy đủ của một giao dịch.

Endpoint: POST /v2/checkout/query Phương thức: POST Content-Type: application/json

Yêu cầu (Request)

transactionIdString (ULID)MID giao dịch của GLODIPAY
signatureString(max:750)MChữ ký RSA-MD5

Phản hồi (Response)

Content-Type: application/json

merchantIdStringID của người bán
transactionIdStringID giao dịch của GLODIPAY (ULID)
transactionNumberStringSố giao dịch dễ hiểu của GLODIPAY
refStringorderRef của người bán
currencyStringMã tiền tệ ISO 4217
amountFloatSố tiền hóa đơn
paidAmountFloatSố tiền thực tế thu từ người mua (bao gồm cả phí người mua)
settlementAmountFloatSố tiền được thanh quyết toán cho người bán
estimationSettlementAtISO 8601 datetimeThời gian thanh quyết toán dự kiến
feesJSONPhân tách phí. Xem đối tượng fees
statusStringTrạng thái giao dịch. Xem phần Giá trị trạng thái
statusCodeNumberMã trạng thái số. Xem phần Mã trạng thái
metadataJSONCác cặp khóa-giá trị từ phiên gốc
transactionDocumentsJSONTài liệu hỗ trợ
paymentMethodDetailsJSONPhương thức thanh toán đã dùng. Xem đối tượng paymentMethodDetails
messageStringThông báo trạng thái dễ hiểu
descriptorStringMô tả giao dịch (descriptor)
transactionCreatedAtISO 8601 datetimeThời gian tạo giao dịch trong hệ thống GLODIPAY
originalTransactionCreatedAtISO 8601 datetimeThời gian tạo giao dịch tại PSP
signatureStringChữ ký RSA-MD5 -- xác minh bằng khóa công khai của GLODIPAY

NOTIFICATION (Thông báo)

GLODIPAY gửi một HTTP POST đến notificationUrl của bạn khi một giao dịch đạt đến trạng thái cuối cùng.

Phương thức: POST Content-Type: application/json

Chính sách gửi lại (Retry policy): GLODIPAY có thể gửi lại IPN cho các giao dịch chưa được xác nhận. Máy chủ của bạn nên trả về {"returnCode":"100"} ngay khi nhận được thông báo.

Payload

merchantIdStringMID của người bán
transactionIdStringMID giao dịch của GLODIPAY (ULID)
transactionNumberStringMSố giao dịch dễ hiểu của GLODIPAY
refStringMorderRef của người bán
currencyStringMMã tiền tệ ISO 4217
amountFloatMSố tiền hóa đơn
paidAmountFloatOSố tiền thực tế thu từ người mua (bao gồm cả phí người mua)
settlementAmountFloatOSố tiền được thanh quyết toán cho người bán
estimationSettlementAtISO 8601 datetimeOThời gian thanh quyết toán dự kiến
feesJSONOPhân tách phí. Xem đối tượng fees
paymentMethodDetailsJSONOPhương thức thanh toán đã dùng. Xem đối tượng paymentMethodDetails
statusStringMTrạng thái giao dịch. Xem phần Giá trị trạng thái
statusCodeNumberMMã trạng thái số. Xem phần Mã trạng thái
metadataJSONOCác cặp khóa-giá trị từ phiên gốc
transactionDocumentsJSONOTài liệu hỗ trợ
messageStringOThông báo trạng thái dễ hiểu
descriptorStringOMô tả giao dịch (descriptor)
transactionCreatedAtISO 8601 datetimeMThời gian tạo giao dịch trong hệ thống GLODIPAY
originalTransactionCreatedAtISO 8601 datetimeMThời gian tạo giao dịch tại PSP
signatureStringMChữ ký RSA-MD5 -- xác minh bằng khóa công khai của GLODIPAY

Đối tượng fees

buyerFloatSố phí người mua phải trả
sellerFloatSố phí người bán phải trả
rollingFloatSố tiền ký quỹ (rolling reserve)
operateFloatTổng phí vận hành (processor + GLODIPAY + đối tác)
estimationRollingReleaseAtISO 8601 datetimeThời gian dự kiến giải tỏa tiền ký quỹ

Đối tượng paymentMethodDetails

displayNameStringNhãn phương thức thanh toán
groupStringLoại nhóm phương thức thanh toán
familyStringLoại họ phương thức thanh toán
typeStringLoại phương thức thanh toán
{type}JSONTùy chọn. Chi tiết riêng cho từng phương thức. Khóa bằng giá trị type (ví dụ: card). Chỉ xuất hiện cho thanh toán thẻ khi có sẵn chi tiết thẻ. Xem đối tượng card bên dưới.

Đối tượng card (paymentMethodDetails.card)

nameTên chủ thẻ
firstSixDigits6 số đầu của số thẻ (BIN)
lastFourDigits4 số cuối của số thẻ
expiryMonthTháng hết hạn (MM)
expiryYearNăm hết hạn (YY)
typeThương hiệu thẻ (visa, mastercard, amex, v.v.)
issuerTên ngân hàng phát hành (tùy thuộc vào nhà cung cấp)
issuerCountryCodeMã quốc gia ISO 3166-1 alpha-2 của ngân hàng phát hành (tùy thuộc vào nhà cung cấp)
fundingLoại nguồn tiền của thẻ (credit, debit, prepaid) (tùy thuộc vào nhà cung cấp)
authorizationCodeMã ủy quyền từ ngân hàng phát hành (tùy thuộc vào nhà cung cấp)
clientIPĐịa chỉ IP của khách hàng tại thời điểm thanh toán (tùy thuộc vào nhà cung cấp)
checksKết quả xác minh AVS/CVC (tùy thuộc vào nhà cung cấp)
threeDSecureChi tiết xác thực 3D Secure (tùy thuộc vào nhà cung cấp)

Ví dụ Payload IPN:

{
"merchantId": "1100000123",
"transactionId": "01jza90dy6w82dfrrqvadn5vs4",
"transactionNumber": "2604-1713100800",
"ref": "ORDER-001",
"currency": "USD",
"amount": 100.00,
"paidAmount": 105.00,
"settlementAmount": 95.00,
"estimationSettlementAt": "2026-04-16T00:00:00+00:00",
"fees": {
"buyer": 5.00,
"seller": 5.00,
"rolling": 2.00,
"operate": 3.00,
"estimationRollingReleaseAt": "2026-05-14T00:00:00+00:00"
},
"status": "successful",
"statusCode": 6,
"paymentMethodDetails": {
"displayName": "Credit / Debit Card",
"group": "card",
"family": "card",
"type": "card"
},
"metadata": { "orderId": "12345" },
"transactionCreatedAt": "2026-04-14T10:00:00+00:00",
"originalTransactionCreatedAt": "2026-04-14T10:00:01+00:00",
"signature": "base64-encoded-rsa-signature"
}

Phản hồi (Người bán -> GLODIPAY)

Máy chủ của bạn phải phản hồi trong vòng 30 giây:

{
"returnCode": "100",
"description": "Received"
}
returnCodeStringRPhải là "100" để xác nhận đã nhận
descriptionString(1,1500)OMô tả tùy chọn

Mô phỏng thanh toán (Thẻ thử nghiệm)

Sử dụng môi trường Thử nghiệm (Test). Không có chi phí thực tế nào được tính.

Không có 3DS4111 1111 1111 111101/30029
Không có 3DS5555 5555 5555 444401/30029
Thanh toán 3DS4012 8888 8888 188101/30029Thành công: 123456 / Thất bại: 111111
Thanh toán 3DS5111 1111 1111 111801/30029Thành công: 123456 / Thất bại: 111111
Thanh toán 3DS4141 4141 4141 414112/30123Thành công: 123456 / Thất bại: 111111

Phụ lục

Giá trị trạng thái (Status Values)

Giá trị chuỗi được trả về trong trường status của payload IPN và phản hồi truy vấn.

incompleteGiao dịch đã khởi tạo, đang chờ hành động
pendingĐang chờ xác nhận thanh toán
under_reviewGiao dịch đang được xem xét
successfulThanh toán hoàn tất thành công
failedThanh toán thất bại
errorĐã xảy ra lỗi hệ thống
canceledGiao dịch bị hủy
rejectedGiao dịch bị từ chối
expiredGiao dịch hết hạn
releasedTiền đã giải tỏa / thanh quyết toán
documents_uploadedTài liệu hỗ trợ đã tải lên
refund_initiatedYêu cầu hoàn tiền đã khởi tạo
refund_under_reviewHoàn tiền đang xem xét
refund_successfulHoàn tiền hoàn tất thành công
refund_failedHoàn tiền thất bại
refund_partially_successfulHoàn tiền một phần thành công
refund_partially_failedHoàn tiền một phần thất bại
void_initiatedViệc hủy bỏ đã khởi tạo
void_under_reviewViệc hủy bỏ đang xem xét
void_successfulViệc hủy bỏ hoàn tất thành công
void_failedViệc hủy bỏ thất bại
void_partially_successfulViệc hủy bỏ một phần thành công
void_partially_failedViệc hủy bỏ một phần thất bại
chargeback_alertNhận được cảnh báo chargeback
chargebackedGiao dịch đã bị chargeback
disputeTranh chấp đã được mở

Mã trạng thái (Status Codes)

Mã số trong trường statusCode của payload IPN và phản hồi truy vấn.

1incompleteGiao dịch đã khởi tạo
2pendingĐang chờ xác nhận
3errorLỗi hệ thống
4failedThanh toán thất bại
5under_reviewĐang xem xét
6successfulThanh toán thành công
7releasedĐã giải tỏa / thanh quyết toán
8refund_initiatedHoàn tiền đã khởi tạo
9refund_failedHoàn tiền thất bại
10refund_under_reviewHoàn tiền đang xem xét
11refund_successfulHoàn tiền thành công
12refund_partially_failedHoàn tiền một phần thất bại
13refund_partially_successfulHoàn tiền một phần thành công
14canceledĐã hủy
15rejectedBị từ chối
16expiredHết hạn
17documents_uploadedTài liệu đã tải lên
18void_initiatedHủy bỏ đã khởi tạo
19void_under_reviewHủy bỏ đang xem xét
20void_successfulHủy bỏ thành công
21void_failedHủy bỏ thất bại
22void_partially_successfulHủy bỏ một phần thành công
23void_partially_failedHủy bỏ một phần thất bại
24chargeback_alertCảnh báo chargeback
25chargebackedĐã bị chargeback
26disputeTranh chấp đã mở

Mã tiền tệ (Currency Codes)

GLODIPAY tuân theo tiêu chuẩn ISO 4217. Điểm cuối này hiện chỉ chấp nhận USD.

USDĐô la Mỹ

Mã quốc gia (Country Codes)

GLODIPAY sử dụng mã hai chữ cái ISO 3166-1 alpha-2 cho trường billingCountry.

ADAndorra
AEUnited Arab Emirates
AFAfghanistan
AGAntigua and Barbuda
AIAnguilla
ALAlbania
AMArmenia
AOAngola
AQAntarctica
ARArgentina
ASAmerican Samoa
ATÁo
AUÚc
AWAruba
AXÅland Islands
AZAzerbaijan
BABosnia and Herzegovina
BBBarbados
BDBangladesh
BEBỉ
BFBurkina Faso
BGBulgaria
BHBahrain
BIBurundi
BJBenin
BLSaint Barthélemy
BMBermuda
BNBrunei Darussalam
BOBolivia, Plurinational State of
BQBonaire, Sint Eustatius and Saba
BRBrazil
BSBahamas
BTBhutan
BVBouvet Island
BWBotswana
BYBelarus
BZBelize
CACanada
CCCocos (Keeling) Islands
CDCongo, Democratic Republic of the
CFCentral African Republic
CGCongo
CHThụy Sĩ
CICôte d'Ivoire
CKCook Islands
CLChile
CMCameroon
CNTrung Quốc
COColombia
CRCosta Rica
CUCuba
CVCabo Verde
CWCuraçao
CXChristmas Island
CYĐảo Síp
CZCộng hòa Séc
DEĐức
DJDjibouti
DKĐan Mạch
DMDominica
DOCộng hòa Dominica
DZAlgeria
ECEcuador
EEEstonia
EGAi Cập
EHTây Sahara
EREritrea
ESTây Ban Nha
ETEthiopia
FIPhần Lan
FJFiji
FKFalkland Islands
FMMicronesia
FOQuần đảo Faroe
FRPháp
GAGabon
GBVương quốc Anh
GDGrenada
GEGeorgia
GFFrench Guiana
GGGuernsey
GHGhana
GIGibraltar
GLGreenland
GMGambia
GNGuinea
GPGuadeloupe
GQGuinea Xích đạo
GRHy Lạp
GSNam Georgia và Quần đảo Nam Sandwich
GTGuatemala
GUGuam
GWGuinea-Bissau
GYGuyana
HKHồng Kông
HMĐảo Heard và Quần đảo McDonald
HNHonduras
HRCroatia
HTHaiti
HUHungary
IDIndonesia
IEIreland
ILIsrael
IMIsle of Man
INẤn Độ
IOLãnh thổ Ấn Độ Dương thuộc Anh
IQIraq
IRIran
ISIceland
ITÝ
JEJersey
JMJamaica
JOJordan
JPNhật Bản
KEKenya
KGKyrgyzstan
KHCampuchia
KIKiribati
KMComoros
KNSaint Kitts và Nevis
KPTriều Tiên
KRHàn Quốc
KWKuwait
KYQuần đảo Cayman
KZKazakhstan
LALào
LBLebanon
LCSaint Lucia
LILiechtenstein
LKSri Lanka
LRLiberia
LSLesotho
LTLithuania
LULuxembourg
LVLatvia
LYLibya
MAMa-rốc
MCMonaco
MDMoldova
MEMontenegro
MFSaint Martin (Pháp)
MGMadagascar
MHQuần đảo Marshall
MKBắc Macedonia
MLMali
MMMyanmar
MNMông Cổ
MOMa Cao
MPQuần đảo Bắc Mariana
MQMartinique
MRMauritania
MSMontserrat
MTMalta
MUMauritius
MVMaldives
MWMalawi
MXMexico
MYMalaysia
MZMozambique
NANamibia
NCNew Caledonia
NENiger
NFĐảo Norfolk
NGNigeria
NINicaragua
NLHà Lan
NONa Uy
NPNepal
NRNauru
NUNiue
NZNew Zealand
OMOman
PAPanama
PEPeru
PFFrench Polynesia
PGPapua New Guinea
PHPhilippines
PKPakistan
PLBa Lan
PMSaint Pierre và Miquelon
PNPitcairn
PRPuerto Rico
PSPalestine
PTBồ Đào Nha
PWPalau
PYParaguay
QAQatar
RERéunion
RORomania
RSSerbia
RUNga
RWRwanda
SAẢ Rập Xê-út
SBQuần đảo Solomon
SCSeychelles
SDSudan
SEThụy Điển
SGSingapore
SHSaint Helena
SISlovenia
SJSvalbard và Jan Mayen
SKSlovakia
SLSierra Leone
SMSan Marino
SNSenegal
SOSomalia
SRSuriname
SSNam Sudan
STSao Tome và Principe
SVEl Salvador
SXSint Maarten (Hà Lan)
SYSyria
SZEswatini
TCQuần đảo Turks và Caicos
TDChad
TFFrench Southern Territories
TGTogo
THThái Lan
TJTajikistan
TKTokelau
TLTimor-Leste
TMTurkmenistan
TNTunisia
TOTonga
TRThổ Nhĩ Kỳ
TTTrinidad và Tobago
TVTuvalu
TWĐài Loan
TZTanzania
UAUkraine
UGUganda
UMLãnh thổ hải ngoại của Hoa Kỳ
USHoa Kỳ
UYUruguay
UZUzbekistan
VAHoly See
VCSaint Vincent và Grenadines
VEVenezuela
VGQuần đảo Virgin (Anh)
VIQuần đảo Virgin (Mỹ)
VNViệt Nam
VUVanuatu
WFWallis và Futuna
WSSamoa
YEYemen
YTMayotte
ZANam Phi
ZMZambia
ZWZimbabwe

Loại thẻ (Card Types)

1VISAvisa
2MASTERCARDmastercard
3AMERICAN EXPRESSamex
4JCBjcb
5MAESTROmaestro
6DISCOVERdiscover
7UNION PAYunion-pay
8DINERSdiners

Ví dụ mã nguồn

PHP

<?php

function generateSignature(array $data): string
{
$privateKey = openssl_pkey_get_private("-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----
");

ksort($data, SORT_NATURAL);
array_walk_recursive(
$data,
static function (&$field) {
$field = trim($field);
}
);

openssl_sign(json_encode($data), $signature, $privateKey, 'md5WithRSAEncryption');

return base64_encode($signature);
}

// Ví dụ: tạo một phiên làm việc v2 card iframe
$payload = [
'merchantId' => '1100000123',
'orderRef' => 'ORDER-' . time(),
'amount' => '100.00',
'currency' => 'USD',
'paymentMethod' => 'card',
'callbackUrl' => 'https://yoursite.com/payment/callback',
'notificationUrl' => 'https://yoursite.com/payment/webhook',
'cancelUrl' => 'https://yoursite.com/payment/cancel',
'errorUrl' => 'https://yoursite.com/payment/error',
'orderDescription' => 'Test order',
'billingEmail' => 'customer@example.com',
];

$payload['signature'] = generateSignature($payload);

$ch = curl_init('https://payment-sandbox.gpayprocessing.com/v2/card/iframe');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

// Nhúng $result['url'] vào một iframe trên trang thanh toán của bạn
echo '<iframe src="' . htmlspecialchars($result['url']) . '" width="100%" height="600" frameborder="0"></iframe>';

Node.js

// Save as script.mjs and run: node script.mjs
import { createSign } from 'crypto';
import https from 'https';

const PRIVATE_KEY = `-----BEGIN PRIVATE KEY-----
YOUR_PRIVATE_KEY_HERE
-----END PRIVATE KEY-----`;

function phpCast(v) {
if (typeof v === 'number') return String(v);
if (typeof v === 'boolean') return v ? '1' : '';
if (typeof v === 'string') return v.trim();
if (Array.isArray(v)) return v.map(phpCast);
if (v && typeof v === 'object') return Object.fromEntries(Object.entries(v).map(([k, val]) => [k, phpCast(val)]));
return v;
}

function generateSignature(data) {
const sorted = {};
Object.keys(data)
.filter(k => k !== 'signature')
.sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }))
.forEach(k => { sorted[k] = data[k]; });

const canonical = JSON.stringify(phpCast(sorted))
.replace(/\//g, '\\/')
.replace(/[\u0080-\uffff]/g, c => '\\u' + c.charCodeAt(0).toString(16).padStart(4, '0'));

const sign = createSign('md5WithRSAEncryption');
sign.update(canonical);
return sign.sign(PRIVATE_KEY, 'base64');
}

// Ví dụ: tạo một phiên làm việc card iframe
const payload = {
merchantId: '1100000123',
orderRef: 'ORDER-001',
amount: '100.00',
currency: 'USD',
paymentMethod: 'card',
callbackUrl: 'https://yoursite.com/payment/callback',
notificationUrl: 'https://yoursite.com/payment/webhook',
cancelUrl: 'https://yoursite.com/payment/cancel',
errorUrl: 'https://yoursite.com/payment/error',
orderDescription: 'Test order',
billingEmail: 'customer@example.com',
};

payload.signature = generateSignature(payload);

const postData = new URLSearchParams(payload).toString();
const options = {
hostname: 'payment-sandbox.gpayprocessing.com',
path: '/v2/card/iframe',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData),
},
};

const req = https.request(options, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => {
const result = JSON.parse(body);
console.log('Iframe URL:', result.url);
});
});

req.on('error', console.error);
req.write(postData);
req.end();

Bookmarks

No bookmarks yet.
Hover over a heading and click to save a section.