THÔNG SỐ KỸ THUẬT API CHECKOUT GLODIPAY
PHIÊN BẢN 2.0.0
Mục lục
- Giới thiệu
- Điểm cuối (Endpoints)
- Chữ ký (Signature)
- POST PAYMENT
- TRANSACTION QUERY (Truy vấn giao dịch)
- NOTIFICATION (Thông báo)
- 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ó 3DS | 4111 1111 1111 1111 | 01/30 | 029 | — |
| Không có 3DS | 5555 5555 5555 4444 | 01/30 | 029 | — |
| Thanh toán 3DS | 4012 8888 8888 1881 | 01/30 | 029 | Thành công: 123456 / Thất bại: 111111 |
| Thanh toán 3DS | 5111 1111 1111 1118 | 01/30 | 029 | Thành công: 123456 / Thất bại: 111111 |
| Thanh toán 3DS | 4141 4141 4141 4141 | 12/30 | 123 | Thành công: 123456 / Thất bại: 111111 |
- Phụ lục
- Phương thức thanh toán
- Chế độ kết nối
- Giá trị trạng thái
- Mã trạng thái
- Mã tiền tệ
- Mã qu ốc gia
- Loại thẻ
- Ví dụ mã nguồn
- PHP
- Node.js
Giới thiệu
Tài liệu này mô tả GLODIPAY Checkout API v2, cho phép người bán tạo một phiên thanh toán được lưu trữ hỗ trợ thẻ tín dụng/thẻ ghi nợ, ngân hàng di động, mã QR, ví điện tử và tiền điện tử trong một trang thanh toán thống nhất duy nhất.
Các tính năng chính:
- Đa PSP (Nhà cung cấp dịch vụ thanh toán): Một phiên thanh toán duy nhất hiển thị đồng thời các phương thức thanh toán từ nhiều PSP. Người mua thấy tất cả các tùy chọn có sẵn trên trang được lưu trữ -- người bán không cần cấu hình thêm.
- Chế độ kết nối (Connection Modes): Chọn giữa chuyển hướng trình duyệt (
DIRECT_POST), hoặc phản hồi API kèm liên kết thanh toán (API). - Tự động hết hạn: Các phiên thanh toán sẽ tự động hết hạn sau 24 giờ (có thể cấu hình qua trường
expiresAt).
Điểm cuối (Endpoints)
| Thử nghiệm | Sẽ được cung cấp |
| Sản xuất | Lấ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ừ
signaturedướ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_NATURALtrong PHP /localeComparevớ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ỏ
signaturekhỏ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 thanh toán và chuyển hướng (ho ặc trả về một liên kết) đến trang thanh toán được lưu trữ.
Endpoint: POST /v2/checkout
Phương thức: POST
Content-Type: application/x-www-form-urlencoded
Tham số yêu cầu (Request Parameters)
| merchantId | String(1,50) | M | ID của người bán |
| orderRef | String(1,250) | M | Mã tham chiếu giao dịch duy nhất cho mỗi người bán |
| amount | Float | M | Số tiền hóa đơn. Tối thiểu: 1. Tối đa 2 chữ số thập phân |
| currency | String(3) | M | Mã tiền tệ ISO 4217. Ví dụ: USD |
| cancelUrl | String(1,300) | M | URL để chuyển hướng người mua khi hủy bỏ. Phải là https. |
| callbackUrl | String(1,300) | M | URL để chuyển hướng người mua sau khi thanh toán thành công. Phải là https. |
| notificationUrl | String(1,300) | M | Endpoint máy chủ của bạn để nhận webhook IPN. Phải là https. |
| errorUrl | String(1,300) | M | URL để chuyển hướng người mua khi có lỗi. Phải là https. |
| orderDescription | String(max:3000) | M | Mô tả ngắn hiển thị trên màn hình thanh toán |
| metadata | JSON | O | Các cặp khóa-giá trị gắn liền với phiên. Được trả về trong IPN và phản hồi truy vấn |
| transactionDocuments | JSON | O | Tài liệu hỗ trợ cho giao dịch |
| paymentMethod | String | M | (Các) phương thức thanh toán hiển thị. Xem các giá trị paymentMethod |
| paymentFilter | JSON | O | Mảng các giá trị loại phương thức thanh toán cần loại trừ khỏi phiên |
| paymentSorter | JSON | O | Mảng có thứ tự để kiểm soát thứ tự hiển thị. Các giá trị hợp lệ: card, paypal, ibanking_push, local_bank_transfer, wire_transfer, wallet, skrill, alipay, wechat, googlepay, applepay, crypto, apm |
| feeBySeller | Number(0-100) | O | Phầ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 |
| billingFirstName | String(max:255) | O | Tên thanh toán |
| billingLastName | String(max:255) | O | Họ thanh toán |
| billingStreet1 | String(max:255) | O | Địa chỉ dòng 1 |
| billingStreet2 | String(max:255) | O | Địa chỉ dòng 2 |
| billingCity | String(max:255) | O | Thành phố |
| billingEmail | String(max:255) | O | Email người mua |
| billingState | String(2,255) | O | Bang / Tỉnh |
| billingCountry | String | O | Mã quốc gia ISO 3166-1 alpha-2 |
| billingPostalCode | String(max:25) | O | Mã bưu điện / ZIP |
| billingPhoneCountryCode | String(max:10) | O | Mã vùng quốc gia của điện thoại. Ví dụ: 1 cho Mỹ, 91 cho Ấn Độ |
| billingPhoneNumber | String(max:20) | O | Số điện thoại |
| brandName | String(1,255) | O | Ghi đè tên thương hiệu hiển thị trên màn hình thanh toán |
| colorMode | String(1,255) | O | Tối đa 3 màu cách nhau bởi ---. Chấp nhận tên màu, HEX hoặc RGBA. Ví dụ: #2e7d32---#e8f5e9---#81c784 |
| logoSource | String(1,255) | O | Ghi đè logo hiển thị trên màn hình thanh toán |
| customerIp | String | O | Địa chỉ IP của khách hàng |
| websiteUrl | String(max:300) | O | URL trang web của người bán |
| signature | String(max:750) | M | Chữ ký RSA-MD5. Xem phần Chữ ký |
| connectionMode | String | O | DIRECT_POST hoặc API |
| expiresAt | String | O | Hế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)
Các giá trị của paymentMethod
| ALL | Tất cả các phương thức thanh toán có sẵn |
| APM | Tất cả các phương thức thanh toán ngoại trừ thẻ |
| card | Thẻ tín dụng / Thẻ ghi nợ |
| googlepay | Google Pay |
| applepay | Apple Pay |
| paypal | PayPal |
| ibanking_push | Chuyển khoản ngân hàng trực tuyến tức thì |
| local_bank_transfer | Chuyển tiền qua ngân hàng trong nước |
| wire_transfer | Chuyển tiền điện tử trực tiếp |
| wallet | Ví điện tử |
| alipay | Alipay |
| WeChat Pay | |
| skrill | Skrill |
| crypto | Tiền điện tử |
paymentFilter
Mảng JSON gồm các giá trị loại phương thức thanh toán để loại trừ khỏi phiên thanh toán.
["googlepay", "applepay"]
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",
"brandName": " Client Form Simulate",
"colorMode": " rgba(224,230,5,1)---rgba(166,233,15,1)---rgba(105,193,28,1)",
"logoSource": "",
"customerIp": "1.2.3.4",
"connectionMode": "DIRECT_POST",
"signature": "base64-encoded-signature"
}
Phản hồi -- connectionMode: API
Content-Type: application/json
| status | String | created |
| transactionId | String (ULID) | ID giao dịch của GLODIPAY |
| paymentLink | String | URL đã ký -- chuyển hướng người mua đến URL này để hoàn tất thanh toán |
| message | String | Thông báo dễ hiểu cho người dùng |
Ví dụ -- Thành công:
{
"status": " created",
"transactionId": "01jza90dy6w82dfrrqvadn5vs4",
"paymentLink": "https://payment.gpayprocessing.com/v2/checkout/01jza90dy6w82dfrrqvadn5vs4?...",
"message": "Payment Link created successfully"
}
Ví dụ -- Lỗi:
{
"status": "error",
"transactionId": null,
"paymentLink": null,
"message": "No active payment service providers found. Please contact support."
}
Phản hồi -- connectionMode: DIRECT_POST
GLODIPAY chuyển hướng trình duyệt của người mua trực tiếp đến trang thanh toán được lưu trữ. Không có phản hồi JSON nào được trả về máy chủ.
Dữ liệu gửi đến callbackUrl
Sau khi thanh toán, GLODIPAY thực hiện chuyển hướng GET đến callbackUrl kèm theo tham số truy vấn payload:
GET {callbackUrl}?payload={base64-encoded-json}
Các trường payload sau khi giải mã:
| status | String | Trạng thái giao dịch cuối cùng. Xem phần Giá trị trạng thái |
| transactionId | String | ID giao dịch của GLODIPAY |
| ref | String | orderRef của người bán |
| amount | Float | Số tiền hóa đơn |
| currency | String | Mã tiền tệ |
| signature | String | Chữ ký RSA-MD5 -- xác minh bằng khóa công khai của GLODIPAY |
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)
| transactionId | String (ULID) | M | ID giao dịch của GLODIPAY |
| signature | String(max:750) | M | Chữ ký RSA-MD5 |
Phản hồi (Response)
Content-Type: application/json
| merchantId | String | ID của người bán |
| transactionId | String | ID giao dịch của GLODIPAY (ULID) |
| transactionNumber | String | Số giao dịch dễ hiểu của GLODIPAY |
| ref | String | orderRef của người bán |
| currency | String | Mã tiền tệ ISO 4217 |
| amount | Float | Số tiền hóa đơn |
| paidAmount | Float | Số tiền thực tế thu từ người mua (bao gồm cả phí người mua) |
| settlementAmount | Float | Số tiền được thanh quyết toán cho người bán |
| estimationSettlementAt | ISO 8601 datetime | Thời gian thanh quyết toán dự kiến |
| fees | JSON | Phân tách phí. Xem đối tượng fees |
| status | String | Trạng thái giao dịch. Xem phần Giá trị trạng thái |
| statusCode | Number | Mã trạng thái số. Xem phần Mã trạng thái |
| metadata | JSON | Các cặp khóa-giá trị từ phiên thanh toán gốc |
| transactionDocuments | JSON | Tài liệu hỗ trợ từ phiên thanh toán gốc |
| paymentMethodDetails | JSON | Phương thức thanh toán đã sử dụng. Xem đối tượng paymentMethodDetails |
| message | String | Thông báo trạng thái dễ hiểu |
| descriptor | String | Mô tả giao dịch (descriptor) |
| transactionCreatedAt | ISO 8601 datetime | Thời gian tạo giao dịch trong hệ thống GLODIPAY |
| originalTransactionCreatedAt | ISO 8601 datetime | Thời gian tạo giao dịch tại PSP |
| signature | String | Chữ 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
| merchantId | String | M | ID của người bán |
| transactionId | String | M | ID giao dịch của GLODIPAY (ULID) |
| transactionNumber | String | M | Số giao dịch dễ hiểu của GLODIPAY |
| ref | String | M | orderRef của người bán |
| currency | String | M | Mã tiền tệ ISO 4217 |
| amount | Float | M | Số tiền hóa đơn |
| paidAmount | Float | O | Số tiền thực tế thu từ người mua (bao gồm cả phí người mua) |
| settlementAmount | Float | O | Số tiền được thanh quyết toán cho người bán |
| estimationSettlementAt | ISO 8601 datetime | O | Thời gian thanh quyết toán dự kiến |
| fees | JSON | O | Phân t ách phí. Xem đối tượng fees |
| paymentMethodDetails | JSON | O | Phương thức thanh toán đã dùng. Xem đối tượng paymentMethodDetails |
| status | String | M | Trạng thái giao dịch. Xem phần Giá trị trạng thái |
| statusCode | Number | M | Mã trạng thái số. Xem phần Mã trạng thái |
| metadata | JSON | O | Các cặp khóa-giá trị từ phiên thanh toán gốc |
| transactionDocuments | JSON | O | Tài liệu hỗ trợ từ phiên thanh toán gốc |
| message | String | O | Thông báo trạng thái dễ hiểu |
| descriptor | String | O | Mô tả giao dịch (descriptor) |
| transactionCreatedAt | ISO 8601 datetime | M | Thời gian tạo giao dịch trong hệ thống GLODIPAY |
| originalTransactionCreatedAt | ISO 8601 datetime | M | Thời gian tạo giao dịch tại PSP |
| signature | String | M | Chữ ký RSA-MD5 -- xác minh bằng khóa công khai của GLODIPAY |
Đối tượng fees
| buyer | Float | Số phí người mua phải trả |
| seller | Float | Số phí người bán phải trả |
| rolling | Float | Số tiền ký quỹ (rolling reserve) |
| operate | Float | Tổng phí vận hành (processor + GLODIPAY + đối tác) |
| estimationRollingReleaseAt | ISO 8601 datetime | Thời gian dự kiến giải tỏa tiền ký quỹ |
Đối tượng paymentMethodDetails
| displayName | String | Nhãn phương thức thanh toán |
| group | String | Loại nhóm phương thức thanh toán |
| family | String | Loại họ phương thức thanh toán |
| type | String | Loại phương thức thanh toán |
{type} | JSON | Tù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)
| name | Tên chủ thẻ |
| firstSixDigits | 6 số đầu của số thẻ (BIN) |
| lastFourDigits | 4 số cuối của số thẻ |
| expiryMonth | Tháng hết hạn (MM) |
| expiryYear | Năm hết hạn (YY) |
| type | Thương hiệu thẻ (visa, mastercard, amex, v.v.) |
| issuer | Tên ngân hàng phát hành (tùy thuộc vào nhà cung cấp) |
| issuerCountryCode | Mã 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) |
| funding | Loại nguồn tiền của thẻ (credit, debit, prepaid) (tùy thuộc vào nhà cung cấp) |
| authorizationCode | Mã ủ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) |
| checks | Kết quả xác minh AVS/CVC (tùy thuộc vào nhà cung cấp) |
| threeDSecure | Chi 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"
}
| returnCode | String | R | Phải là "100" để xác nhận đã nhận |
| description | String(1,1500) | O | Mô 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ó 3DS | 4111 1111 1111 1111 | 01/30 | 029 | — |
| Không có 3DS | 5555 5555 5555 4444 | 01/30 | 029 | — |
| Thanh toán 3DS | 4012 8888 8888 1881 | 01/30 | 029 | Thành công: 123456 / Thất bại: 111111 |
| Thanh toán 3DS | 5111 1111 1111 1118 | 01/30 | 029 | Thành công: 123456 / Thất bại: 111111 |
| Thanh toán 3DS | 4141 4141 4141 4141 | 12/30 | 123 | Thành công: 123456 / Thất bại: 111111 |
Phụ lục
Phương thức thanh toán (Payment Methods)
| card | Thẻ tín dụng hoặc thẻ ghi nợ |
| googlepay | Google Pay |
| applepay | Apple Pay |
| paypal | PayPal |
| ibanking_push | Chuyển khoản ngân hàng trực tuyến tức thì |
| local_bank_transfer | Chuyển tiền qua ngân hàng trong nước |
| wire_transfer | Chuyển tiền điện tử trực tiếp |
| wallet | Ví điện tử |
| alipay | Alipay |
| WeChat Pay | |
| skrill | Skrill |
| crypto | Tiền điện tử |
| APM | Tất cả phương thức trừ thẻ |
| ALL | Tất cả phương thức |
Chế độ kết nối (Connection Modes)
| DIRECT_POST | (Mặc định) Trình duyệt được chuyển hướng đến trang thanh toán ngay lập tức. |
| API | Trả về URL paymentLink trong phản hồi JSON. |
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.
| incomplete | Giao dịch đã khởi tạo, đang chờ hành động |
| pending | Đang chờ xác nhận thanh toán |
| under_review | Giao dịch đang được xem xét |
| successful | Thanh toán hoàn tất thành công |
| failed | Thanh toán thất bại |
| error | Đã xảy ra lỗi hệ thống |
| canceled | Giao dịch bị hủy |
| rejected | Giao dịch bị từ chối |
| expired | Giao dịch hết hạn |
| released | Tiền đã giải tỏa / thanh quyết toán |
| documents_uploaded | Tài liệu hỗ trợ đã tải lên |
| refund_initiated | Yêu cầu hoàn tiền đã khởi tạo |
| refund_under_review | Hoàn tiền đang xem xét |
| refund_successful | Hoàn tiền hoàn tất thành công |
| refund_failed | Hoàn tiền thất bại |
| refund_partially_successful | Hoàn tiền một phần thành công |
| refund_partially_failed | Hoàn tiền một phần thất bại |
| void_initiated | Việc hủy bỏ đã khởi tạo |
| void_under_review | Vi ệc hủy bỏ đang xem xét |
| void_successful | Việc hủy bỏ hoàn tất thành công |
| void_failed | Việc hủy bỏ thất bại |
| void_partially_successful | Việc hủy bỏ một phần thành công |
| void_partially_failed | Việc hủy bỏ một phần thất bại |
| chargeback_alert | Nhận được cảnh báo chargeback |
| chargebacked | Giao dịch đã bị chargeback |
| dispute | Tranh 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.
| 1 | incomplete | Giao dịch đã khởi tạo |
| 2 | pending | Đang chờ xác nhận |
| 3 | error | Lỗi hệ thống |
| 4 | failed | Thanh toán thất bại |
| 5 | under_review | Đang xem xét |
| 6 | successful | Thanh toán thành công |
| 7 | released | Đã giải tỏa / thanh quyết toán |
| 8 | refund_initiated | Hoàn tiền đã khởi tạo |
| 9 | refund_failed | Hoàn tiền thất bại |
| 10 | refund_under_review | Hoàn tiền đang xem xét |
| 11 | refund_successful | Hoàn tiền thành công |
| 12 | refund_partially_failed | Hoàn tiền một phần thất bại |
| 13 | refund_partially_successful | Hoàn tiền một phần thành công |
| 14 | canceled | Đã hủy |
| 15 | rejected | Bị từ chối |
| 16 | expired | Hết hạn |
| 17 | documents_uploaded | Tài liệu đã tải lên |
| 18 | void_initiated | Hủy bỏ đã khởi tạo |
| 19 | void_under_review | Hủy bỏ đang xem xét |
| 20 | void_successful | Hủy bỏ thành công |
| 21 | void_failed | Hủy bỏ thất bại |
| 22 | void_partially_successful | Hủy bỏ một phần thành công |
| 23 | void_partially_failed | Hủy bỏ một phần thất bại |
| 24 | chargeback_alert | Cảnh báo chargeback |
| 25 | chargebacked | Đã bị chargeback |
| 26 | dispute | Tranh 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.
| AD | Andorra |
| AE | United Arab Emirates |
| AF | Afghanistan |
| AG | Antigua and Barbuda |
| AI | Anguilla |
| AL | Albania |
| AM | Armenia |
| AO | Angola |
| AQ | Antarctica |
| AR | Argentina |
| AS | American Samoa |
| AT | Austria |
| AU | Australia |
| AW | Aruba |
| AX | Åland Islands |
| AZ | Azerbaijan |
| BA | Bosnia and Herzegovina |
| BB | Barbados |
| BD | Bangladesh |
| BE | Belgium |
| BF | Burkina Faso |
| BG | Bulgaria |
| BH | Bahrain |
| BI | Burundi |
| BJ | Benin |
| BL | Saint Barthélemy |
| BM | Bermuda |
| BN | Brunei Darussalam |
| BO | Bolivia, Plurinational State of |
| BQ | Bonaire, Sint Eustatius and Saba |
| BR | Brazil |
| BS | Bahamas |
| BT | Bhutan |
| BV | Bouvet Island |
| BW | Botswana |
| BY | Belarus |
| BZ | Belize |
| CA | Canada |
| CC | Cocos (Keeling) Islands |
| CD | Congo, Democratic Republic of the |
| CF | Central African Republic |
| CG | Congo |
| CH | Thụy Sĩ |
| CI | Côte d'Ivoire |
| CK | Cook Islands |
| CL | Chile |
| CM | Cameroon |
| CN | Trung Quốc |
| CO | Colombia |
| CR | Costa Rica |
| CU | Cuba |
| CV | Cabo Verde |
| CW | Curaçao |
| CX | Christmas Island |
| CY | Đảo Síp |
| CZ | Cộng hòa Séc |
| DE | Đức |
| DJ | Djibouti |
| DK | Đan Mạch |
| DM | Dominica |
| DO | Cộng hòa Dominica |
| DZ | Algeria |
| EC | Ecuador |
| EE | Estonia |
| EG | Ai Cập |
| EH | Tây Sahara |
| ER | Eritrea |
| ES | Tây Ban Nha |
| ET | Ethiopia |
| FI | Phần Lan |
| FJ | Fiji |
| FK | Quần đảo Falkland |
| FM | Micronesia |
| FO | Quần đảo Faroe |
| FR | Pháp |
| GA | Gabon |
| GB | Vương quốc Anh |
| GD | Grenada |
| GE | Georgia |
| GF | French Guiana |
| GG | Guernsey |
| GH | Ghana |
| GI | Gibraltar |
| GL | Greenland |
| GM | Gambia |
| GN | Guinea |
| GP | Guadeloupe |
| GQ | Guinea Xích đạo |
| GR | Hy Lạp |
| GS | Nam Georgia và Quần đảo Nam Sandwich |
| GT | Guatemala |
| GU | Guam |
| GW | Guinea-Bissau |
| GY | Guyana |
| HK | Hồng Kông |
| HM | Đảo Heard và Quần đảo McDonald |
| HN | Honduras |
| HR | Croatia |
| HT | Haiti |
| HU | Hungary |
| ID | Indonesia |
| IE | Ireland |
| IL | Israel |
| IM | Isle of Man |
| IN | Ấn Độ |
| IO | Lãnh thổ Ấn Độ Dương thuộc Anh |
| IQ | Iraq |
| IR | Iran |
| IS | Iceland |
| IT | Ý |
| JE | Jersey |
| JM | Jamaica |
| JO | Jordan |
| JP | Nhật Bản |
| KE | Kenya |
| KG | Kyrgyzstan |
| KH | Campuchia |
| KI | Kiribati |
| KM | Comoros |
| KN | Saint Kitts và Nevis |
| KP | Triều Tiên |
| KR | Hàn Quốc |
| KW | Kuwait |
| KY | Quần đảo Cayman |
| KZ | Kazakhstan |
| LA | Lào |
| LB | Lebanon |
| LC | Saint Lucia |
| LI | Liechtenstein |
| LK | Sri Lanka |
| LR | Liberia |
| LS | Lesotho |
| LT | Lithuania |
| LU | Luxembourg |
| LV | Latvia |
| LY | Libya |
| MA | Ma-rốc |
| MC | Monaco |
| MD | Moldova |
| ME | Montenegro |
| MF | Saint Martin (Pháp) |
| MG | Madagascar |
| MH | Quần đảo Marshall |
| MK | Bắc Macedonia |
| ML | Mali |
| MM | Myanmar |
| MN | Mông Cổ |
| MO | Ma Cao |
| MP | Quần đảo Bắc Mariana |
| MQ | Martinique |
| MR | Mauritania |
| MS | Montserrat |
| MT | Malta |
| MU | Mauritius |
| MV | Maldives |
| MW | Malawi |
| MX | Mexico |
| MY | Malaysia |
| MZ | Mozambique |
| NA | Namibia |
| NC | New Caledonia |
| NE | Niger |
| NF | Đảo Norfolk |
| NG | Nigeria |
| NI | Nicaragua |
| NL | Hà Lan |
| NO | Na Uy |
| NP | Nepal |
| NR | Nauru |
| NU | Niue |
| NZ | New Zealand |
| OM | Oman |
| PA | Panama |
| PE | Peru |
| PF | French Polynesia |
| PG | Papua New Guinea |
| PH | Philippines |
| PK | Pakistan |
| PL | Ba Lan |
| PM | Saint Pierre và Miquelon |
| PN | Pitcairn |
| PR | Puerto Rico |
| PS | Palestine |
| PT | Bồ Đào Nha |
| PW | Palau |
| PY | Paraguay |
| QA | Qatar |
| RE | Réunion |
| RO | Romania |
| RS | Serbia |
| RU | Nga |
| RW | Rwanda |
| SA | Ả Rập Xê-út |
| SB | Quần đảo Solomon |
| SC | Seychelles |
| SD | Sudan |
| SE | Thụy Điển |
| SG | Singapore |
| SH | Saint Helena |
| SI | Slovenia |
| SJ | Svalbard và Jan Mayen |
| SK | Slovakia |
| SL | Sierra Leone |
| SM | San Marino |
| SN | Senegal |
| SO | Somalia |
| SR | Suriname |
| SS | Nam Sudan |
| ST | Sao Tome và Principe |
| SV | El Salvador |
| SX | Sint Maarten (Hà Lan) |
| SY | Syria |
| SZ | Eswatini |
| TC | Quần đảo Turks và Caicos |
| TD | Chad |
| TF | French Southern Territories |
| TG | Togo |
| TH | Thái Lan |
| TJ | Tajikistan |
| TK | Tokelau |
| TL | Timor-Leste |
| TM | Turkmenistan |
| TN | Tunisia |
| TO | Tonga |
| TR | Thổ Nhĩ Kỳ |
| TT | Trinidad và Tobago |
| TV | Tuvalu |
| TW | Đài Loan |
| TZ | Tanzania |
| UA | Ukraine |
| UG | Uganda |
| UM | Lãnh thổ hải ngoại của Hoa Kỳ |
| US | Hoa Kỳ |
| UY | Uruguay |
| UZ | Uzbekistan |
| VA | Holy See |
| VC | Saint Vincent và Grenadines |
| VE | Venezuela |
| VG | Quần đảo Virgin (Anh) |
| VI | Quần đảo Virgin (Mỹ) |
| VN | Việt Nam |
| VU | Vanuatu |
| WF | Wallis và Futuna |
| WS | Samoa |
| YE | Yemen |
| YT | Mayotte |
| ZA | Nam Phi |
| ZM | Zambia |
| ZW | Zimbabwe |
Loại thẻ (Card Types)
| 1 | VISA | visa |
| 2 | MASTERCARD | mastercard |
| 3 | AMERICAN EXPRESS | amex |
| 4 | JCB | jcb |
| 5 | MAESTRO | maestro |
| 6 | DISCOVER | discover |
| 7 | UNION PAY | union-pay |
| 8 | DINERS | diners |
Ví dụ mã nguồn
PHP
<?php
function generateSignature(array $data, string $privateKeyStr): string
{
$key = openssl_pkey_get_private($privateKeyStr);
// Chỉ sắp xếp các khóa cấp cao nhất
ksort($data, SORT_NATURAL);
// Cắt bỏ khoảng trắng đệ quy
array_walk_recursive($data, function (&$v) {
$v = is_string($v) ? trim($v) : $v;
});
openssl_sign(json_encode($data), $signature, $key, 'md5WithRSAEncryption');
return base64_encode($signature);
}
function verifySignature(array $data, string $publicKeyStr): bool
{
$signature = $data['signature'];
unset($data['signature']);
ksort($data, SORT_NATURAL);
array_walk_recursive($data, function (&$v) {
$v = is_string($v) ? trim($v) : $v;
});
$key = openssl_pkey_get_public($publicKeyStr);
$result = openssl_verify(json_encode($data), base64_decode($signature), $key, 'md5WithRSAEncryption');
return $result === 1;
}
Node.js
// Save as script.mjs and run: node script.mjs
import { createSign } from 'crypto';
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');
}