联系业务人员开通平台帐号,获取接口参数(appKey、appSecret)
| 参数名称 | 示例 | 参数说明 |
| appKey | 24feuhdi2n2ebd | appKey |
| nonce | 1038343423 | 一个随机字符串 |
| sign | 346de23ueh2uwbduhru3heu3 | 签名,请查看签名方法 |
| timestamp | 1651052350742 | 时间戳(毫秒级) |
- 将所有非空参数及appSecret,按参数名升序排序。
- 用
key=value 方式拼接,多个用 & 连接。
- 对拼接后的整个字符串进行 小写32位MD5。
签名格式:
md5(key1=value1&key2=value2&...&keyN=valueN)
示例:
拼接前:
amount=1&appId=YTUvZeeOdx&appSecret=owfwFkDnlCuiUTYz&callbackUrl=http://127.0.0.1:8921/api/callback/test&itemId=100001&outOrderId=2975857684279803×tamp=20200717133601001&uuid=18898810602
MD5结果:
2f64566717836f1b62276519ac71aaf3
提示:
appSecret 仅用于签名,不要作为参数上传。
- 排序应为全字节升序,空值参数不参与签名。
- 常见签名失败原因:时间戳不一致、未加
appSecret、排序错误、空参数被用于签名等。
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"sort"
"strings"
)
// 构建签名字符串
func BuildSignString(params map[string]string, appSecret string) string {
keys := make([]string, 0)
for k, v := range params {
if v != "" {
keys = append(keys, k)
}
}
keys = append(keys, "appSecret")
sort.Strings(keys)
var list []string
for _, k := range keys {
var val string
if k == "appSecret" {
val = appSecret
} else {
val = params[k]
}
if val != "" {
list = append(list, fmt.Sprintf("%s=%s", k, val))
}
}
return strings.Join(list, "&")
}
func Md5Lower(s string) string {
h := md5.New()
h.Write([]byte(s))
return hex.EncodeToString(h.Sum(nil))
}
func main() {
params := map[string]string{
"amount": "1",
"appId": "YTUvZeeOdx",
"callbackUrl": "http://127.0.0.1:8921/api/callback/test",
"itemId": "100001",
"outOrderId": "2975857684279803",
"timestamp": "20200717133601001",
"uuid": "18898810602",
}
appSecret := "owfwFkDnlCuiUTYz"
signStr := BuildSignString(params, appSecret)
fmt.Println("待签名字符串:", signStr)
fmt.Println("MD5签名:", Md5Lower(signStr))
}
// md5 = "0.7"
use std::collections::BTreeMap;
use md5::{Md5, Digest};
// 将参数按名称升序拼接 & md5
fn build_sign_string<'a>(mut params: BTreeMap<&'a str, &'a str>, app_secret: &'a str) -> String {
params.insert("appSecret", app_secret);
params.iter()
.filter(|(_, v)| !v.is_empty())
.map(|(k, v)| format!("{}={}", k, v))
.collect::<Vec<_>>()
.join("&")
}
fn md5_lower(s: &str) -> String {
let mut hasher = Md5::new();
hasher.update(s.as_bytes());
format!("{:x}", hasher.finalize())
}
fn main() {
let mut params = BTreeMap::new();
params.insert("amount", "1");
params.insert("appId", "YTUvZeeOdx");
params.insert("callbackUrl", "http://127.0.0.1:8921/api/callback/test");
params.insert("itemId", "100001");
params.insert("outOrderId", "2975857684279803");
params.insert("timestamp", "20200717133601001");
params.insert("uuid", "18898810602");
let app_secret = "owfwFkDnlCuiUTYz";
let sign_str = build_sign_string(params, app_secret);
let sign = md5_lower(&sign_str);
println!("待签名字符串: {}", sign_str);
println!("MD5签名: {}", sign);
}
- 算法: AES/ECB/PKCS5Padding,无盐
- 密钥: appSecret
- 输入: base64编码的密文
示例:
- 密文:
jvU9Vaz67Gj+Xn/qlaXKHA==
- AES密钥:
uDMGUIodDeKcja0nDbIBzpfDJFIHld56
- 解密后:
110
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"fmt"
)
// 去除PKCS#7填充
func PKCS7Unpad(data []byte) []byte {
padlen := int(data[len(data)-1])
if padlen > len(data) {
return data
}
return data[:len(data)-padlen]
}
func AESDecryptBase64(ciphertextBase64, key string) (string, error) {
data, err := base64.StdEncoding.DecodeString(ciphertextBase64)
if err != nil {
return "", err
}
// 密钥长度应为 16/24/32
block, err := aes.NewCipher([]byte(key))
if err != nil {
return "", err
}
if len(data)%aes.BlockSize != 0 {
return "", fmt.Errorf("密文不是块大小的倍数")
}
decrypted := make([]byte, len(data))
mode := newECBDecrypter(block)
mode.CryptBlocks(decrypted, data)
decrypted = PKCS7Unpad(decrypted)
return string(decrypted), nil
}
// -------- 下面是 ECB mode 支持 --------------
type ecb struct{ b cipher.Block }
type ecbDecrypter ecb
func newECBDecrypter(b cipher.Block) cipher.BlockMode {
return (*ecbDecrypter)(&ecb{b})
}
func (x *ecbDecrypter) BlockSize() int { return x.b.BlockSize() }
func (x *ecbDecrypter) CryptBlocks(dst, src []byte) {
bs := x.b.BlockSize()
for len(src) > 0 {
x.b.Decrypt(dst[:bs], src[:bs])
src = src[bs:]
dst = dst[bs:]
}
}
func main() {
encrypted := "U88v0HHTLxUp9LUkj95AJA=="
key := "sBOvCZZurSbbdJiA" // 16字节
plain, err := AESDecryptBase64(encrypted, key)
if err != nil {
fmt.Println("解密失败:", err)
} else {
fmt.Println("解密结果:", plain)
}
}
// aes = "0.8"
// block-modes = "0.9"
// block-padding = "0.3"
// base64 = "0.21"
use aes::Aes128;
use block_modes::{BlockMode, Ecb};
use block_modes::block_padding::Pkcs7;
use base64::{engine::general_purpose, Engine as _};
/// AES/ECB/PKCS5Padding 解密(Base64输入)
/// Java 兼容:Cipher.getInstance("AES/ECB/PKCS5Padding")
fn aes_ecb_decrypt_base64(cipher_base64: &str, key: &str) -> Result<String, Box<dyn std::error::Error>> {
let cipher_bytes = general_purpose::STANDARD.decode(cipher_base64)?;
let key_bytes = key.as_bytes();
if !matches!(key_bytes.len(), 16 | 24 | 32) {
return Err("密钥长度必须为 16 / 24 / 32 字节".into());
}
let cipher = Ecb::<Aes128, Pkcs7>::new_from_slices(key_bytes, &[])?;
let decrypted = cipher.decrypt_vec(&cipher_bytes)?;
Ok(String::from_utf8(decrypted)?)
}
fn main() {
let encrypted = "jvU9Vaz67Gj+Xn/qlaXKHA==";
let key = "uDMGUIodDeKcja0nDbIBzpfDJFIHld56"; // 32 字节 → AES-256
match aes_ecb_decrypt_base64(encrypted, key) {
Ok(plain) => println!("解密结果: {}", plain),
Err(e) => println!("解密失败: {}", e),
}
}
查看KYC申请状态
POST ${baseUrl}/api/card/kyc/query
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| orderNo | 否 | string | 平台订单号 |
| merOrderNo | 否 | string | 商家订单号 |
{
"data": {
"cardNumber": "1234567891234567",
"completeTime": "",
"createTime": "2023-04-02 17:07:09",
"ext": "",
"merOrderNo": "345342352343",
"orderNo": "4534234363464342",
"failReason": "",
"status": 0
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | jsonArray | 响应数据 | 产品类型列表 |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功(true成功/false失败) | |
| 参数名称 | 示例 | 参数说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| cardNumber | 1234567891234567 | 申请成功的卡号/卡ID |
| status | 0 | 状态:1-处理中 2-成功 3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| failReason | 资料信息错误 | 可能为空,失败时有明确原因返回 |
| ext | | 订单额外信息,预留字段 |
| 状态码 | 描述 |
| 200 | 成功 |
| 500 | 失败 |
| 5201 | 订单不存在 |
当 KYC 状态发生变更时,平台会通知状态并返回申请卡号。
由申请接口提供具体请求地址。
POST
Content-Type: application/json
| 参数名称 | 必填 | 示例 | 参数说明 |
| orderNo | 是 | 1448538596381429760 | 平台订单号 |
| merOrderNo | 是 | 1448535323381429760 | 接入方订单号 |
| cardNumber | 否 | 1448535323381429760 | 卡号/卡ID(申请成功返回) |
| status | 是 | 3 | 订单状态(1-处理中,2-成功,3-失败) |
| completeTime | 是 | 20220331121212 | 订单完成时间 |
| createTime | 是 | 20220331121212 | 订单创建时间 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
| ext | 否 | {“settleAmount”:10} | 依据订单类型返回,预留字段 |
| failReason | 否 | 资料信息错误 | 失败时返回明确失败原因 |
body 内容为字符串:
ok
如果未按要求返回 ok,平台将视为推送失败,并将按照指数退避(Exponential Backoff)策略进行重试:
- 首次失败后,1 分钟后重试,后续每次重试间隔时间翻倍(2、4、8、16 分钟),共推送 5 次。
- 若 5 次仍未成功,将在 10 分钟后再次进行重试。
- 只有返回字符串
ok 表示推送成功,平台才会停止重试。
MASTER-E 卡的 KYC 提交
POST ${baseUrl}/api/card/kyc/apply/master/E
Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| merOrderNo | 是 | string | 商家订单号 |
| cardNumber | 否 | string | 需要KYC的卡号,请与商务沟通后再使用此字段 |
| notifyUrl | 否 | string | 不为空则状态有变更则通知 |
| firstName | 是 | string | 持卡人中文名 |
| lastName | 是 | string | 持卡人英文姓 |
| firstNameEn | 是 | string | 持卡人英文名 |
| lastNameEN | 是 | string | 持卡人英文姓 |
| countryCode | 是 | string | 国家区号,例如86 |
| phone | 是 | string | 手机号码,同时为收货电话 |
| email | 是 | string | 电子邮箱 |
| address | 是 | string | 住宅地址,同时为收货地址 |
| certType | 是 | string | 证件类型,0-身份证,-1-护照 |
| idNumber | 是 | string | 身份证号/护照号 |
| idExpiryDate | 是 | string | 证件有效期止,格式为yyyy-MM-dd,如2015-01-01 |
| country | 是 | string | 国籍,例如156 |
| birthday | 是 | string | 出生日期,格式为yyyy-MM-dd,如2015-01-01 |
| annualIncome | 是 | string | 年收入,单位为万元,按港币计算 |
| occupation | 是 | string | 职业,参考下方“职业”字典 |
| position | 是 | string | 职位,参考下方“职位”字典 |
| faceImage | 否 | string | base64身份证正面(证件类型为大陆身份证/香港永久身份证时必填)该字段不参与签名 |
| backImage | 否 | string | base64身份证反面(证件类型为大陆身份证/香港永久身份证时必填)该字段不参与签名 |
| passImage | 否 | string | base64护照页照片(证件类型为护照时必填)该字段不参与签名 |
| signImage | 否 | string | base64手写签名,建议提交,该字段不参与签名 |
{
"data": {
"completeTime": "",
"createTime": "2023-04-23 20:08:35",
"ext": "",
"merOrderNo": "230423200834215712",
"orderNo": "230423200835147904",
"status": 1
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 数据类型 |
| data | jsonObject | 响应数据 | 见下方说明 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | boolean |
| 参数名 | 示例 | 说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| status | 1 | 订单状态:1-处理中,2-成功,3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息 |
| 值 | 描述 |
| 1 | Account manage |
| 2 | Senior management |
| 3 | Boss |
| 值 | 职业 |
| 1 | Actor |
| 2 | Aircraft Mechanic |
| 3 | Book Author |
| 4 | Businessmen |
| 5 | Cashier |
| 6 | Cleaner |
| 7 | Dancer |
| 8 | Dentist |
| 9 | Fireman |
| 10 | Housewife |
| 11 | Journalist |
| 12 | Medical |
| 13 | Assistant |
| 14 | Musician |
| 15 | Teacher |
| 16 | Painter |
| 17 | Policeman |
VISA-H KYC 认证接口
${baseUrl}/api/card/kyc/apply/visa/H
- 方法:
POST
- Content-Type:
application/json
| 参数名 | 必选 | 类型 | 说明 |
| merOrderNo | 是 | string | 商家订单号 |
| cardNumber | 否 | string | 卡号,在已知卡号的情况下可以使用 |
| notifyUrl | 否 | string | 不为空时状态变更将通知该地址 |
| firstName | 是 | string | 英文名 |
| lastName | 是 | string | 英文姓 |
| countryCode | 是 | string | 手机区号,例如86 |
| phone | 是 | string | 手机号码 |
| email | 是 | string | 电子邮箱 |
| line1 | 是 | string | 现居住地址-门牌号 |
| line2 | 是 | string | 现居住地址-街道 |
| line3 | 是 | string | 现居住地址-区 |
| postalCode | 是 | string | 现居住地址-邮编 |
| city | 是 | string | 现居住地址-城市 |
| addressCountry | 是 | string | 现居住地址-国家,例如156 |
| deliveryLine1 | 是 | string | 快递地址-门牌号 |
| deliveryLine2 | 是 | string | 快递地址-街道 |
| deliveryLine3 | 是 | string | 快递地址-区 |
| deliveryPostalCode | 是 | string | 快递地址-邮编 |
| deliveryCity | 是 | string | 快递地址-城市 |
| deliveryCountry | 是 | string | 快递地址-国家,例如156 |
| certType | 是 | string | 证件类型,0-身份证 1-护照 |
| country | 是 | string | 证件国籍,例如156 |
| idNumber | 是 | string | 证件号 |
| idIssuanceDate | 是 | string | 证件签发日期,格式yyyy-MM-dd |
| idExpiryDate | 是 | string | 证件有效日期,格式yyyy-MM-dd,若为长期有效填2099-12-31 |
| faceImage | 否 | string | base64身份证正面(证件类型为大陆身份证/香港永久身份证时必填,此字段不参与签名) |
| backImage | 否 | string | base64身份证反面(证件类型为大陆身份证/香港永久身份证时必填,此字段不参与签名) |
| passImage | 否 | string | base64护照页照片(证件类型为护照时必填,此字段不参与签名) |
{
"data": {
"completeTime": "",
"createTime": "2023-04-23 20:08:35",
"ext": "",
"merOrderNo": "230423200834215712",
"orderNo": "230423200835147904",
"status": 1
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 |
| data | jsonArray | 响应数据,见下表订单信息 |
| msg | 操作成功 | 响应消息 |
| status | 200 | 响应码 |
| success | true | 是否成功,成功true,失败false |
| 参数名 | 示例 | 说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| status | 1 | 订单状态:1-处理中 2-成功 3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息,预留字段 |
此处 KYC 理解为开卡接口。
开卡成功会返回一个卡号。
注意:如未提交 firstRecharge,开卡会默认扣除 10 USD,且发卡系统默认会为卡充值 10 USD。
${baseUrl}/api/card/kyc/apply/virtual/L
${baseUrl}/api/card/kyc/apply/virtual/L/en
- Method : POST
- Content-Type : application/json
| 参数名 | 必填 | 类型 | 说明 |
| merOrderNo | 是 | string | 商家订单号 |
| notifyUrl | 否 | string | 若有值,当申请状态有变更时会通知,详见通知说明 |
| cardType | 是 | string | 需要申请的卡种,如 VISA、MASTER,通过卡头获取对应卡种 |
| businessScene | 是 | string | 业务类型,如电商消费,通过卡头获取 |
| cardArea | 是 | string | 发行区域,如中国香港,通过卡头获取 |
| firstRecharge | 否 | string | 首充金额,如 11,默认为 10,提交值需为不小于 10 的整数,首充后金额会充入卡,并扣除相应备用金 |
| cardHeader | 否 | string | 卡头,如 493193,通过卡头获取。不指定则随机分配 |
| firstName | 否 | string | 英文名(只能为英文字符) |
| lastName | 否 | string | 英文姓(只能为英文字符) |
| email | 否 | string | 电子邮箱 |
| birthday | 否 | string | 出生日期,格式为 yyyy-MM-dd |
{
"data": {
"completeTime":"",
"createTime":"2023-04-23 20:08:35",
"ext":"",
"merOrderNo":"230423200834215712",
"orderNo":"230423200835147904",
"status":1
},
"msg":"操作成功",
"status":200,
"success":true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | jsonArray | 响应数据,订单信息 | 见下表 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true/false | bool |
| 参数名 | 示例 | 说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| status | 1 | 订单状态:1-处理中,2-成功,3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息,预留字段 |
开卡接口
注意:firstRecharge 默认为10,可以为0则开卡没有首充
${baseUrl}/api/card/kyc/apply/virtual/P
- Method: POST
- Content-Type: application/json
| 参数名 | 必填 | 类型 | 说明 |
| merOrderNo | 是 | string | 商家订单号 |
| notifyUrl | 否 | string | 若有值,申请状态有变更时会通知,详见通知说明 |
| cardBin | 是 | string | 卡头 |
| firstRecharge | 否 | string | 最多两位小数,提交后会首充金额按提交金额进行首充,并扣除对应金额备用金 |
| phoneCode | 否 | string | 手机区号 |
| phone | 否 | string | 手机号 |
| email | 是 | string | 邮箱 |
| firstName | 否 | string | 名,仅允许英文,firstName和lastName合计长度不得超过32位 |
| lastName | 否 | string | 姓,仅允许英文,firstName和lastName合计长度不得超过32位 |
| dateOfBirth | 否 | string | 出生年月,格式为 yyyy-MM-dd |
| country | 否 | string | 国家,根据卡bin对应发行国家,ISO 3166-1 alpha-2;例:US |
| state | 否 | string | 州/省,如为美国或加拿大为必填,需用两字母代码表示,如WA,若留空则随机生成 |
| city | 否 | string | 城市,例如 New York |
| addressLine2 | 否 | string | 地址2 |
| addressLine1 | 否 | string | 地址1 |
| postalCode | 否 | string | 邮编 |
{
"data": {
"cardNumber": "",
"completeTime": "",
"createTime": "2024-08-29 12:56:36",
"ext": "",
"merOrderNo": "100007893",
"orderNo": "240829125636170528",
"status": 1
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | jsonArray | 响应数据,订单信息 | 见下表 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功,true/false | bool |
| 参数名 | 示例 | 说明 |
| merOrderNo | 100007893 | 商家订单号 |
| orderNo | 240829125636170528 | 平台订单号 |
| status | 1 | 订单状态:1-处理中,2-成功,3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息,预留字段 |
用于为卡片充值余额。
| 日期 | 内容 | 详细说明 |
| 2025-06-30 | 最低充值限额 | 实体卡最低限额200,虚拟卡最低限额20 |
${baseUrl}/api/card/top/up
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| merOrderNo | 是 | string | 渠道订单号 |
| cardNumber | 是 | string | 卡号/账户 |
| amount | 是 | string | 金额(最多支持两位小数,直接截取;不同卡片增值不同货币) |
| notifyUrl | 否 | string | 订单通知地址,不为空时处理完成后通知此地址 |
| ext | 否 | string | 预留字段,处理特殊业务 |
{
"data": {
"cardNumber": "6244810070000117",
"completeTime": "",
"createTime": "2023-04-02 17:07:09",
"ext": "",
"merOrderNo": "345342352343",
"orderNo": "4534234363464342",
"settleAmount": "20.00",
"status": 0
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 备注 |
| data | 见下表 | 响应数据,订单信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | bool |
| 参数名 | 示例 | 说明 |
| merOrderNo | 436343534234 | 渠道订单号 |
| cardNumber | 6244810070000117 | 卡号 |
| orderNo | 35432346345345 | 平台订单号 |
| settleAmount | 20.00 | 结算金额,最多两位小数,若大于2位小数则舍去(如2.123则为2.12) |
| status | 1 | 订单状态:1-处理中,2-成功,3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息,预留字段 |
| 状态码 | 描述 |
| 200 | 成功 |
| 500 | 失败(需要查询订单确认) |
| 5000 | 操作异常(需查询订单确认) |
| 5101 | 请勿重复下单 |
| 5102 | 备用金余额不足 |
用于查询提交的充值订单。
${baseUrl}/api/card/top/up/query
- 方法:POST
- Content-Type: application/json
| 参数名 | 必填 | 类型 | 说明 |
| orderNo | 否 | string | 平台订单号,不为空时仅用此字段查询 |
| merOrderNo | 否 | string | 渠道订单号 |
{
"data": {
"amount": "20",
"cardNumber": "6244810070000117",
"completeTime": "",
"createTime": "2023-04-02 17:07:09",
"ext": "",
"merOrderNo": "345342352343",
"orderNo": "4534234363464342",
"settleAmount": "20.00",
"status": 0
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | 见下表 | 响应数据,订单信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true 或 false) | bool |
| 参数名 | 示例 | 说明 |
| merOrderNo | 436343534234 | 渠道订单号 |
| cardNumber | 6244810070000117 | 卡号 |
| orderNo | 35432346345345 | 平台订单号 |
| amount | 20.00 | 充值金额 |
| settleAmount | 20.00 | 结算金额 |
| status | 0 | 订单状态:1-处理中 2-成功 3-失败 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息(预留字段) |
| 状态码 | 描述 |
| 200 | 成功 |
| 500 | 失败 |
| 5201 | 订单不存在 |
当充值订单完成后,如果提交订单时填写了通知地址(notifyUrl),平台会向该地址发送通知请求。
- 接口地址:由订单接口中的
notifyUrl 参数决定
- 请求方式:POST
- Content-Type:application/json
| 参数名称 | 必填 | 示例 | 说明 |
| orderNo | 是 | 1448538596381429760 | 平台订单号 |
| merOrderNo | 是 | 1448535323381429760 | 商户订单号 |
| status | 是 | 3 | 订单状态:1-处理中,2-成功,3-失败 |
| failReason | 否 | 处理失败 | 失败原因,仅在status=3时可能有 |
| completeTime | 是 | 20220331121212 | 订单完成时间 |
| createTime | 是 | 20220331121212 | 订单创建时间 |
| settleAmount | 是 | 20 | 结算金额 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
| ext | 否 | “” | 订单额外信息,预留字段 |
接口返回内容需为字符串:ok
ok
- 如果接口未按要求返回
ok,平台会认定为推送失败。
- 推送失败时,采用指数退避重试机制:
- 首次失败后,每隔 1分钟 重试一次,连续重试最多 5次 (即共6次)。
- 如果仍未收到正确响应,则在最后一次失败后 10分钟 后再次进行推送。
- 若依然失败,平台会停止进一步自动推送,请及时排查并手动处理相关通知。
查询卡片基本信息(包括余额)
${baseUrl}/op/card/E/info
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": {
"available": 0,
"availableLimit": 0,
"balance": 0,
"cardLimit": 0,
"cardNo": "4242424242459888",
"dailyAtmLimit": 0,
"dailyPurchaseLimit": 0,
"embossedName": "HUIBIN HUANG",
"expiryMonth": "12",
"expiryYear": "23",
"status": 3
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | 见下表 | 响应数据(卡信息) | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | bool |
| 参数名 | 示例 | 说明 |
| cardNo | 1234567891234567 | 卡号(16位) |
| embossedName | HUANG BINBIN | 持卡人姓名 |
| status | 3 | 卡状态:1-新卡;2-已分配;3-已激活;4-已失效/已注销;5-已挂失 |
| expiryMonth | 12 | 有效期(月) |
| expiryYear | 2027 | 有效期(年) |
| cardLimit | 20 | 卡片限额 |
| dailyAtmLimit | 2300 | 每日ATM限额 |
| dailyPurchaseLimit | 234 | 每日消费限额 |
| availableLimit | 399 | 可用限额 |
| balance | 1000 | 余额 |
| available | 200 | 可用余额 |
用于卡片挂失、解挂。
- 挂失:
${baseUrl}/op/card/E/lock
- 解挂:
${baseUrl}/op/card/E/un/lock
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": {
"availableLimit": 0,
"cardLimit": 0,
"cardNo": "4242424242459888",
"dailyAtmLimit": 0,
"dailyPurchaseLimit": 0,
"expiryMonth": "12",
"expiryYear": "23",
"status": 3
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | 见下表 | 响应数据(卡片信息) | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | bool |
| 参数名 | 示例 | 说明 |
| cardNo | 1234567891234567 | 卡号(16位) |
| status | 3 | 卡片状态(1: 新卡,2: 已分配, 3: 已激活,4:已失效/已注销,5: 已挂失) |
| expiryMonth | 12 | 有效期(月) |
| expiryYear | 2027 | 有效期(年) |
| cardLimit | 20 | 限额 |
| dailyAtmLimit | 2300 | 每日ATM限额 |
| dailyPurchaseLimit | 234 | 每日消费限额 |
| availableLimit | 399 | 可用限额 |
用于修改或设置ATM密码,PIN(密码)使用AES加密传输,保障安全性。
- 安全设置(PIN加密):
${baseUrl}/op/card/E/change/pin/secure
- 普通设置(PIN明文):
${baseUrl}/op/card/E/change/pin
- 方法:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| pin | 是 | string | 6位数字PIN,secure接口需AES加密,普通接口为明文 |
{
"data": "succeed",
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | succeed | 响应数据 | string |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true成功,false失败 | bool |
用于修改卡片每日的消费限额和ATM限额。
${baseUrl}/op/card/E/set/daily/limit
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| dailyPurchaseLimit | 是 | int | 消费每日限额 |
| dailyAtmLimit | 是 | int | ATM每日限额 |
{
"data": {
"availableLimit": "0",
"cardLimit": "0",
"dailyAtmLimit": "100",
"dailyPurchaseLimit": "100",
"embossedName": "HUIBIN HUANG",
"expiryMonth": "12",
"expiryYear": "23"
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | 见下表 | 响应数据(卡片信息) | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true 为成功,false 为失败 | bool |
| 参数名 | 示例 | 说明 |
| embossedName | HUANG BINBIN | 持卡人名字 |
| expiryMonth | 12 | 有效期-月 |
| expiryYear | 2027 | 有效期-年 |
| cardLimit | 20 | 卡片总限额 |
| dailyAtmLimit | 2300 | 每日ATM限额 |
| dailyPurchaseLimit | 234 | 每日消费限额 |
| availableLimit | 399 | 可用限额 |
用于查询卡片的交易记录。
${baseUrl}/op/card/E/transaction
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| pageSize | 是 | string | 数量 |
| dateRangeFrom | 否 | string | 起始时间,格式yyyy-MM-dd |
| dateRangeTo | 否 | string | 结束时间,格式yyyy-MM-dd |
{
"data": [
{
"amount": "10",
"cardAccountId": "938b56b2-3437-4295-8393-b5e407504c39",
"cardEmbossedName": "",
"cardId": "",
"cardLast4": "",
"createdAt": "2023-12-13T06:52:55.919Z",
"currency": "HKD",
"description": "增值",
"entryType": "DEBIT",
"id": "bb5bbae7-d987-4983-bf75-01b90c8e0f3f",
"intent": "transfer",
"merchant": "{\"country\":\"\",\"name\":\"\",\"mcc\":\"\",\"category\":\"\"}",
"refId": "CTNAUG5382",
"status": "posted"
},
{
"amount": "500",
"cardAccountId": "938b56b2-3437-4295-8393-b5e407504c39",
"cardEmbossedName": "",
"cardId": "",
"cardLast4": "",
"createdAt": "2023-12-13T03:30:50.390Z",
"currency": "HKD",
"description": "CREDIT BALANCE ADJUSTMENT",
"entryType": "CREDIT",
"id": "da8295d2-df35-4c61-b7df-85ea8e740b51",
"intent": "topup",
"merchant": "{\"country\":\"\",\"name\":\"\",\"mcc\":\"\",\"category\":\"\"}",
"refId": "CTD8U71NPV",
"status": "posted"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 参数说明 | 类型 |
| data | 见下表 | 响应数据(交易列表) | array |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true 成功,false 失败 | bool |
| 参数名 | 示例 | 说明 |
| amount | 23434 | 金额 |
| cardAccountId | 17c17176-7bfe-4c1e-8bb4-b51f0524d76a | 卡账号ID |
| cardEmbossedName | HUIB | 卡个性名 |
| cardId | 17c17176-7bfe-4c1e-8bb4-b51f0 | 卡ID |
| cardLast4 | 8922 | 卡后4位 |
| createdAt | 2023-02-26T22:23:26.103Z | 交易创建日期 |
| currency | HKD | 币种 |
| description | TOP UP | 描述 |
| entryType | CREDIT | 类型:CREDIT-入账,DEBIT-出账 |
| intent | topup | 交易目的/方式:charge-收费、refund-退款、topup/transfer-充值、repay-偿还、cashback-现金返回、interest-利息、fee-费用、other-其他 |
| status | posted | 状态:pending-待处理,posted-已完成,declined-已拒绝,void-已取消 |
用于查询卡片的交易记录,支持分页查询。
- 第一次查询时不传
pageToken
- 查询返回后,如果返回了
nextPageToken、prevPageToken,可根据这些 token 翻页再次查询
${baseUrl}/op/card/E/transaction/page
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| pageToken | 否 | string | 页码 token,第一次不传,翻页时使用返回的 token |
| pageSize | 是 | string | 每页条数 |
| dateRangeFrom | 否 | string | 起始时间,格式 yyyy-MM-dd |
| dateRangeTo | 否 | string | 结束时间,格式 yyyy-MM-dd |
{
"data": {
"nextPageToken": "eyJpZCI6IjZhNTExYmRiLTU0NmItNGM4Mi1iOGI0LWY5Yzc1NGJlMmI4OSIsInBhZ2VTaXplIjozLCJjdXJyZW50IjoyLCJkaXJlY3Rpb24iOiJuZXh0In0=",
"prevPageToken": "",
"transactions": [
{
"amount": "2",
"cardAccountId": "938b56b2-3437-4295-8393-b5e407504c39",
"cardEmbossedName": "",
"cardId": "",
"cardLast4": "",
"createdAt": "2024-04-17 14:23:00",
"currency": "HKD",
"description": "增值",
"entryType": "DEBIT",
"id": "885d2247-27a8-4405-9db6-e5031d44e6fc",
"intent": "transfer",
"merchant": "{\"country\":\"\",\"name\":\"\",\"mcc\":\"\",\"category\":\"\"}",
"refId": "CT156Z3CV6",
"status": "posted",
"xid": "accttrans_1780482111940837376"
},
{
"amount": "22",
"cardAccountId": "938b56b2-3437-4295-8393-b5e407504c39",
"cardEmbossedName": "",
"cardId": "",
"cardLast4": "",
"createdAt": "2024-03-19 18:56:38",
"currency": "HKD",
"description": "test",
"entryType": "DEBIT",
"id": "942a75ad-acf2-4718-b7ce-3b46a71f3804",
"intent": "transfer",
"merchant": "{\"country\":\"\",\"name\":\"\",\"mcc\":\"\",\"category\":\"\"}",
"refId": "CTB7R765KX",
"status": "posted",
"xid": "accttranstest_1770039366362087424"
},
{
"amount": "11",
"cardAccountId": "938b56b2-3437-4295-8393-b5e407504c39",
"cardEmbossedName": "",
"cardId": "",
"cardLast4": "",
"createdAt": "2024-03-19 16:09:07",
"currency": "HKD",
"description": "test20240319",
"entryType": "DEBIT",
"id": "6a511bdb-546b-4c82-b8b4-f9c754be2b89",
"intent": "transfer",
"merchant": "{\"country\":\"\",\"name\":\"\",\"mcc\":\"\",\"category\":\"\"}",
"refId": "CTJ4NT62GR",
"status": "posted",
"xid": "accttrans_1769997341692542976"
}
]
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名 | 示例 | 说明 | 类型 |
| data | 见下表 | 响应数据 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功,true为成功,false为失败 | bool |
| 参数名 | 示例 | 说明 |
| nextPageToken | dhd2e293jei3hr32he839jdi3nd30-skj | 下一页token |
| prevPageToken | dhd2e293jei3hr32he839jdi3nd30 | 上一页token |
| transactions | Array | 交易记录列表 |
| 参数名 | 示例 | 说明 |
| amount | 23434 | 金额 |
| cardAccountId | 17c17176-7bfe-4c1e-8bb4-b51f0524d76a | 卡账户ID |
| cardEmbossedName | HUIB | 卡个性名 |
| cardId | 17c17176-7bfe-4c1e-8bb4-b51f0 | 卡ID |
| cardLast4 | 8922 | 卡号后4位 |
| createdAt | 2023-02-26T22:23:26.103Z | 交易创建日期 |
| currency | HKD | 币种 |
| description | TOP UP | 描述 |
| entryType | CREDIT | 类型,CREDIT入账,DEBIT出账 |
| intent | topup | 交易类型:charge收费、refund退款、topup/transfer充值、repay偿还、cashback现金返还、interest利息、fee费用、other其他 |
| status | posted | 交易状态:pending待处理,posted已完成,declined已拒绝,void已取消 |
说明:
- 如果交易状态为 posted(Cleared),原交易记录状态保持不变,退款会新增一条交易记录。
- 如果交易状态为 pending(Locked),该记录会变为 void,并退还额度给客户,不会再有一条退款(Refund)记录。
卡信息及余额查询
| 变更时间 | 变更内容 |
| 2025-04-23 | 返回增加 status 字段 |
${baseUrl}/op/card/H/balance
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": {
"availableCredit": 123,
"currentBillingEndDate": 1724342400000,
"cvv": "WBM3cgTCXY2Yt6ARQ82IVQ==",
"expiry": "202707",
"overallCreditLimit": 123,
"panFirst6": "451888",
"panLast4": "0229",
"status": "activated",
"totalBalance": 0
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 | data信息 |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功(true/false) | |
| 参数名称 | 示例 | 参数说明 |
| availableCredit | 11 | 可用信用额度 - 总余额,相当于 overallCreditLimit + totalBalance |
| overallCreditLimit | 10 | 整体信用限额,当日增值总额会在此字段体现,T+1会转到 totalBalance |
| totalBalance | 11 | 总余额 |
| currentBillingEndDate | 1723824000000 | 当前账单结算时间 |
| expiry | 202707 | 有效期 |
| panFirst6 | 451888 | 卡号前6位 |
| panLast4 | 0229 | 卡号后4位 |
| status | activated | 卡状态 |
| cvv | WBM3cgTCXY2Yt6ARQ82IVQ== | CVV,使用密钥解密后使用,解密请参考相关解密文档 |
卡挂失、解挂操作
POST ${baseUrl}/op/card/H/lock — 挂失
POST ${baseUrl}/op/card/H/un/lock — 解挂
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据,是否成功 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true 成功,false 失败 | boolean |
用于修改或设置ATM密码,区别在于PIN需加密传输,更加安全。
原接口 ${baseUrl}/op/card/H/change/pin 已废弃。
${baseUrl}/op/card/H/change/pin/secure
- 方法:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| pin | 是 | string | 6位数PIN的加密值(请参考AES加密方式) |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | true | 响应数据,true-设置成功 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | boolean |
用于查询交易记录。
在每日24点前的充值记录,会在次日7点生成账单。
| 更新日期 | 更新内容 |
| 2024-10-16 | 增加返回 debitOrCreditFlag 字段 |
| 2024-10-16 | transactionSource 字典值更新 |
| 2025-03-26 | 查询条件增加 isAuthorization: 如果 isAuthorization=false,展示未结算流水;如为 true,展示已结算流水。客户消费的订单初始会在 false 列表,结算后进入 true 列表。 |
${baseUrl}/op/card/H/transactions
- 方法:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| offset | 是 | string | 偏移量,从0开始,例如0/10/20 |
| pageSize | 是 | string | 数量 |
| isAuthorization | 否 | int | 0:未结算订单,1:已结算订单 |
| creationTimeFrom | 是 | string | 起始时间,格式 yyyy-MM-dd |
| creationTimeTo | 是 | string | 结束时间,格式 yyyy-MM-dd |
{
"data": [
{
"amount": 10,
"creationTime": "2024-07-17T23:00:20.609Z",
"currency": "HKD",
"isATM": false,
"isAuthorization": false,
"isInCountry": true,
"isOnline": false,
"isPos": false,
"memo": "Repayment for order r-2342342422342343 (501)",
"reversal": false,
"settlementDate": "2024-07-18T00:00:00Z",
"transactionId": 1000001081427,
"transactionSource": "6",
"transactionType": "5",
"txCompleted": true,
"acquirerCurrency": "",
"acquirerAmount": 0,
"cardAcceptorName": ""
},
{
"amount": 11,
"creationTime": "2024-07-18T23:00:43.07Z",
"currency": "HKD",
"isATM": false,
"isAuthorization": false,
"isInCountry": true,
"isOnline": false,
"isPos": false,
"memo": "Repayment for order r-240718180106121536 (501)",
"reversal": false,
"settlementDate": "2024-07-19T00:00:00Z",
"transactionId": 1000001081883,
"transactionSource": "6",
"transactionType": "5",
"txCompleted": true,
"acquirerCurrency": "HKD",
"acquirerAmount": 235,
"cardAcceptorName": "AlipayHK*ALIPAY"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | jsonArray | 响应数据,见下表 | 交易记录 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:成功true,失败false | boolean |
| 参数名称 | 示例 | 参数说明 |
| amount | 23434 | 金额 |
| creationTime | 2024-07-17T23:00:20.609Z | 交易创建时间 |
| settlementDate | 2024-07-17T23:00:20.609Z | 结算时间 |
| currency | HKD | 币种 |
| acquirerCurrency | USD | 请求币种 |
| acquirerAmount | 23.1 | 请求金额 |
| cardAcceptorName | order r-2342342422342343 | 授权商户信息 |
| isATM | false | 是否ATM取现 |
| isAuthorization | false | 是否授权:true时amount金额为0,acquirerAmount为实际授权金额,结算后amount才会有值 |
| isInCountry | false | 是否本地国家 |
| isOnline | false | 是否线上 |
| isPos | false | 是否POS |
| memo | Repayment for order r-2342342422342343 (501) | 交易信息 |
| transactionId | 1000001081427 | 交易单号 |
| debitOrCreditFlag | D | D -> 扣账(减少) C -> 记账(增加) |
| transactionSource | 6 | 交易来源,见下方字典 |
| transactionType | 5 | 交易类型,见下方字典 |
| txCompleted | true | 是否完成,完成后,amount一开始为0的记录会生成实际结算金额 |
| 值 | 说明 | 描述 |
| 0 | unknown | |
| 1 | newAccount | 新建账户。 |
| 2 | cardSale | 新卡开卡。 |
| 3 | purchase | POS消费或线上消费,或移动端消费。 |
| 4 | refund | 退款至卡或钱包。 |
| 5 | account funding | TopUp 通过POS向钱包充值,币种支持与否均可。 |
| 6 | withdraw | 通过POS或ATM取款,或无需卡的银行转账操作等。 |
| 7 | balanceInquiry | 余额查询。 |
| 8 | p2p | 点对点转账。 |
| 9 | walletTransfer | 钱包之间转账。 |
| 10 | exchange | 货币兑换(买/卖方)。 |
| 11 | exchangeMargin | 不同币种间兑换差额。 |
| 12 | secondPresentment | 提交信息(如汇票等)。 |
| 13 | chargeback | 拒付处理。 |
| 14 | adjustment | 资金调整。 |
| 15 | exchangeAdjustment | 汇率调整。 |
| 16 | maintenance | 账户维护。 |
| 17 | chargeoff | 坏账核销。 |
| 18 | withholding | 优惠金/扣款保留。 |
| 19 | closeAccount | 账户关闭。 |
| 20 | reward | 奖励发放。 |
| 21 | shipping | 卡片发货(标准快递)。 |
| 22 | expeditedShipping | 卡片加急快递。 |
| 23 | addressing | 注册FPS快速支付ID。 |
| 24 | settlement | 结算。 |
| 25 | consolidated | 账户合并。 |
| 26 | interest | 利息发放。 |
| 27 | cashback | 返现。 |
| 28 | fee | 扣费。 |
| 29 | monthly fee | 月费。 |
| 30 | annual fee | 年费。 |
| 31 | fastFund | Visa即时到账。 |
| 32 | loadReversal | 充值撤销。 |
| 33 | expiry | 过期资金返还至最初出资方。 |
| 34 | moneyReceive | Mastercard快速到账。 |
| 35 | latePaymentFee | 逾期付款手续费。 |
| 值 | 说明 |
| 0 | Unknown |
| 1 | InWalletPOS |
| 2 | OutOfWalletPOS |
| 3 | InWalletATM |
| 4 | OutOfWalletATM |
| 5 | Online |
| 6 | Partner = TopUp |
| 7 | Customer |
| 8 | Internal |
| 9 | Static |
| 10 | MobileCommerce |
| 11 | OnUs |
| 12 | OutOfWalletOnline |
当客户线上消费时,会触发 OOB 推送,将相关信息展示给客户,并提供按钮让客户进行确认。此流程详见 Visa 官方文档。
- 接口地址:后台安全中心配置的接收地址
- 请求方式:POST
- Content-Type:application/json
| 参数名 | 必填 | 示例 | 说明 |
| data | 是 | JSON 字符串,参考下方内容 | 授权信息 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
data 字段参数说明及示例:
{
"cardNumber": "7662222584726493096",
"acsTransactionId": "41ce7a7d-9d57-4d87-b6e4-310acfa4b276",
"transactionInformation": [
{
"merchantName": "Amazon",
"purchaseAmount": "31.81",
"purchaseCurrency": "USD",
"purchaseDate": 1722212389000,
"merchantCountryCode": 840,
"acquirerMerchantID": "784959000762203",
"maskedPAN": "451888******8888"
}
],
"threeDsRequestorAppUrl": "",
"status": 1,
"createdDate": 1722212395829,
"lastModifiedDate": 1722212395829,
"expireDate": 1722212495829
}
| 字段名 | 示例 | 说明 |
| cardNumber | 7662222584726493096 | 卡号 |
| acsTransactionId | 41ce7a7d-9d57-xxx… | 交易流水号 |
| settlementDate | 2024-07-17T23:00:20.609Z | 结算时间 |
| status | 1 | 状态 |
| transactionInformation | 数组,见下表 | 交易信息 |
| createdDate | 1722212395829 | 创建时间 |
| lastModifiedDate | 1722212395829 | 最后更新时间 |
| expireDate | 1722212395829 | 过期时间 |
| 字段名 | 示例 | 说明 |
| merchantName | Amazon | 商户名称 |
| purchaseAmount | 31.81 | 金额 |
| purchaseCurrency | USD | 币种 |
| purchaseDate | 1722212389000 | 交易时间 |
| merchantCountryCode | 840 | 国家码 |
| acquirerMerchantID | 784959000762203 | 商户ID |
| maskedPAN | 451888******8888 | 卡号 |
| 数值 | 含义 |
| -3 | FAILED |
| -2 | CANCELLED |
| -1 | TIMEOUT |
| 1 | IN_PROGRESS |
| 2 | ACCEPTED |
| 3 | DECLINED |
body 内容为字符串:“ok”
ok
- 未按要求返回
ok,平台将视为推送失败。由于有时效性,失败的推送不会重试。
- 如果多次推送失败,请采用指数退避策略重试,即每次重试延迟的时间逐步增加,建议最大重试次数不超过 5 次。
当触发OOB时,用户收到OOB信息,由客户确认后提交处理动作。
${baseUrl}/op/card/H/oob
- Method:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| acsTransactionId | 是 | string | OOB的交易ID |
| reply | 是 | int | 回复动作,请提交:2-ACCEPTED,3-DECLINED |
{
"data": {
"confirmationStatus": 2
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | object | 响应数据 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | boolean |
| 参数名称 | 示例 | 参数说明 |
| confirmationStatus | 2 | 状态,参见下方字典 |
| value | key |
| -3 | FAILED |
| -2 | CANCELLED |
| -1 | TIMEOUT |
| 1 | IN_PROGRESS |
| 2 | ACCEPTED |
| 3 | DECLINED |
用于模拟触发一条 OOB(Out of Band)通知。
${baseUrl}/op/card/H/oob/simulate
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | true | 响应数据,是否成功 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | boolean |
- 本卡与其他卡产品不同。
- 开卡时返回的卡号并非真实卡号,而是卡ID,仅用于API操作。
- 真实的卡号、有效期、CVV信息需通过卡信息中的
secureUrl 获取。
secureUrl 需每次重新获取,使用一次后即失效。
- 可将
secureUrl 内嵌展示给用户使用。
POST ${baseUrl}/op/card/P/bin
Content-Type: application/json
| 更新日期 | 更新内容 |
| 2025-09-16 | 增加返回支持场景platforms |
- 方法:POST
- Content-Type: application/json
{
"data": [
{
"bin": "537100",
"issuerCountry": "US",
"network": "MasterCard",
"platforms": [
{
"platformLabel": "Invideo AI",
"successRate": "1"
},
{
"platformLabel": "Notion",
"successRate": "1"
}
]
},
{
"bin": "428852",
"issuerCountry": "US",
"network": "Visa",
"platforms": [
{
"platformLabel": "Select Media",
"successRate": "1"
},
{
"platformLabel": "Victoria's Secret",
"successRate": "1"
}
]
},
{
"bin": "517746",
"issuerCountry": "US",
"network": "MasterCard",
"platforms": [
{
"platformLabel": "Replicate",
"successRate": "1"
},
{
"platformLabel": "Whoop",
"successRate": "1"
}
]
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | jsonArray | 响应数据,卡头信息,建议直接展示给客户选择,内容不定 | 卡头信息数组 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true为成功,false为失败) | boolean |
| 参数名称 | 示例 | 参数说明 | 类型 |
| bin | 428836 | 卡头信息,展示给客户选择,由客户选取卡头 | string |
| issuerCountry | US | 发行地区 | string |
| network | VISA | 卡类型 | string |
| platforms | jsonArray | 支持的场景 | 场景数组 |
| 参数名称 | 示例 | 参数说明 | 类型 |
| platformLabel | Replicate | 场景名称 | string |
| successRate | 1 | 成功率 | string |
获取卡信息,需要在兼容 v1 的接口前提下使用。
${baseUrl}/op/card/P/info/v2
- Method:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡ID |
{
"data": {
"balance": {
"available": "10",
"currency": "USD",
"frozen": "0",
"pending": "0"
},
"billingAddress": {
"addressLine1": "456 Elm Street San Francisco",
"addressLine2": "",
"city": "DC",
"country": "USA",
"postalCode": "94101",
"state": "WA"
},
"bin": "537100",
"firstName": "Dennis",
"last4": "0729",
"lastName": "Huang",
"cardInfo": {
"cardNo":"2532hd2ubdebdebdebd",
"cvv":"2532hd2ubdebdebdebd",
"expYear":"2532hd2ubdebdebdebd",
"expMonth":"2532hd2ubdebdebdebd"
},
"status": "Active"
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据 | data信息 |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true成功,false失败 | bool |
| 参数名称 | 示例 | 参数说明 |
| bin | 559292 | 卡bin |
| firstName | Eli | 名 |
| lastName | Davis | 姓 |
| last4 | 1234 | 卡后四位 |
| status | Active | 卡片状态:Active-使用中,Frozen-冻结,Inactive-注销 |
| billingAddress | jsonObject | 注册地址信息 |
| balance | jsonObject | 余额信息 |
| cardInfo | jsonObject | 卡信息 |
| 参数名称 | 示例 | 是否必填 | 说明 |
| addressLine1 | 1 Westwood Drive | 否 | addressLine1 |
| addressLine2 | 1 Westwood Drive | 否 | addressLine2 |
| city | Fort Worth | 否 | 城市 |
| country | US | 否 | 国家 |
| postalCode | 89328 | 否 | 邮编 |
| state | IL | 否 | 州/省 |
| 参数名称 | 示例 | 是否必填 | 说明 |
| available | 10 | 否 | 可用余额 |
| currency | USD | 否 | 币种 |
| frozen | 0 | 是 | 冻结 |
| pending | 1 | 是 | 结算中 |
| 参数名称 | 示例 | 是否必填 | 说明 |
| cardNo | 34783hddh3h3ube3e | 是 | 卡号,需要使用aes解密 |
| cvv | 34783hddh3h3ube3e | 是 | CVV,需要使用aes解密 |
| expYear | 034783hddh3h3ube3e | 是 | 有效期-年,需要使用aes解密 |
| expMonth | 34783hddh3h3ube3e | 是 | 有效期-月,需要使用aes解密 |
| 值 | 描述 |
| Active | 使用中 |
| Frozen | 冻结 |
| Inactive | 注销 |
查询卡片的交易记录,查询时间跨度最大为3个月。
POST ${baseUrl}/op/card/P/transaction
Content-Type: application/json
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡ID |
| pageToken | 是 | string | 页码(页数游标,可为空) |
| pageSize | 是 | string | 每页数量 |
| creationTimeFrom | 是 | string | 起始时间,格式 yyyy-MM-dd |
| creationTimeTo | 是 | string | 结束时间,格式 yyyy-MM-dd |
{
"data": {
"currentPage": 1,
"pageSize": 2,
"totalRecords": 1,
"transactions": [
{
"amount": "10",
"cardNumber": "5592922156696856",
"currency": "USD",
"debitOrCreditFlag": "D",
"id": "ac4cef2d-8d1b-4ee9-a15e-b751ebaefad0",
"status": "Closed",
"transactionTime": "2024-11-29T02:24:14.578Z",
"type": "TopUp"
}
]
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | - | 响应数据,见下表 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true为成功) | boolean |
| 参数名称 | 示例 | 参数说明 |
| id | ac4cef2d-8d1b-4ee9-a15e-b751ebaefad0 | 交易号 |
| cardNumber | 4383570038788189 | 卡ID |
| debitOrCreditFlag | D | D:扣账(减少),C:记账(增加) |
| transactionTime | 2024-11-29T02:24:14.578Z | 交易发生时间 |
| currency | CNY | 交易币种 |
| amount | 38.48 | 交易币种金额 |
| type | TopUp | 交易类型 |
| status | APPROVED | 状态 |
| detail | WEIXIN*huidi 5210747029 CN | 交易详情 |
| 值 | 描述 |
| Consumption | 消费 |
| TopUp | 增值 |
| Fee | 消费手续费 |
| Credit | 退款 |
| Reversal | 冲正 |
| DeleteCard | 注销卡 |
| 值 | 描述 |
| Approve | 审批完成 |
| Pending | 待处理 |
| Fail | 失败 |
- 对指定卡片进行冻结或解冻操作,用于临时锁定或解锁使用权限。
冻结卡片
POST ${baseUrl}/op/card/P/lock
Content-Type: application/json
解冻卡片
POST ${baseUrl}/op/card/P/un/lock
Content-Type: application/json
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡ID |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据(操作是否成功) | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true为成功,false为失败) | boolean |
卡注销操作
- 返回成功表示操作接收成功,后台会执行卡注销动作,该操作需要一定时间处理
- 注销成功后会有通知推送,推送内容会包含卡内金额退还信息
POST ${baseUrl}/op/card/P/close
Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡 ID |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | true | 响应数据(true:注销成功,false:失败) | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true为成功,false为失败) | boolean |
通知信息,包括卡余额变动、3ds 消息等。
由后台设置
POST
Content-Type: application/json
如遇推送失败,建议使用指数退避算法进行重试,例如初次失败后 1 秒,第二次 2 秒、4 秒、8 秒等递增,最多重试五次。
| 参数名 | 必填 | 类型 | 示例 | 说明 |
| type | 是 | string | 3ds | 通知类型 |
| data | 是 | string | jsonString | 通知信息(JSON字符串) |
| appKey | 是 | string | edy2378eh23gf29w2 | appKey |
| sign | 是 | string | a87694dbd3be64a356a42be95e123360 | 接口签名 |
{
"data": "{\"id\":\"e6a54b44-1a38-4d51-824c-6f7bf6e1fb3e\",\"currency\":\"USD\",\"amount\":\"9\",\"type\":\"TopUp\",\"cardNo\":\"5592922156696856\",\"status\":\"Closed\",\"transactionTime\":\"2024-11-29T07:14:18.157Z\"}",
"sign": "dc227220340c874fec3bba43bad08b32",
"appKey": "psqxrezci72955wqxlhar898vx2q8lts",
"type": "CardTransaction"
}
body 内容直接返回字符串 ok
ok
| 参数名 | 必填 | 类型 | 示例 | 说明 |
| id | 是 | string | fb68813f-61cd-4d17-8265-4b5dd71ec405 | 流水ID |
| cardNo | 是 | string | 5592922156696856 | 卡号 |
| currency | 是 | string | USD | 币种 |
| amount | 是 | string | 9 | 金额 |
| type | 是 | string | TopUp | 类型 |
| status | 是 | string | Closed | 状态 |
| detail | 否 | string | METAPAY*ADS fb.me/ads IE | 消费详情 |
| transactionTime | 是 | string | 2024-11-29T07:14:18.157Z | 发生时间 |
| 值 | 说明 |
| TopUp | 充值 |
| Consumption | 消费 |
| Fee | 消费手续费 |
| Auth | 授权 |
| Credit | 退款 |
| Reversal | 冲正 |
| FrozenCard | 冻结 |
| UnFrozenCard | 解冻 |
| CardStateChange | 卡状态变更 |
| DeleteCard | 注销卡(据此回退金额和销卡处理) |
| 值 | 说明 |
| Pending | 处理中 |
| Approve | 成功 |
| Fail | 失败 |
| 参数名 | 必填 | 类型 | 示例 | 说明 |
| cardNo | 是 | string | 5592922156696856 | 卡号 |
| currency | 是 | string | USD | 币种 |
| status | 是 | string | Inactive | 状态 |
| userName | 是 | string | as aa | 用户名 |
| createTime | 是 | string | 2021-08-30T11:59:32.935Z | 创建时间 |
| cardNoLastFour | 是 | string | 9990 | 卡后四位 |
| 值 | 描述 |
| Active | 使用中 |
| Frozen | 冻结 |
| Inactive | 注销 |
| 参数名 | 必填 | 类型 | 示例 | 说明 |
| cardNo | 是 | string | 5592922156696856 | 卡号 |
| currency | 是 | string | USD | 币种 |
| amount | 是 | string | 9 | 金额 |
| otp | 是 | string | 1234321 | OTP |
| detail | 是 | string | | 交易信息 |
备注:有些卡需要跳转指定页面提交验证码
| 参数名 | 必填 | 类型 | 示例 | 说明 |
| cardNo | 是 | string | 5592922156696856 | 卡号 |
| currency | 是 | string | USD | 币种 |
| amount | 是 | string | 9 | 金额 |
| detail | 是 | string | | 交易信息 |
| timestamp | 是 | long | 1725350485682 | 时间戳 |
| expirationTime | 是 | long | 1725350785682 | 过期时间 |
| url | 是 | string | 1234321 | 跳转地址提交验证码 |
接口描述:
获取卡头信息,用于展示给客户查看。
请求URL:
${baseUrl}/op/card/L/head
${baseUrl}/op/card/L/head/en
请求方式:
POST
请求头部:
Content-Type: application/json
{
"data": [
{
"ChatGPT": [
{
"美国": [
{
"VISA": [
"440872",
"489607",
"491090",
"485997"
]
},
{
"万事达": [
"559292",
"556371"
]
}
]
}
],
"电商消费": [
{
"美国": [
{
"VISA": [
"491090",
"489607",
"485997"
]
},
{
"万事达": [
"559292",
"556371",
"556167",
"553437"
]
}
],
"中国香港": [
{
"VISA": [
"438357",
"493193"
]
}
]
}
],
"广告投放": [
{
"美国": [
{
"VISA": [
"491090",
"489607",
"483317"
]
},
{
"万事达": [
"559292",
"556371"
]
}
],
"中国香港": [
{
"VISA": [
"438357",
"493193"
]
}
]
}
]
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | jsonArray | 响应数据,卡头信息,展示给客户查看。格式不变,内容不定 | jsonArray |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功,true-成功,false-失败 | boolean |
简要描述:
获取卡信息
请求URL:
${baseUrl}/op/card/L/info
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": {
"balance": "12.00",
"cardExpiryDate": "08/2026",
"cardNo": "5561672373861111",
"cardStatus": "1",
"cardStatusDesc": "使用中",
"cardUserInfo": {
"birthDate": "1992-09-20",
"email": "[email protected]",
"firstName": "dennis",
"lastName": "hhb",
"mobile": "9375161772"
},
"cvv": "1Hqa1r3Kb6nWIpVRn8/odg==",
"localCurrency": "USD",
"startActiveDate": "2024-08-10"
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,见下方 data 信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true-成功,false-失败 | boolean |
| 参数名称 | 示例 | 参数说明 | 类型 |
| balance | 3.234 | 卡片余额 | string |
| cardNo | 235344343 | 卡号 | string |
| cvv | 23684823920432 | cvv,需使用密钥解密后使用,请参考 解密 | string |
| cardExpiryDate | 09/23 | 卡片有效期 | string |
| localCurrency | USD | 币种 | string |
| startActiveDate | 02/23 | 激活日期 | string |
| cardStatus | 0 | 卡片状态 0-冻结 1-使用中 2-已销卡 | int/string |
| cardUserInfo | jsonObject | 注册用户信息 | object |
| 参数名称 | 示例 | 参数说明 | 类型 |
| birthDate | 1992-09-20 | 出生年月 | string |
| email | [email protected] | 注册邮箱 | string |
| firstName | dennis | 用户名 | string |
| lastName | huang | 用户姓 | string |
| mobile | 169374627 | 注册手机号 | string |
简要描述:
查询指定卡号的交易记录。单次查询时间范围最大为 3 个月。
请求URL:
${baseUrl}/op/card/L/transaction
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
| pageToken | 是 | string | 页码 |
| pageSize | 是 | string | 数量 |
| creationTimeFrom | 是 | string | 起始时间,格式yyyy-MM-dd |
| creationTimeTo | 是 | string | 结束时间,格式yyyy-MM-dd |
{
"data": {
"currentPage": 1,
"pageSize": 2,
"totalRecords": 3,
"transactions": [
{
"cardId": "2408032111001269724",
"crossBoardType": "1",
"localCurrency": "USD",
"localCurrencyAmt": "",
"occurTime": 1722682107000,
"platformType": "消费",
"recordNo": "2408031848060073804",
"respCode": "000000",
"respCodeDesc": "交易成功",
"transCurrency": "CNY",
"transCurrencyAmt": "38.48",
"transStatus": "APPROVED",
"transType": "AUTH"
},
{
"cardId": "2408032111001269724",
"crossBoardType": "1",
"localCurrency": "USD",
"localCurrencyAmt": "",
"occurTime": 1722682107000,
"platformType": "消费",
"recordNo": "2408031848060073804",
"respCode": "000000",
"respCodeDesc": "交易成功",
"transCurrency": "CNY",
"transCurrencyAmt": "38.48",
"transStatus": "APPROVED",
"transType": "AUTH"
}
]
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,见下方 data 字段 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true-成功,false-失败 | boolean |
| 参数名称 | 示例 | 参数说明 | 类型 |
| recordNo | 245346345345 | 流水号 | string |
| occurTime | 1722682107000 | 交易发生时间(时间戳) | long |
| transCurrency | CNY | 交易币种 | string |
| transCurrencyAmt | 38.48 | 交易币种金额 | string |
| localCurrency | USD | 卡币种 | string |
| localCurrencyAmt | 38.48 | 卡本币种交易金额 | string |
| respCode | 000000 | 交易响应码 | string |
| respCodeDesc | 交易成功 | 交易响应码描述 | string |
| crossBoardType | 1 | 跨境类型:0-境内 1-境外 | string |
| transType | AUTH | 交易类型(AUTH-消费 REFUND-退款 FEE-手续费 TOP UP-增值 REVERSAL-冲正) | string |
| transStatus | APPROVED | 交易状态(APPROVED-批准 DECLINED-拒绝) | string |
| platformType | 消费 | 描述 | string |
| merchantName | WEIXIN*Meituan | 交易商户信息 | string |
| merchantCategoryCode | 5999 | 商户类型 | string |
| approvalCode | VWAJ0R | 批准代码 | string |
接口描述:
用于对卡片进行挂失(冻结)或解挂(解冻)操作。
请求URL:
${baseUrl}/op/card/L/lock — 挂失
${baseUrl}/op/card/L/un/lock — 解挂
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名 | 必填 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据,true-成功,false-失败 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功,true-成功,false-失败 | boolean |
接口描述:
注销卡片。调用接口后若返回成功,仅代表操作已提交,后台系统会进行实际注销处理,此过程可能需要一定时间。待注销完成后会异步推送通知,通知中将包含退款金额等信息。
请求URL:
${baseUrl}/op/card/P/close
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| cardNumber | 是 | string | 卡片ID |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据,true-注销成功,false-失败 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功,true-成功,false-失败 | boolean |
注意事项:
- 该接口仅提交注销请求,具体注销及退款流程需等待后台处理。
- 注销完成后会有专门的通知推送,包含退款金额(退还到备用金账户)。
接口描述:
OTP通知,用户在使用卡片时,若需要验证码,会通过本接口推送当前OTP,需将OTP及时提供给用户。
接口地址:
后台设置
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 示例 | 参数说明 |
| otp | 是 | 123456 | 验证码 |
| cardNo | 是 | 493193**1091 | 卡号 |
| transactionCurrency | 是 | CNY | 币种 |
| transactionAmount | 是 | 23.32 | 交易金额 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
接口响应内容为字符串 “ok”:
ok
注意事项:
接口描述:
当卡余额有变动时,平台会推送通知至指定后台地址。
接口地址:
后台配置通知地址
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 示例 | 参数说明 |
| cardNumber | 是 | 1234567812345678 | 卡号 |
| recordNo | 是 | 245346345345 | 流水号 |
| occurTime | 是 | 2024-09-03 17:40:06 | 交易发生时间 |
| transCurrency | 是 | CNY | 交易币种 |
| transCurrencyAmt | 是 | 38.48 | 交易币种金额 |
| localCurrency | 是 | USD | 卡币种 |
| localCurrencyAmt | 是 | 38.48 | 卡本币种交易金额 |
| respCode | 是 | 000000 | 交易响应码 |
| respCodeDesc | 是 | 交易成功 | 交易响应码描述 |
| merchantName | 否 | WEIXIN*Meituan | 交易商户信息 |
| merchantCategoryCode | 否 | 5999 | 商户类型 |
| approvalCode | 是 | VWAJ0R | 批准代码 |
| crossBoardType | 是 | 1 | 跨境类型:0-境内 1-境外 |
| transType | 是 | AUTH | 交易类型:AUTH-消费 REFUND-退款 FEE-手续费 TOP UP-增值 REVERSAL-冲正 |
| transStatus | 是 | APPROVED | 交易状态:APPROVED-批准 DECLINED-拒绝 |
| platformType | 是 | 消费 | 描述 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
{
"localCurrencyAmt": "10",
"occurTime": "2024-09-03 17:40:06",
"platformType": "开卡预存",
"sign": "d1fd48a0268506f4a131442a27485385",
"localCurrency": "USD",
"transCurrency": "USD",
"recordNo": "2409031607063343947",
"crossBoardType": "1",
"transType": "TOP UP",
"respCodeDesc": "交易成功",
"appKey": "psqxrezci72955wqxlhar898vx2q8lts",
"respCode": "000000",
"transCurrencyAmt": "10",
"transStatus": "APPROVED"
}
ok (body内容为字符串“ok“)
- 若未按要求返回
ok,平台将视为推送失败,平台将采用指数退避策略进行重试,初次推送失败后每隔1分钟进行重复推送5次。
- 若依然未成功回应,将在10分钟后再进行新一轮推送,如此共10组(共计最多50次)。
- 请确保及时正确响应,避免消息丢失。
接口描述:
先提交注销请求,注销成功后进行通知。
退款金额将退回备用金账户,客户端需自行处理退款。
需在中台-安全中心配置通知地址。
接口地址:
后台设置
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 示例 | 参数说明 |
| cardNumber | 是 | 1234567812345678 | 卡号 |
| recordNo | 是 | 245346345345 | 流水号 |
| occurTime | 是 | 2024-09-03 17:40:06 | 交易发生时间 |
| localCurrency | 是 | USD | 卡币种 |
| localCurrencyAmt | 是 | 38.48 | 退款金额,将退回备用金账户,需发卡方自行退还给客户 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
{
"localCurrencyAmt": "10",
"occurTime": "2024-09-03 17:40:06",
"sign": "d1fd48a0268506f4a131442a27485385",
"localCurrency": "USD",
"recordNo": "2409031607063343947",
"appKey": "psqxrezci72955wqxlhar898vx2q8lts",
"transCurrencyAmt": "10"
}
请求成功时,body 内容需返回字符串 ok:
ok
- 未按要求返回
ok 时,平台将视为推送失败,将使用指数退避(exponential backoff)策略:首次失败后,每1分钟重试一次,连续推送5次为一组。
- 若5次重试仍未回应,间隔10分钟后,将开始下一组重试。共重试10组,总计50次。
- 若持续不回应,可能导致卡片注销退款未能及时处理,请务必保证消息接收与正确回应。
简要描述:
用于模拟客户触发验证码功能,若已绑定通知地址,通知地址会收到本次模拟消息。仅适用于测试环境。
请求URL:
${baseUrl}/op/card/L/simulation/otp
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据,true-操作成功,false-失败 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true-成功,false-失败 | boolean |
简要描述:
用于模拟客户发起一笔交易。若已绑定通知地址,通知地址会收到本次模拟消息。仅适用于测试环境。
请求URL:
${baseUrl}/op/card/L/simulation/transaction
请求方式:
POST
请求头部:
Content-Type: application/json
| 参数名称 | 必填 | 类型 | 说明 |
| cardNumber | 是 | string | 卡号 |
{
"data": true,
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | true | 响应数据,true-操作成功,false-失败 | boolean |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true-成功,false-失败 | boolean |
API 涉及的公共请求参数和返回参数如下:
| 参数名 | 类型 | 是否必填 | 说明 |
| Request-Id | string | 是 | 每次请求的唯一ID |
| Authorization | string | 否 | Bearer <token>,JWT token,除获取token接口外必填 |
| Content-Type | string | 是 | 固定值:application/json |
所有返回均为 JSON 格式,数据结构如下:
| 参数名 | 类型 | 说明 |
| code | string | 错误码,SUCCESS为成功 |
| message | string | 错误描述 |
| data | object | 业务数据 |
默认 token 有效期为 2 小时。token 过期后,可以重新获取新 token。
- 请求方法:POST
- 请求地址:/oauth/api/v1/token
| 参数名 | 类型 | 说明 |
| app_id | string | 开发者 app ID |
| app_secret | string | 开发者 app secret |
| grant_type | string | 固定值:client_credentials |
| 参数名 | 类型 | 说明 |
| access_token | string | JWT token |
| expires_in | long | 过期时间(秒) |
| refresh_token | string | 刷新token(可选) |
| refresh_token_expires_in | long | 刷新token过期时间(秒) |
说明:
- 批量开卡需循环调用本接口,建议调用频率不超过每秒2次。
- 开卡成功后,系统将发送异步通知。如未收到通知,可通过查询接口补偿获取结果。
请求方式:POST
请求地址:/card/api/v1/op/create
| 参数名 | 类型 | 是否必填 | 说明 |
| partner_order_id | string | 是 | 商户请求ID |
| card_bin_id | string | 是 | 卡段ID |
| amount | decimal | 是 | 开卡金额(创建子卡时传0) |
| account_currency | string | 是 | 钱包币种,固定传USD |
| card_holder_id | string | 否 | 持卡人ID(卡段需要持卡人时才需传) |
| card_model | string | 是 | 卡模式。CARD:充值卡,SHARE:共享卡 |
| primary_card_id | string | 否 | 主卡ID(创建子卡时需要传) |
| total_auth_limit | string | 否 | 子卡限额(创建子卡时指定,0代表不限额) |
| auth_limit_flag | string | 否 | 是否限额。Y:是,N:否(创建子卡时需传) |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
请求方式:GET
请求地址:/card/api/v1/op/queryCardDetail
以下参数二选一传:
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| card_number | string | 卡号 |
| cvv | string | cvv |
| expiry | string | 过期时间 |
| currency | string | 卡币种 |
| active_date | string | 激活日 |
| inactive_date | string | 失效日 |
| card_brand | string | 卡品牌 |
| card_model | string | 卡类型(SHARE/CARD) |
| card_level | string | SubCard/主卡 |
| card_status | string | 卡状态(Pending/Active/Failure/Closed) |
| available_balance | decimal | 可用余额 |
| total_auth_limit | decimal | 子卡限额 |
| used_auth_limit | decimal | 子卡已用额度 |
| primary_card_id | string | 主卡ID |
对子卡无需充值,仅需充值主卡。
请求方式:POST
请求地址:/card/api/v1/op/recharge
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| amount | decimal | 充值金额 |
| account_currency | string | 钱包币种 |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| transaction_id | string | 交易ID |
仅主卡可提现。
请求方式:POST
请求地址:/card/api/v1/op/withdraw
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| amount | decimal | 提现金额 |
| account_currency | string | 钱包币种 |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| transaction_id | string | 交易ID |
请求方式:POST
请求地址:/card/api/v1/op/cancel
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| transaction_id | string | 交易ID |
请求方式:POST
请求地址:/card/api/v1/op/updateTotalAuthLimit
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户请求ID |
| card_id | string | 卡ID |
| total_auth_limit | decimal | 子卡限额,不限额传0 |
| auth_limit_flag | string | 是否限额 是:Y,否:N |
请求方式:GET
请求地址:/card/api/v1/trade/queryCardOpDetail
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户持卡人ID |
| card_id | string | 卡ID |
| transaction_type | string | 交易类型,详见下表 |
| begin_time | LocalDateTime | 查询开始时间,例:2025-10-01 10:00:00 |
| end_time | LocalDateTime | 查询结束时间,例:2025-10-20 10:00:00 |
| page_size | int | 每页大小 |
| page_no | int | 当前页 |
| 参数名 | 类型 | 说明 |
| page_size | int | 当前页大小 |
| page_no | int | 当前页数 |
| total | int | 总数 |
| pages | int | 总页数 |
| list | List<CardOpDetail> | 记录列表 |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户持卡人ID |
| card_id | string | 卡ID |
| primary_card_id | string | 主卡ID |
| transaction_id | string | 交易流水号 |
| transaction_time | long | 交易时间 |
| create_time | long | 创建时间 |
| billing_currency | string | 账单币种 |
| billing_amount | decimal | 账单金额 |
| transaction_type | string | 卡操作类型,详见下表 |
| transaction_status | string | 交易状态(Success/Failure/Processing) |
| fail_reason | string | 失败原因 |
| reference_id | string | 关联ID |
| fund_account_type | string | 资金账户类型(Wallet/卡) |
| fund_direct | int | 资金方向(1增加,-1减少) |
| merchant_fee | MerchantFee | 费用信息 |
| 参数名 | 类型 | 说明 |
| total_fee_amount | decimal | 总费用 |
| fee_currency | string | 费用币种 |
| fee_detail | List<MerchantFeeDetail> | 费用明细 |
| 参数名 | 类型 | 说明 |
| fee_amount | decimal | 费用 |
| fee_type | string | 费用类型 |
| 类型 | 说明 |
| Create | 开卡 |
| Recharge | 卡充值 |
| Withdraw | 卡提现 |
| Cancel | 注销卡 |
请求方式:GET
请求地址:/card/api/v1/trade/queryCardTransactions
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户持卡人ID |
| card_id | string | 卡ID |
| transaction_type | string | 交易类型,详见下方“交易类型“ |
| begin_time | LocalDateTime | 查询开始时间,如:2025-10-01 10:00:00 |
| end_time | LocalDateTime | 查询结束时间,如:2025-10-20 10:00:00 |
| page_size | int | 每页大小 |
| page_no | int | 当前页 |
| 参数名 | 类型 | 说明 |
| page_size | int | 当前页大小 |
| page_no | int | 当前页 |
| total | int | 总数 |
| pages | int | 总页数 |
| list | List<CardTransactionDetail> | 记录列表 |
| 参数名 | 类型 | 说明 |
| partner_order_id | string | 商户持卡人ID |
| card_id | string | 卡ID |
| primary_card_id | string | 主卡ID |
| transaction_id | string | 交易流水号 |
| transaction_time | long | 交易时间 |
| create_time | long | 创建时间 |
| transaction_currency | string | 交易币种 |
| transaction_amount | decimal | 交易金额 |
| billing_currency | string | 账单币种 |
| billing_amount | decimal | 账单金额 |
| auth_code | string | 授权码 |
| transaction_type | string | 交易类型,详见下方“交易类型“ |
| transaction_status | string | 交易状态 Success:成功 Failure:失败 |
| result_code | string | 交易结果code |
| fail_reason | string | 失败原因 |
| merchant_name | string | 商户名称 |
| merchant_country | string | 商户国家 |
| merchant_city | string | 商户城市 |
| reference_id | string | 关联ID |
| mcc | string | mcc |
| cross_board_type | int | 是否跨境 0:否 1:是 |
| fund_account_type | string | 资金账户类型 Wallet:钱包 Card:卡 |
| fund_direct | int | 资金方向 1:增加 -1:减少 |
| merchant_fee | MerchantFee | 费用信息 |
| 参数名 | 类型 | 说明 |
| total_fee_amount | decimal | 总费用 |
| fee_currency | string | 费用币种 |
| fee_detail | List<MerchantFeeDetail> | 费用明细 |
| 参数名 | 类型 | 说明 |
| fee_amount | decimal | 费用 |
| fee_type | string | 费用类型 |
| 类型 | 说明 |
| AuthorizationQuery | 授权查询 |
| Authorization | 授权交易 |
| Reversal | 授权冲正 |
| Clearing | 授权清算 |
| Refund | 清算后退款 |
| CrossBorder | 跨境费 |
- 异步通知时,商户系统需正确响应参数,返回字符串 “ok”,否则视为未成功。
- 交易完成后,系统会根据商户订阅的 webhook 地址,通过
POST,将结果以 application/json 格式发送给商户。
- 请务必验证签名,防止数据泄漏和伪造通知。
-
幂等性
同一通知可能多次发送,商户系统需能正确处理重复通知。建议做法:收到通知后,先检查业务数据状态,仅对未处理的通知进行处理,已处理直接返回 200 和 "OK"。状态检查和数据操作前须加锁,避免并发导致状态混乱。
-
时效性
极少数情况下通知可能因网络等原因未送达,请务必通过主动查询接口补偿。建议根据实际业务,合理设置补偿查单的时机,如支付1小时后未收到通知可主动查单。
-
防抵赖
商户侧须对通知内容做签名校验(签名公钥见商户后台),并校验通知内容与本地数据一致,防止伪造通知导致资金风险。
| 类型 | 说明 |
| CardApply | 卡状态变更(开卡、注销) |
| CardOperate | 卡充值、卡充退 |
| Authorization | 卡交易 |
| Inbound | 入账 |
| 字段 | 说明 |
| partner_order_id | 商户请求 ID |
| status | 交易结果 Success/Failure |
| card_id | 卡 ID |
| card_status | 卡状态 Active/Failure |
| fail_reason | 失败原因 |
| card_number | 卡号 |
| available_balance | 可用余额 |
| cvv | CVV |
| expiry | 过期时间 |
| card_level | 卡等级 |
| merchant_fee | 手续费,MerchantFee |
| primary_card_id | 主卡ID(仅子卡有) |
| total_auth_limit | 子卡限额 |
| 字段 | 说明 |
| partner_order_id | 商户请求 ID |
| transaction_id | 交易 ID |
| status | 交易结果 Success/Failure |
| card_id | 卡 ID |
| card_status | 卡状态 Closed 已注销 |
| fail_reason | 失败原因 |
| merchant_fee | 手续费,MerchantFee |
| 字段 | 说明 |
| partner_order_id | 商户请求 ID |
| transaction_id | 交易 ID |
| status | 交易结果 Success/Failure |
| card_id | 卡 ID |
| operate_type | 交易类型:card_in 卡充值,card_out 卡充退 |
| amount | 发生金额 |
| currency | 发生币种 |
| merchant_fee | 手续费 MerchantFee |
参见交易查询
| 字段 | 说明 |
| fee_currency | 当前手续费币种 |
| total_fee_amount | 总手续费金额 |
| fee_detail | 手续费明细 List<FeeDetail> |
| 字段 | 说明 |
| fee_amount | 手续费金额 |
| fee_type | 手续费类型 |
| 字段说明 | 参见 InboundDetail |
import (
"crypto/rsa"
"crypto/x509"
"crypto"
"encoding/pem"
"encoding/base64"
"net/http"
"io/ioutil"
)
// 验证签名
func verifySign(content, signBase64, pubKeyPEM string) bool {
block, _ := pem.Decode([]byte(pubKeyPEM))
if block == nil {
return false
}
pub, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return false
}
rsaPub := pub.(*rsa.PublicKey)
sig, _ := base64.StdEncoding.DecodeString(signBase64)
h := crypto.SHA256.New()
h.Write([]byte(content))
return rsa.VerifyPKCS1v15(rsaPub, crypto.SHA256, h.Sum(nil), sig) == nil
}
// Webhook Handler 示例
func WebhookHandler(w http.ResponseWriter, r *http.Request) {
appId := "1569641270953589506"
publicKey := `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIHIQAp4TToRZuF+/g/fr4xxJg/hGxyZGwp66l1LSS7sfsx/EnaCY0mYzEBZZ6qqEShdrtlowJa2SudemqeWbbH75vkcwvwL7cMX58pXNPny4vACaKSnIdz1wwue/tUWmubQdhb7wwJDDKB+TQoyhrZbNsW9tsASCu8WjdmxqH0i0It/FjrMw7R4pv0jrZfMmoZs0mhxnrF5HnPzRW+kFgKwDGIRzhsy32iMTk7lbOkSrBK923TuWy/mb5h3Vzw1c/PVtl9udFG2SbQsl848jXQx5TUhyh0XIVLVMRu/EAiq54bIsh/YNWx75nfCkH+h7T6d0L8qxIdQB/qdt/RZQwIDAQAB
-----END PUBLIC KEY-----`
sign := r.Header.Get("sign")
timestamp := r.Header.Get("x-timestamp")
body, _ := ioutil.ReadAll(r.Body)
content := appId + timestamp + string(body)
if !verifySign(content, sign, publicKey) {
// 签名有误,记录日志
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("sign error"))
return
}
w.Write([]byte("ok"))
}
use base64::{Engine as _, engine::general_purpose};
use ring::signature::{UnparsedPublicKey, RSA_PKCS1_2048_8192_SHA256};
fn verify_sign(content: &str, sign_b64: &str, public_key_der: &[u8]) -> bool {
let signature = match general_purpose::STANDARD.decode(sign_b64) {
Ok(sig) => sig,
Err(_) => return false,
};
let pub_key = UnparsedPublicKey::new(&RSA_PKCS1_2048_8192_SHA256, public_key_der);
pub_key.verify(content.as_bytes(), &signature).is_ok()
}
fn main() {
let app_id = "1569641270953589506";
let timestamp = "1716350279000";
let body = r#"{"partner_order_id":"xxxx","status":"Success"}"#;
let content = format!("{}{}{}", app_id, timestamp, body);
let public_key_pem = r#"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIHIQAp4TToRZuF+/g/fr4xxJg/hGxyZGwp66l1LSS7sfsx/EnaCY0mYzEBZZ6qqEShdrtlowJa2SudemqeWbbH75vkcwvwL7cMX58pXNPny4vACaKSnIdz1wwue/tUWmubQdhb7wwJDDKB+TQoyhrZbNsW9tsASCu8WjdmxqH0i0It/FjrMw7R4pv0jrZfMmoZs0mhxnrF5HnPzRW+kFgKwDGIRzhsy32iMTk7lbOkSrBK923TuWy/mb5h3Vzw1c/PVtl9udFG2SbQsl848jXQx5TUhyh0XIVLVMRu/EAiq54bIsh/YNWx75nfCkH+h7T6d0L8qxIdQB/qdt/RZQwIDAQAB
-----END PUBLIC KEY-----"#;
let public_key_der = pem::parse(public_key_pem)
.expect("parse PEM")
.contents();
let sign_base64 = "xxxx";
if verify_sign(&content, sign_base64, &public_key_der) {
println!("签名验证通过");
} else {
println!("签名验证失败");
}
}
简要描述
获取所有可用的报价信息
请求URL
${baseUrl}/tf/v4/quotes/all
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 |
| currency | 是 | string | 资金来源币种,如 USD。可通过余额查询获知持有的货币类型。 |
返回示例
{
"rates": [
{
"input": "USD",
"output": "EUR",
"rate": 0.840138
},
{
"input": "USD",
"output": "AUD",
"rate": 1.521811
},
{
"input": "USD",
"output": "BDT",
"rate": 122.5773
}
],
"lastUpdateTime": 1753683680263
}
返回参数说明
| 参数名称 | 示例 | 说明 | 类型 |
| data | – | 响应数据 | json |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | bool |
data 信息说明
| 参数名称 | 示例 | 说明 |
| input | USD | 输入币种 |
| output | CNY | 输出币种 |
| rate | 6.402552 | 报价率 |
查询当前支持的业务模式。
${baseUrl}/tf/v4/business
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| country | 是 | string | 目标国家,例如 CHN,参数来源 |
| type | 是 | string | 下发通道,例如 bank_account,参数来源 |
{
"data": [
{
"business": "C2C"
},
{
"business": "B2B"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据data信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| business | C2C | 支持的业务类型 |
获取汇率报价信息。
| 更新日期 | 更新内容 |
| 2025-09-16 | 添加返回 fixedFee、preRatedFee 字段 |
| 2025-10-15 | 添加返回 fullPay、fullPayFee 字段 |
${baseUrl}/tf/v4/quotes
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| sourceCurrency | 是 | string | 资金来源币种,可从 balance 接口获取支持的币种 |
| country | 是 | string | 目标国家,例如 CHN |
| business | 是 | string | 业务类型,例如 C2C |
| type | 是 | string | 下发通道,例如 ewallet |
| targetCurrency | 是 | string | 下发币种,例如 CNY |
{
"data": {
"input": "USD",
"output": "CNY",
"rate": 6.402552,
"fixedFee": 5,
"preRatedFee": 0.012,
"fullPay": true,
"fullPayFee": 20
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据,data 信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功:成功 true,失败 false | |
| 参数名称 | 示例 | 参数说明 |
| input | USD | 输入币种 |
| output | CNY | 输出币种 |
| rate | 6.402552 | 汇率报价 |
| fixedFee | 12 | 固定费用,币种与 input 相同 |
| preRatedFee | 0.012 | 按比例收取的费用,例如发送金额为 100,该费用为 100*0.012 |
| fullPay | true | 是否支持 fullPay |
| fullPayFee | 20 | fullPay 的费用 |
简要描述
获取可发送的国家列表,用于创建订单时的 sourceCountry 字段。
请求URL
POST ${baseUrl}/tf/v4/sourceCountry
请求方式
- Method:
POST
- Content-Type:
application/json
返回示例
{
"data": [
{
"code": "ABW",
"name": "Aruba",
"shortCode": "AW"
},
{
"code": "AFG",
"name": "Afghanistan",
"shortCode": "AF"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | - | 响应数据 | 数组 |
| msg | 操作成功 | 响应消息 | 字符串 |
| status | 200 | 响应码 | 整数 |
| success | true | 是否成功(true/false) | 布尔值 |
data 对象字段说明
| 参数名称 | 示例 | 参数说明 |
| code | CHN | 国家编码(用于下单) |
| name | Afghanistan | 国家名称 |
| shortCode | AF | 国家简写 |
发起汇款。字段较多,分为几部分组成。可结合业务理解参考中台订单创建流程。不同下发模式所需信息不一致,主要可分为 wire 和其他(bank_account、cash_pickup、ewallet)。其他类型均为 C2C 模式,仅 wire 支持 B2B、B2C、C2B,wire 的校验较少。
${baseUrl}/tf/v4/order/create
- Method:POST
- Content-Type:application/json
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| merOrderNo | 是 | string | 商家订单号,唯一 | |
| notifyUrl | 否 | string | 订单通知地址,如提供则订单状态变更时会主动通知 | |
| ext | 否 | string | 预留字段,处理特殊业务 | |
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| sourceCurrency | 是 | string | 使用的汇款备用金,例如USD、EUR。可先查询余额接口获取当前配置资金货币和金额。 | country=CHN && type=bank_account && currency=CNY 只支持USD |
| sendAmount | 否 | string | 发送金额,与 targetAmount 只能二选一,最多两位小数 | 关联 sourceCurrency |
| targetAmount | 否 | string | 到账金额,与 sendAmount 只能二选一,最多两位小数。部分地区要求整数,有小数将自动去除,建议只用整数 | 关联 currency |
| chargeCode | 否 | string | wire的费用承担方式,默认 SHA;如 FP(支持时可在获取报价接口查看),费用由订单承担,客户收到全部 targetAmount/sendAmount 金额。 | type=wire |
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| country | 是 | string | 目的国家,如 HKG | |
| business | 是 | string | 业务类型,如 C2C,参考数据 | |
| type | 是 | string | 下发通道,如 wire、ewallet、bank_account | |
| currency | 是 | string | 下发币种,如 HKD,参考数据 | |
| partner | 否 | string | 下发通道支持的合作伙伴,如 partner_ewallet,来源接口 | |
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| accountNumber | 否 | string | 银行账号 | type=bank_account 或 type=wire,accountNumber/iban 只能选一 |
| iban | 否 | string | IBAN | type=bank_account 或 type=wire,accountNumber/iban 只能选一;type=bank_account && currency=EUR |
| targetBankCode | 否 | string | 银行编码,如 003,来源接口 | type=bank_account |
| targetBankBranch | 否 | string | 银行分行,如 003-01,如有 bankCode 需查询 | type=bank_account |
| swiftCode | 否 | string | SWIFT code | type=wire |
| corrSwiftCode | 否 | string | 代理行/中转行SWIFT code | type=wire,可选填 |
| ewalletId | 否 | string | 电子钱包账户 | type=ewallet |
| routingCode | 否 | string | 银行ABA路由代码,9位数字 | type=bank_account 且 country=AUS |
| sortCode | 否 | string | 排序代码(英国6位),格式3对数字 | type=bank_account && country=GBR && currency=GBP |
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| targetAddressLine | 是 | string | 详细地址,备注勿重复填写国家和城市 | |
| targetAddressCity | 是 | string | 城市 | |
| targetAddressCityCode | 否 | string | 城市编码,如0926,来源接口 | country=IDN && business=C2C && type=ewallet |
| targetAddressState | 否 | string | 州/省编码,如09,如为IDN需提交name,来源接口 | |
| targetAddressZip | 否 | string | 邮编 | C CAN-bank_account-CAD |
| targetAddressCountry | 否 | string | 国家或地区,如 HKG | |
| targetMobileNumber | 否 | string | 手机号,如+6281329623212 | C,cash_pickup,type=ban_account_new && country=CHN |
| targetCompanyName | 否 | string | 企业名称 | B 必填 |
| targetNameFirst | 否 | string | 名字 | C 必填 |
| targetNameLast | 否 | string | 姓氏 | C 必填 |
| targetNativeNameFirst | 否 | string | 国籍本地名 | C,type=ban_account_new && country=CHN |
| targetNativeNameLast | 否 | string | 国籍本地姓 | C,type=ban_account_new && country=CHN |
| targetNationality | 否 | string | 国籍,如 HKG | C 必填 |
| targetDateOfBirth | 否 | string | 出生年月,格式1999-10-01 | C,KOR-bank_account-KRW |
| targetEmail | 否 | string | 邮箱 | C,KOR-bank_account-KRW & targetMobileNumber非+82号码 |
| targetIdNumber | 否 | string | 证件号 | C |
| targetIdType | 否 | string | 证件类型,national/护照 | C,type=cash_pickup && country=VNM,targetIdNumber不为空需完善 |
| targetIdExpiration | 否 | string | 证件有效期,格式1999-10-01,长期用2099-12-31 | C |
| 参数名 | 必选 | 类型 | 说明 | 条件 |
| sourceCountry | 是 | string | 发送国家或地区,需为跨境,必须与country不同 | 来源接口 |
| sourceReferenceNumber | 否 | string | 参考编号,C时必填,用于标识当前用户,便于找回 | |
| sourceAddressLine | 是 | string | 详细地址 | |
| sourceAddressCity | 是 | string | 城市 | |
| sourceAddressState | 否 | string | 州/省 | C,type=ban_account_new && country=CHN |
| sourceAddressCountry | 是 | string | 国家 | |
| sourceAddressZip | 否 | string | 邮编 | |
| sourceNameFirst | 否 | string | 名字 | C 必填 |
| sourceNameLast | 否 | string | 姓氏 | C 必填 |
| sourceGender | 否 | string | 性别(M/F) | C,type!=wire && country=NPL |
| sourceNationality | 否 | string | 国籍,如HKG | C 必填 |
| sourceDateOfBirth | 否 | string | 出生年月,格式1999-10-01 | C 必填 |
| sourceIdNumber | 否 | string | 证件号 | C,country=IDN && business=C2C && type=ewallet;country=CHN && business=C2C && type=bank_account |
| sourceIdType | 否 | string | 证件类型,national/护照,sourceIdNumber不为空需完善 | C |
| sourceIdExpiration | 否 | string | 证件有效期,格式1999-10-01,长期用2099-12-31 | C |
| sourceIdIssueCountry | 否 | string | 证件签发国家,sourceIdNumber有值需完善 | C,sourceIdNumber有值 |
| sourceMobileNumber | 否 | string | 手机号 | C,详见下方规则 |
| sourceCompanyName | 否 | string | 企业名称 | B 必填 |
| sourceCompanyTradingName | 否 | string | 企业经营名称 | B 必填 |
| sourceCompanyRegistrationNumber | 否 | string | 企业注册号 | B |
| sourceCompanyRegistrationCountry | 否 | string | 企业注册国家或地区 | B |
| 参数名 | 必选 | 类型 | 说明 |
| remittancePurpose | 是 | string | 交易目的,参考数据 |
| sourceOfFunds | 是 | string | 资金来源,参考数据 |
| relationship | 是 | string | 交易关系,参考数据 |
| occupation | 否 | string | 发送者职业,参考数据 |
| unformattedNote | 否 | string | 转账附言,最大长度64 |
- sourceMobileNumber,targetMobileNumber
- business=C2C && type=bank_account && country in (CMR, COG, GHA, KEN, UGA, BGD, CAD, IDN, KRW, NPL, USA, VNM)
- business=C2C && type=ewallet && country in (BEN, CMR, COG, GHA, MDG, MWI, MOZ, NER, RWA, SEN, TZA, TGO, UGA, ZMB, BGD, IDN, NPL)
- business=C2C && type=cash_pickup && country in (BGD, KHM, IDN, KRW, NPL, PHP, VNM)
- sourceIdNumber
- country=IDN && business=C2C && type=ewallet
- country=CHN && business=C2C && type=bank_account
- type=wire && country=HKG && currency=HKD
- type=wire && country=AUS && currency=AUD
- type=wire && country=SGP && currency=SGD
- sourceAddressCountry、targetAddressCountry
- type=wire && country=HKG && currency=HKD
- type=wire && country=AUS && currency=AUD
- type=wire && country=SGP && currency=SGD
{
"data": {
"account": "543435",
"completeTime": "",
"createTime": "2024-08-31 23:08:58",
"ext": "",
"failReason": "",
"merOrderNo": "240831230857132800",
"orderNo": "240831230858245344",
"sendAmount": 0,
"chargeCode": "FP",
"fullPayFee": "20",
"fixedFee": 5,
"preRatedFee": 0.012,
"sourceAmount": 1586.15,
"sourceCurrency": "USD",
"status": 0,
"targetAmount": 10000,
"targetCurrency": "CNY"
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | jsonArray | 响应数据 | 产品类型列表 |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功(true-成功,false-失败) | |
data-下单订单信息说明
| 参数名称 | 示例 | 参数说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| account | 6244810070000117 | 目标账户 |
| sourceCurrency | USD | 结算币种 |
| sourceAmount | 20.1234 | 结算金额,最多保留四位小数 |
| sendAmount | 20. | 发送金额,选用 sendAmount 时有值,否则为0 |
| targetCurrency | CNY | 目标币种 |
| targetAmount | 10000 | 目标金额 |
| merQuotes | 7.2634 | 提单的报价 |
| chargeCode | SHA | wire的费用承担方式 |
| fullPayFee | 20 | FP承担费用时,sourceAmount包含此费用 |
| fixedFee | 12 | 固定费用,与sourceCurrency同币种 |
| preRatedFee | 0.012 | 兑换手续费,例如发送金额100,则此项为100*0.012 |
| status | 1 | 订单状态(1-处理中 2-成功 3-失败) |
| failReason | 信息错误 | 失败信息,如失败时会返回 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | | 订单额外信息,预留 |
| 状态码 | 描述 |
| 200 | 成功 |
| 500 | 操作失败(不可直接失败,需查询订单后确定) |
| 5000 | 操作异常(需查询订单确认) |
| 5101 | 请勿重复下单 |
| 5102 | 备用金余额不足 |
查询提交的订单。
UETR需在订单结束5-30分钟后获取,如有需要可主动查询。
| 更新日期 | 更新内容 |
| 2025-09-16 | 添加返回 fixedFee、preRatedFee 字段 |
| 2025-10-08 | 添加返回 chargeCode、fullPayFee 字段 |
${baseUrl}/tf/v4/order/query
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| orderNo | 否 | string | 平台订单号,不为空则只用此字段查询 |
| merOrderNo | 否 | string | 渠道订单号 |
{
"data": {
"account": "543435",
"completeTime": "2024-08-31 15:17:56",
"createTime": "2024-08-31 15:03:25",
"ext": "",
"failReason": "",
"merOrderNo": "240831150324112064",
"orderNo": "240831150325224032",
"sourceAmount": 1586.150,
"sendAmount": 0,
"sourceCurrency": "USD",
"status": 1,
"targetAmount": 10000,
"targetCurrency": "CNY",
"fixedFee": 5,
"preRatedFee": 0.012,
"chargeCode": "FP",
"fullPayFee": 20
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据订单信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功:成功 true,失败 false | |
| 参数名称 | 示例 | 参数说明 |
| merOrderNo | 436343534234 | 商家订单号 |
| orderNo | 35432346345345 | 平台订单号 |
| account | 6244810070000117 | 目标账户 |
| sourceCurrency | USD | 结算币种 |
| sourceAmount | 20.00 | 结算金额,最大两位小数,如果大于两位小数则取两位(如计算金额为2.123,最终为2.13) |
| sendAmount | 20.00 | 发送金额 |
| fixedFee | 12 | 固定费用,币种与输入一致 |
| preRatedFee | 0.012 | 兑换手续费,例如发送金额为100,则该费用为100*0.012 |
| merQuotes | 7.3423 | 结算汇率 |
| targetCurrency | CNY | 目标币种 |
| targetAmount | 10000 | 目标金额 |
| status | 1 | 订单状态:1-处理中 2-成功 3-失败 |
| failReason | 信息错误 | 失败信息,订单失败时会返回失败原因 |
| createTime | 2023-04-02 17:07:09 | 订单创建时间 |
| completeTime | 2023-04-02 17:07:09 | 订单完成时间 |
| ext | {“pickupCode”:“63742374673463847”}(字符串) | 订单额外信息,备注:可能存在的额外信息见下方 |
| 类型 | 示例 | 参数说明 |
| cash_pickup | {“pickupCode”:“63742374673463847”} | 取现凭证,现场出示 |
| wire | {“uetr”:“63742374673463847”} | 此 UETR 可提供给收款银行,用于协助交易追踪 |
当订单完成且提交订单时有通知地址,平台将会通知此接口。
| 更新日期 | 更新内容 |
| 2025-09-16 | 添加返回 fixed, proRatedFee 字段 |
由订单接口提供请求地址
- 方法:POST
- Content-Type: application/json
| 参数名称 | 必填 | 示例 | 参数说明 |
| orderNo | 是 | 1448538596381429760 | 平台订单号 |
| merOrderNo | 是 | 1448535323381429760 | 接入方订单号 |
| status | 是 | 3 | 订单状态:1-处理中 2-成功 3-失败 |
| completeTime | 是 | 20220331121212 | 订单完成时间 |
| createTime | 是 | 20220331121212 | 订单创建时间 |
| account | 是 | 235234234 | 目标账户 |
| targetAmount | 是 | 1000 | 目标金额 |
| targetCurrency | 是 | CNY | 目标币种 |
| sourceCurrency | 是 | USD | 结算币种 |
| sourceAmount | 是 | 1000 | 结算金额 |
| fixedFee | 否 | 12 | 固定费用,币种与 sourceCurrency 相同 |
| proRatedFee | 否 | 0.012 | 每笔兑换手续费,例如发送金额为 100,则该费用为 100*0.012 |
| failReason | 否 | 信息错误 | 失败信息,仅失败时存在明确失败原因时返回 |
| appKey | 是 | edy2378eh23gf29w2 | appKey |
| sign | 是 | a87694dbd3be64a356a42be95e123360 | 接口签名 |
| ext | 否 | {“uetr”:“63742374673463847”} | 预留字段,依据订单类型返回 |
| 对应订单类型 | 示例 | 参数说明 |
| cash_pickup | {“pickupCode”:“63742374673463847”} | 取现凭证,现场出示 |
| wire | {“uetr”:“63742374673463847”} | UETR,可提供给收款银行以协助交易追踪 |
body 内容为字符串 ok:
ok
- 如未按要求返回
"ok",平台将视为推送失败。
- 失败后将按指数退避策略重试:初始间隔为 1 分钟,每次推送失败后,重试时间间隔加倍,最多重试 5 次。
- 如果 5 次仍未收到回应,则将在 10 分钟后进行最后一次推送。
查看当前国家支持的下发银行列表。
${baseUrl}/tf/v4/banks
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| country | 是 | string | 目标国家,例如 CHN |
{
"data": [
{
"code": "7083",
"name": "Bank Of China Limited"
},
{
"code": "7126",
"name": "The Bank Of Tokyo-Mitsubishi UFJ, Ltd"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 data信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| code | 003 | 银行编码 |
| name | The Bank Of Tokyo-Mitsubishi UFJ, Ltd | 银行名称 |
查看当前国家或地区支持的银行下属分行列表。
${baseUrl}/tf/v4/branch
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| country | 是 | string | 目标国家,例如 CHN |
| bankCode | 是 | string | 银行编码,例如 003 |
{
"data": [
{
"code": "127 000",
"name": "127 - DHAKA-SOUTH - TRUNCATION POINT"
},
{
"code": "127 151",
"name": "127 - DHAKA-SOUTH - DHAKA"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 data 信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功:成功 true,失败 false | |
| 参数名称 | 示例 | 参数说明 |
| code | 003 | 分行编码,使用此值 |
| name | The Bank Of Tokyo-Mitsubishi UFJ, Ltd 分行银行名称 | 分行银行名称 |
简要描述
查询下发通道支持的国家列表,用于获取可用国家信息。
请求URL
${baseUrl}/tf/v4/type/countries
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| type | 是 | string | 下发通道,例如 wire,详见下方字典 | wire |
返回示例
{
"data": [
{
"code": "ABW",
"name": "Aruba",
"shortCode": "AW"
},
{
"code": "AFG",
"name": "Afghanistan",
"shortCode": "AF"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | - | 响应数据,详见 data 信息 | 数组 |
| msg | 操作成功 | 响应消息 | 字符串 |
| status | 200 | 响应码 | 整数 |
| success | true | 是否成功(true/false) | 布尔值 |
data 对象字段说明
| 参数名称 | 示例 | 参数说明 |
| code | CHN | 国家编码(用于下单) |
| name | Afghanistan | 国家名称 |
| shortCode | AF | 国家简写 |
下发通道类型字典说明
| type | 参数说明 |
| wire | 全球转账 |
| ewallet | 电子钱包 |
| bank_account | 本地银行 |
| cash_pickup | 现金提款 |
查询当前国家和通道支持的货币以及相关通道合作伙伴。
${baseUrl}/tf/v4/currency/partner
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| type | 是 | string | 通道类型,例如 ewallet |
| country | 是 | string | 目标国家,例如 IDN |
{
"data": [
{
"country": "IDN",
"currency": "IDR",
"partner": "partner_artajasa",
"type": "ewallet"
},
{
"country": "IDN",
"currency": "IDR",
"partner": "partner_dana",
"type": "ewallet"
},
{
"country": "IDN",
"currency": "IDR",
"partner": "partner_gopay",
"type": "ewallet"
},
{
"country": "IDN",
"currency": "IDR",
"partner": "partner_linkaja",
"type": "ewallet"
},
{
"country": "IDN",
"currency": "IDR",
"partner": "partner_ovo",
"type": "ewallet"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 data 信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true 表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| country | IDN | 目的国家 |
| currency | IDR | 可下发币种 |
| type | ewallet | 可下发通道 |
| partner | partner_ovo | 通道支持的合作伙伴 |
获取可达目标国家列表。
${baseUrl}/tf/v4/countries
- Method: POST
- Content-Type: application/json
{
"data": [
{
"code": "ABW",
"name": "Aruba",
"shortCode": "AW"
},
{
"code": "AFG",
"name": "Afghanistan",
"shortCode": "AF"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据data信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| code | CHN | 国家,使用此值 |
| name | Afghanistan | 国家名称 |
| shortCode | AF | 国家简写 |
简要描述
查看当前国家支持的下发通道。
请求URL
${baseUrl}/tf/v4/target/types
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| country | 是 | string | 目标国家,例如 CHN | CHN |
返回示例
{
"data": [
{
"country": "HKG",
"currency": "CNH",
"type": "bank_account",
"partner": ""
},
{
"country": "HKG",
"currency": "USD",
"type": "wire",
"partner": "partner_ewallet"
},
{
"country": "HKG",
"currency": "HKD",
"type": "ewallet",
"partner": "partner_ewallet"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,data 信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | bool |
data 信息
| 参数名称 | 示例 | 参数说明 |
| country | HKG | 目的国家 |
| currency | USD | 可下发币种 |
| type | wire | 可下发通道 |
| partner | partner_ewallet | 通道支持的合作伙伴 |
获取可用的交易关系代码。
${baseUrl}/tf/v4/relationship/code
- Method:POST
- Content-Type:application/json
{
"data": [
{
"code": "01",
"name": "父母"
},
{
"code": "02",
"name": "兄弟姐妹"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 类型 | 示例 | 说明 |
| data | array | 见下表 | 响应数据 |
| msg | string | 操作成功 | 响应消息 |
| status | int | 200 | 响应码 |
| success | bool | true | 是否成功:true/false |
| 参数名称 | 类型 | 示例 | 说明 |
| code | string | 01 | 关系代码,使用此值 |
| name | string | 兄弟姐妹 | 交易关系描述 |
获取可使用的交易目的代码
${baseUrl}/tf/v4/remittancePurpose/code
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| country | 是 | string | 目标国家 | CHN |
| business | 是 | string | 业务类型 | C2C |
| type | 是 | string | 下发通道 | ewallet |
| currency | 是 | string | 下发币种 | CNY |
{
"data": [
{
"code": "001-01",
"name": "Family/living expense"
},
{
"code": "...",
"name": "..."
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 |
| data | json | 响应数据 |
| msg | 操作成功 | 响应消息 |
| status | 200 | 响应码 |
| success | true | 是否成功:true 成功, false 失败 |
| 参数名称 | 示例 | 说明 |
| code | 001-01 | code,使用此值 |
| name | Family/living expense | 交易目的描述 |
简要描述
获取可使用的资金来源代码
请求URL
${baseUrl}/tf/v4/sourceOfFunds/code
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| country | 是 | string | 目标国家 | CHN |
| business | 是 | string | 业务类型 | C2C |
返回示例
{
"data": [
{
"code": "01",
"name": "Bank Deposit"
},
{
"code": "03",
"name": "Redemption of Investment products"
},
{
"code": "05",
"name": "Loan"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | bool |
data 信息说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| code | 01 | 资金来源代码 | string |
| name | Loan | 资金来源描述 | string |
获取发送人职业信息,部分场景需要。
${baseUrl}/tf/v4/occupation/code
- Method: POST
- Content-Type: application/json
{
"data": [
{
"code": "001",
"name": "Agriculture"
},
{
"code": "002",
"name": "Doctor"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 data 信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true 表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| code | 01 | code,使用此值 |
| name | Loan | 职业描述 |
简要描述
针对CHN的账户校验
请求URL
${baseUrl}/tf/v4/verify/CHN
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| type | 是 | string | 下发类型,例如 bank_account、ewallet | bank_account |
| legalNameFirst | 是 | string | 用户名 | 张三 |
| legalNameLast | 是 | string | 用户姓 | 李 |
| account | 是 | string | 目标账户,银行卡号或者电子账户 | 622202********** |
返回示例
{
"data": {
"verifyResult": true,
"failReason": ""
},
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | - | 响应数据, 见下方 data 信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功 | bool |
data 对象字段说明
| 参数名称 | 示例 | 说明 | 类型 |
| verifyResult | true | 校验结果 | bool |
| failReason | | 失败原因 | string |
简要描述
针对IDN-bank_account的账户校验
请求URL
${baseUrl}/tf/v4/verify/CHN
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| accountNumber | 是 | string | 银行账号 | |
| bank | 是 | string | 银行代码 | |
| legalNameFirst | 是 | string | firstName | |
| legalNameLast | 是 | string | lastName | |
| mobileNumber | 否 | string | 手机号,例如+6285141631997 | +6285141631997 |
| idNumber | 否 | string | 证件号 | |
| addressLine | 否 | string | 地址 | |
| addressCity | 否 | string | 城市 | |
| addressState | 否 | string | 州 | |
返回示例
{
"data": {
"failReason": "",
"verifyResult": true
},
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,data信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:成功true,失败false | bool |
data 信息
| 参数名称 | 示例 | 参数说明 | 类型 |
| verifyResult | true | 校验结果 | bool |
| failReason | | 失败原因 | string |
简要描述
针对Africa-ewallet的电子账户校验
请求URL
${baseUrl}/tf/v4/verify/Africa/ewallet
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| country | 是 | string | 国家,例如HKG | HKG |
| ewalletId | 是 | string | 电子账户 | |
| legalNameFirst | 是 | string | firstName | |
| legalNameLast | 是 | string | lastName | |
返回示例
{
"data": {
"failReason": "",
"verifyResult": true
},
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,data信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | bool |
data 对象字段说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| verifyResult | true | 校验结果 | bool |
| failReason | | 失败原因 | string |
简要描述
针对KHM-bank_account的账户校验
请求URL
${baseUrl}/tf/v4/verify/KHM/bank_account
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| accountNumber | 是 | string | 银行账号 | |
| bank | 是 | string | 银行代码 | |
| legalNameFirst | 是 | string | firstName | |
| legalNameLast | 是 | string | lastName | |
返回示例
{
"data": {
"failReason": "",
"verifyResult": true
},
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | json | 响应数据,data信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功:true/false | bool |
data 对象字段说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| verifyResult | true | 校验结果 | bool |
| failReason | | 失败原因 | string |
简要描述
针对KOR-bank_account的账户校验
请求URL
${baseUrl}/tf/v4/verify/KOR/bank_account
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| accountNumber | 是 | string | 银行账号 | |
| bank | 是 | string | 银行代码 | |
| mobileNumber | 是 | string | 手机号,例如+6234234234 | +6234234234 |
| email | 否 | string | 邮箱 | |
返回示例
{
"data": {
"failReason": "",
"verifyResult": true
},
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 类型 |
| data | - | 响应数据,data信息 | object |
| msg | 操作成功 | 响应消息 | string |
| status | 200 | 响应码 | int |
| success | true | 是否成功(true/false) | bool |
data 对象字段说明
| 参数名称 | 示例 | 说明 | 类型 |
| verifyResult | true | 校验结果 | bool |
| failReason | | 失败原因 | string |
针对 PHL-ewallet 的电子账户校验
${baseUrl}/tf/v4/verify/PHL/ewallet
- 方法:POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| ewalletId | 是 | string | 电子账户 |
| legalNameFirst | 是 | string | firstName |
| legalNameLast | 是 | string | lastName |
{
"data": {
"failReason": "",
"verifyResult": true
},
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 | data 信息 |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功 | 成功 true,失败 false |
| 参数名称 | 示例 | 参数说明 |
| verifyResult | true | 校验结果 |
| failReason | | 失败原因 |
简要描述
查询指定国家州的信息,获取州列表后可进一步获取对应城市信息。当前主要用于印度尼西亚(IDN)。
请求URL
${baseUrl}/tf/v4/states
请求方式
- 方法:POST
- Content-Type: application/json
请求参数
| 参数名 | 必选 | 类型 | 说明 | 示例 |
| country | 是 | string | 目标国家 | CHN |
返回示例
{
"data": [
{
"code": "01",
"name": "Jawa Barat"
},
{
"code": "02",
"name": "Banten"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
返回参数说明
| 参数名称 | 示例 | 参数说明 | 备注 |
| data | - | 响应数据,详见 data 信息 | 数组 |
| msg | 操作成功 | 响应消息 | 字符串 |
| status | 200 | 响应码 | 整数 |
| success | true | 是否成功(true/false) | 布尔值 |
data 对象字段说明
| 参数名称 | 示例 | 说明 |
| code | 003 | 州编码 |
| name | Banten | 州名称 |
查询当前州的城市,目前用于 IDN。
${baseUrl}/tf/v4/city/code
- Method: POST
- Content-Type: application/json
| 参数名 | 必选 | 类型 | 说明 |
| country | 是 | string | 国家,例如 IDN |
| stateCode | 是 | string | 州编码,例如 01 |
{
"data": [
{
"code": "0100",
"name": "Kepala Daerah Provinsi Jawa Barat"
},
{
"code": "0102",
"name": "Kab. Bekasi"
}
],
"msg": "操作成功",
"status": 200,
"success": true
}
| 参数名称 | 示例 | 参数说明 | schema |
| data | json | 响应数据 data 信息 | |
| msg | 操作成功 | 响应消息 | |
| status | 200 | 响应码 | |
| success | true | 是否成功,true 表示成功 | |
| 参数名称 | 示例 | 参数说明 |
| code | 0102 | 城市编码 |
| name | Kab. Bekasi | 城市名称 |