支付
测试环境: https://api-onramp.stg.eopay.io/payment/create-api-on-ramp-payment
生产环境: https://api-onramp.eopay.io/payment/create-api-on-ramp-payment
请求参数
| 参数 | 是否必要 | 数据类型 | 描述 |
|---|---|---|---|
| type | y | string | ssoLogin。常量:'sso_login' |
| paymentType | y | string | 表明是卡支付 常量: 'card' |
| merchantId | y | string | 商户 onboarding 时注册的 id |
| orderUuid | y | string | 由创建 order 时 返回的 orderUUID 唯一订单 id |
| clientIp | y | string | 客户 IP |
| currency | y | string | 支付的法币币种 |
| issuerCountry | y | string | 支付的卡 的发卡国家 值: ISO-3166-1 alpha-2 code |
| successUrl | y | string | 客户在订单成功后自己决定要跳转的地址 |
| failureUrl | y | string | 客户在订单成功后自己决定要跳转的地址 |
| merchantEnable3DS | y | boolean | 是否强制开启 3d |
| cardInfo.cardNumber | y | string | 支付的卡号 |
| cardInfo.cardScheme | y | string | 卡组类型 Visa Master |
| cardInfo.cardType | y | string | 卡类型 默认: CREDIT |
| cardInfo.expiryMonth | y | string | 卡过期日期 月 |
| cardInfo.expiryYear | y | string | 卡过期日期 年 |
| cardInfo.cvv | y | string | 卡 cvv |
| billingAddress.addressLine1 | y | string | 持卡人地址 |
| billingAddress.city | y | string | 持卡人城市 |
| billingAddress.zip | y | string | 持卡人邮编 |
| billingAddress.country | y | string | 持卡人所在国家 |
| billingAddress.state | n | string | 对于美国和加拿大来说,需要填写州名(例如阿拉斯加、爱达荷州等)。使用 ISO 3166-2 分区代码。美国、加拿大 示例: US-AL |
| customer.id | y | string | 唯一客户来自商户系统。例如 sso_customer_id = “abc0000001 |
| customer.email | y | string | 客户邮件 |
| customer.name | y | string | 客户全名 first name 和last name 必须用空格隔开 示例: "Thomas Reed" |
| customer.phone.number | n | string | 客户手机号 |
| browserInfo.acceptHeader | n | string | 浏览器信息 |
| browserInfo.javaEnabled | n | string | 浏览器信息 |
| browserInfo.javaScriptEnabled | n | string | 浏览器信息 |
| browserInfo.language | n | string | 浏览器信息 |
| browserInfo.colorDepth | n | string | 浏览器信息 |
| browserInfo.screenHeight | n | string | 浏览器信息 |
| browserInfo.screenWidth | n | string | 浏览器信息 |
| browserInfo.timeZone | n | string | 浏览器信息 |
| browserInfo.userAgent | n | string | 浏览器信息 |
请求参数示例
{
"type": "sso_login",
"merchantId": "1",
"paymentType": "card",
"orderUuid": "6212f63f-c308-419b-81c3-bfa9cd14bec0",
"clientIp": "1.2.3.4",
"cardInfo": {
"cardNumber": "4242424242424242",
"cardScheme": "Visa",
"cardType": "CREDIT",
"expiryMonth": "12",
"expiryYear": "2012",
"cvv": 123
},
"currency": "USD",
"issuerCountry": "AD",
"billingAddress": {
"addressLine1": "hanghzou",
"city": "HANGZHOU",
"zip": "460000",
"country": "AD"
"state": "AL"
},
"successUrl": "https...ess",
"failureUrl": "https...rue",
"customer": {
"id": 1,
"email": "tester@paymentgateway-system.com",
"name": "cooper",
"phone": { "number": "123123123" }
},
"browserInfo": {
"acceptHeader": "text/html,application/xhtml+xml",
"javaEnabled": "FALSE",
"javaScriptEnabled": "TRUE",
"language": "zh-CN",
"colorDepth": 24,
"screenHeight": 1440,
"screenWidth": 2560,
"timeZone": "3",
"userAgent": "Mozil....36"
}
}
2d 支付成功响应示例
{
ok: true,
status: 200,
order: {
ssoOrderId: "TEST-f6ab5532",
orderUuid: "6212f63f-c308-419b-81c3-bfa9cd14bec0",
merchantId: 1,
fiatAmount: 10,
cryptoAmount: 10.00176,
processingFee: 1.5,
liquidityQuote: 1.0002,
cryptoId: 4,
currencyId: 108,
status: 5,
type: 0,
customerWalletId: 135,
},
"3ds": false,
"2dResponse": {
message: "APPROVED",
responseCode: 10000,
},
}
2d 支付失败响应示例
{
order: {
ssoOrderId: "API-TEST-NUVEI- TESTER-02",
orderUuid: "20fee2f5-edb5-4163-a94a-2d5819ad685e",
merchantId: 1,
fiatAmount: 10,
cryptoAmount: 8.5215,
processingFee: 1.48,
liquidityQuote: 1.0002,
cryptoId: 5,
currencyId: 108,
status: 6,
type: 0,
customerWalletId: 3669,
},
"3ds": false,
"2dResponse": {
message: "DECLINED",
responseCode: 30004,
},
}
订单状态在 2d 支付中的返回值说明
- SUCCESS : order status = 5
- ERROR: order status = 6 or order status = 16 :
3d 触发成功响应示例
{
status: 200,
order: {
ssoOrderId: "API-TEST-NUVEI- TESTER-03",
orderUuid: "d26a8fe8-236b-4804-aa8d-346fea79f8a9",
merchantId: 1,
fiatAmount: 150,
cryptoAmount: 142.245031,
processingFee: 7.78,
liquidityQuote: 1.0002,
cryptoId: 5,
currencyId: 108,
status: 17,
type: 0,
customerWalletId: 3669,
},
"3ds": true,
"3dResponse": {
acsUrl: "https://3dsn.sandbox.safecharge.com/ThreeDSACSEmulatorChallenge/api/ThreeDSACSChallengeController/ChallengePage?eyJub3RpZmljYXRpb25VUkwiOiJodHRwczovL2FwaS13ZWJob29rLnN0Zy5wZy5ibG9ja2RhbmNlLmlvL2FjcXVpcmVyL3dlYmhvb2svbnV2ZWkvdGhyZWUtZC1jaGFsbGVuZ2UtZG1uIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJkNDliNTRmZC0xMmNjLTQ4YTgtODE5Yy00NjgyYWZiZDNjMmQiLCJhY3NUcmFuc0lEIjoiYzA0ZGJiM2EtMDBmMC00ZmQ0LWJjZGQtY2VlMTI1YzgzZjYyIiwiZHNUcmFuc0lEIjoiN2MyZDkxMDktYWFmMi00MzhkLTgyZTktMTBiYTc1NGJlMmQ4IiwiZGF0YSI6bnVsbCwiTWVzc2FnZVZlcnNpb24iOiIyLjEuMCJ9",
cReq: "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImQ0OWI1NGZkLTEyY2MtNDhhOC04MTljLTQ2ODJhZmJkM2MyZCIsImFjc1RyYW5zSUQiOiJjMDRkYmIzYS0wMGYwLTRmZDQtYmNkZC1jZWUxMjVjODNmNjIiLCJjaGFsbGVuZ2VXaW5kb3dTaXplIjoiMDUiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIn0",
},
}
3d 响应值说明
提示
根据渠道不同 cReq 可能为空
cReq 为空时 可以直接跳转到 acsUrl
| 参数 | 数据类型 | 描述 |
|---|---|---|
3dResponse.acsUrl | string | 3d 请求域名信息 |
3dResponse.cReq | string | 3d 请求参数 |
前端集成 3d 流程
// making api call
const url = 'https://api-onramp.eopay.io/payment/create-api-on-ramp-payment'
const response = await fetch(url, {
method: 'POST',
body: JSON.stringify({...}),
headers: {
Authorization: 'Bearer jwt-token-returned-after-successful-login'
}
})
const data = await response.json()
// data would be like :
const res = {
"status":200,
"order": {
"ssoOrderId": "API-TEST-NUVEI- TESTER-03",
"orderUuid": "d26a8fe8-236b-4804-aa8d-346fea79f8a9",
"merchantId": 1,
"fiatAmount": 150,
"cryptoAmount": 142.245031,
"processingFee": 7.78,
"liquidityQuote": 1.0002,
"cryptoId": 5,
"currencyId": 108,
"status": 17,
"type": 0,
"customerWalletId": 3669
},
"3ds": true,
"3dResponse": {
"acsUrl": "https://3dsn.sandbox.safecharge.com/ThreeDSACSEmulatorChallenge/api/ThreeDSACSChallengeController/ChallengePage?eyJub3RpZmljYXRpb25VUkwiOiJodHRwczovL2FwaS13ZWJob29rLnN0Zy5wZy5ibG9ja2RhbmNlLmlvL2FjcXVpcmVyL3dlYmhvb2svbnV2ZWkvdGhyZWUtZC1jaGFsbGVuZ2UtZG1uIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJkNDliNTRmZC0xMmNjLTQ4YTgtODE5Yy00NjgyYWZiZDNjMmQiLCJhY3NUcmFuc0lEIjoiYzA0ZGJiM2EtMDBmMC00ZmQ0LWJjZGQtY2VlMTI1YzgzZjYyIiwiZHNUcmFuc0lEIjoiN2MyZDkxMDktYWFmMi00MzhkLTgyZTktMTBiYTc1NGJlMmQ4IiwiZGF0YSI6bnVsbCwiTWVzc2FnZVZlcnNpb24iOiIyLjEuMCJ9",
"cReq": "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImQ0OWI1NGZkLTEyY2MtNDhhOC04MTljLTQ2ODJhZmJkM2MyZCIsImFjc1RyYW5zSUQiOiJjMDRkYmIzYS0wMGYwLTRmZDQtYmNkZC1jZWUxMjVjODNmNjIiLCJjaGFsbGVuZ2VXaW5kb3dTaXplIjoiMDUiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIn0"
}
}
// auto submit 3DS Challenge Request
if (res.status === 200 && res['3ds']) {
try {
document.open()
document.write(
`<div style="visibility: hidden">
<form method="POST" action=` + res['3dResponse'].acsUrl + `>
<input type="area" id="creq" name="creq" value=` + res['3dResponse'].cReq + ` />
<input id='send-challenge' type="submit" value="proceed to issuer"/>
</form>
</div>`
)
document.close()
setTimeout(() => {
document.getElementById('send-challenge').click()
}, 100)
return
} catch (error) {
console.error('Error auto submit 3DS Challenge Request form :', error)
}
}
测试卡
2D
| MASTER | VISA | AMEX | DISCOVER | DINERS | CHINA UNION PAY |
|---|---|---|---|---|---|
| 5101081046006034 | 4761344136141390 | 375510513169537 | 6509821665351005 | 361253433727425 | 6221272566426206 |
| 5101084411423750 | 4761201381475297 | 375510288656924 | 6221267465440274 | 386009540225286 | 6233050545583578 |
3D
| 场景 | 测试金额 | 持卡人名称 | 卡号 |
|---|---|---|---|
| 无摩擦 | >=150 | FL-BRW1 | 4000020951595032 |
| 发起 3d | 151 | CL-BRW2 | 2221008123677736 |
| non-3DS | 10 | Jane Smith | 4000027891380961 |