# API文档 2.0 (Current)
# 概览
TripLink API全部基于HTTPS协议,接入方需要按照API说明通过POST方法调用,详见API列表。
所有API的请求体和响应体都是JSON
格式,所有字符都使用UTF-8
编码。接入方需要加入请求头Content-Type: application/json
。
所有API的请求和响应都包含一些公共参数,分别位于请求头和响应头,详见公共参数。
所有API的请求和响应都进行了加密和签名,详见加密机制,签名机制。
环境 | 地址 |
---|---|
测试 | https://compass.uat.ctripqa.com/compass/api |
生产(海外) | https://compass.triplinkintl.com/compass/api |
注意
请直接使用域名地址访问,不要设置IP白名单。 compass.triplinkintl.com域名是部署在海外的,为了您们能更稳定的使用,我们建议贵司能测一下我们服务间的网速。如果网速存在较慢或不稳定情况我们建议贵司能配置下海外代理,加速请求。
# 公共参数
# 请求头
名称 | 必填 | 描述 | 备注 | 示例值 |
---|---|---|---|---|
customerId | Y | 客户ID | 预先配置。 | ASR3F1B4Z5 |
service | Y | API名称 | 详见API列表。 | createCard |
version | Y | API版本 | 当前版本2.0 。 | 2.0 |
requestId | Y | 请求流水号 | 每个请求唯一,建议使用UUID 。 | 472f37e3-a803-47ed-b9b6-32632895b466 |
timestamp | Y | 请求时间 | UNIX时间戳(毫秒)。 | 1642747436113 |
sign | Y | 请求数据签名 | 详见签名机制。 | +Ue0BiWsCOxbYD39Ldd (部分数据) |
# 响应头
名称 | 描述 | 备注 | 示例值 |
---|---|---|---|
customerId | 客户ID | 请求头原样返回。 | ASR3F1B4Z5 |
service | API名称 | 请求头原样返回。 | createCard |
version | API版本 | 请求头原样返回。 | 2.0 |
requestId | 请求流水号 | 请求头原样返回。 | 472f37e3-a803-47ed-b9b6-32632895b466 |
timestamp | 响应时间 | UNIX时间戳(毫秒)。 | 1642747437393 |
code | 响应码 | 枚举值,3 位数字,详见响应码下拉框。 | 200 (非200 表示API调用失败) |
message | 响应码详情 | 详见响应码下拉框。 | succeed |
sign | 响应数据签名 | 详见签名机制。 | WO8waUZ30bYlKp/+s9m (部分数据) |
响应码
code | message | 备注 |
---|---|---|
200 | succeed | 成功。 |
400 | payload decrypt failed | 无法解密数据。 |
403 | the ip is not whitelisted | 请求IP不在白名单。 |
405 | unsupported method | 请求方法不支持。(仅支持POST ) |
406 | too many requests | 请求过于频繁。 |
407 | verify sign failed | 无法验证签名。 |
417 | the parameter is null or invalid | 请求头必填参数为空。 |
500 | (不固定) | 系统错误。 |
# API列表
名称 | 方法 | 请求头service参数 |
---|---|---|
创建卡 | POST | createCard |
修改卡 | POST | updateCard |
充值卡 | POST | rechargeCard |
提现卡 | POST | withdrawCard |
锁定卡 | POST | suspendCard |
解锁卡 | POST | unSuspendCard |
注销卡 | POST | closeCard |
查询卡 | POST | queryCardDetail |
查询账户额度 | POST | queryCustomerCredit |
查询授权交易 | POST | queryAuthTransactionByPage |
查询清算交易 | POST | settlementTransactionQuery |
发起账户提现 | POST | payoutCreate |
查询账户提现 | POST | payoutQuery |
查询汇率 | POST | fxQuote |
发起换汇订单 | POST | fxCreate |
查询换汇订单 | POST | fxQuery |
# 加密机制
为保证数据的安全性,TripLink会对每个请求和响应进行加密。
接入方与TripLink需使用对称加密算法AES/ECB/PKCS5Padding
,对请求体和响应体进行加密与解密,结果采用Base64
编码。
TripLink需要接入方提前提供128
位AES
密钥(Base64
编码格式),参考准备工作。
# 请求体
原始请求体各字段含义详见下方各API说明。
接入方:对原始请求体先使用AES
密钥加密,再进行Base64
编码。结果作为实际请求体中payload
字段的值。发送实际请求体。
TripLink:对收到的实际请求体的payload
字段的值先进行Base64
解码,再使用AES
密钥解密。结果即为原始请求体。
# 响应体
原始响应体各字段含义详见下方各API说明。
TripLink:对原始响应体先使用AES
密钥加密,再进行Base64
编码。结果作为实际响应体中payload
字段的值。发送实际响应体。
接入方:对收到的实际响应体中payload
字段的值先进行Base64
解码,再使用AES
密钥解密。结果即为原始响应体。
Java工具类示例
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import static java.nio.charset.StandardCharsets.UTF_8;
public class AesUtils {
private static final Base64.Encoder ENCODER = Base64.getEncoder();
private static final Base64.Decoder DECODER = Base64.getDecoder();
/**
* replace your aesKey
*/
private static String aesKey = "amJPkH98aHGXskiH91r0dw==";
/**
* example for get encrypted payload
*/
public static void main(String[] args) throws Exception {
// replace your request payload
String payload = "{\"requestId\":\"7ca6f405-acb4-4dd1-b35e-2b741b595e98\",\"customerId\":\"CSR9372F4E8ADG85\",\"cardLogId\":\"85a934fafb02cd5f27h53d2764bd884075c123fc87a04a3ddf919c710f281234\"}";
// encrypt payload
String encryptPayload = aesEncrypt(newAesKey(aesKey), payload);
// print result
System.out.println(encryptPayload);
}
public static String aesEncrypt(SecretKey key, String plaintext) throws Exception {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherBytes = cipher.doFinal(plaintext.getBytes(UTF_8));
return new String(ENCODER.encode(cipherBytes), UTF_8);
}
public static String aesDecrypt(SecretKey key, String ciphertext) throws Exception {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] cipherBytes = DECODER.decode(ciphertext.getBytes(UTF_8));
return new String(cipher.doFinal(cipherBytes), UTF_8);
}
public static SecretKey newAesKey(String keyStr) {
return new SecretKeySpec(DECODER.decode(keyStr.getBytes(UTF_8)), "AES");
}
public static String toAesKeyStr(SecretKey key) {
return new String(ENCODER.encode(key.getEncoded()), UTF_8);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Java 6
用户可以考虑使用org.apache.commons.codec.binary.Base64
类代替Java 8
新增的java.util.Base64
类
C#工具类示例
using System;
using System.Security.Cryptography;
using System.Text;
public class AesUtils {
private static readonly Base64Encoder ENCODER = new Base64Encoder();
private static readonly Base64Decoder DECODER = new Base64Decoder();
/**
* replace your aesKey
*/
private static string aesKey = "amJPkH98aHGXskiH91r0dw==";
/**
* example for get encrypted payload
*/
public static void Main(string[] args) {
// replace your request payload
string payload = "{\"requestId\":\"7ca6f405-acb4-4dd1-b35e-2b741b595e98\",\"customerId\":\"CSR9372F4E8ADG85\",\"cardLogId\":\"85a934fafb02cd5f27h53d2764bd884075c123fc87a04a3ddf919c710f281234\"}";
// encrypt payload
string encryptPayload = AesEncrypt(NewAesKey(aesKey), payload);
// print result
Console.WriteLine(encryptPayload);
}
public static string AesEncrypt(byte[] key, string plaintext) {
using(Aes aes = Aes.Create()) {
aes.Key = key;
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] plainBytes = Encoding.UTF8.GetBytes(plaintext);
byte[] cipherBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
return ENCODER.Encode(cipherBytes);
}
}
public static string AesDecrypt(byte[] key, string ciphertext) {
using(Aes aes = Aes.Create()) {
aes.Key = key;
aes.Mode = CipherMode.ECB;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
byte[] cipherBytes = DECODER.Decode(ciphertext);
byte[] plainBytes = decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
return Encoding.UTF8.GetString(plainBytes);
}
}
public static byte[] NewAesKey(string keyStr) {
return DECODER.Decode(keyStr);
}
public static string ToAesKeyStr(byte[] key) {
return ENCODER.Encode(key);
}
}
public class Base64Encoder {
public string Encode(byte[] data) {
return Convert.ToBase64String(data);
}
}
public class Base64Decoder {
public byte[] Decode(string data) {
return Convert.FromBase64String(data);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
PHP工具类示例
<?php declare(strict_types=1);
class AesUtils {
public static function aesEncrypt(string $keyStr, string $plaintext): string {
return base64_encode(openssl_encrypt($plaintext, 'AES-128-ECB', base64_decode($keyStr), OPENSSL_RAW_DATA));
}
public static function aesDecrypt(string $keyStr, string $ciphertext): string {
return openssl_decrypt(base64_decode($ciphertext), 'AES-128-ECB', base64_decode($keyStr), OPENSSL_RAW_DATA);
}
}
2
3
4
5
6
7
8
9
10
11
12
# 签名机制
为保证API的安全调用,TripLink会对每个请求和响应通过签名进行身份验证。
接入方与TripLink需使用签名算法SHA256withRSA
,对请求待签字符串和响应待签字符串进行签名,签名结果采用Base64
编码,对应请求头和响应头的sign
字段。
接入方会提前收到TripLink为您分配的2048
位RSA
公钥T(Base64
编码格式),同时TripLink需要接入方提前提供2048
位RSA
公钥U(Base64
编码格式),参考准备工作。
整个请求与响应流程涉及2
对RSA
密钥:属于TripLink的公钥T与私钥T,属于接入方的公钥U与私钥U。公钥用于验证签名,私钥用于生成签名。
# 请求待签字符串
所有字段按如下顺序依次使用|
符号连接。
customerId|service|version|requestId|timestamp|payload
customerId
,service
,version
,requestId
和timestamp
来自请求头中对应字段。
payload
来自实际请求体中加密过的payload
字段。
接入方:对请求待签字符串先使用私钥U生成签名,再进行Base64
编码。结果作为请求头中sign
字段的值。
TripLink:对收到的请求头中sign
字段的值先进行Base64
解码,再使用公钥U验证签名。
# 响应待签字符串
所有字段按如下顺序依次使用|
符号连接。
customerId|service|version|requestId|timestamp|code|message|payload
customerId
,service
,version
,requestId
,timestamp
,code
和message
来自响应头中对应字段。
payload
来自实际响应体中payload
字段。
TripLink:对响应待签字符串先使用私钥T生成签名,再进行Base64
编码。结果作为响应头中sign
字段的值。
接入方:对收到的响应头中sign
字段的值先进行Base64
解码,再使用公钥T验证签名。
Java工具类示例
import org.apache.commons.lang3.StringUtils;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import static java.nio.charset.StandardCharsets.UTF_8;
public class RsaUtils {
private static final Base64.Encoder ENCODER = Base64.getEncoder();
private static final Base64.Decoder DECODER = Base64.getDecoder();
/**
* replace your private rsaKey
*/
private static String rsaPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoyUMgQDCtymWE" +
"83IGbrbYgrIWK++QzQBsUIypci1hPNEzSuc9X34ICpsFbtyp9RSYX4Es+nNrKE2I" +
"SLdtTsQescPQHSwl6OW7fzk/jmaZpCFXznU+vgrnvhDMIGTvQTN2M3hdfgMGvF3B" +
"DsDvep8ZQ84YWIjJdLGvlXvJ/OjyGQDOKoclMfi3gVkI0izlZUDdBGgHUpGAlMpK" +
"A8yp28GCURioMrsr7CtSjmVP0lPsPrP5sI6Vk0qAlxt6GGVTDghZI3flixuiEpFL" +
"vOyLJjw7TkTCUvFcWsLn15F45TA2AGUzzWHcMdwiUKJEQBy0FlFoFET7GjnQkimC" +
"UU0QZJQ7AgMBAAECggEAAOXFFhxRRfNQE+NphVA8Z61WPhjwtq/oYysQfGwvgpdc" +
"s22gCisCVA+eYGqFAOBdQiwr1y3jxDucIe/lDc8/6rveQzKMhA0Xf6Y/Cy/6KrH9" +
"PWbLJ9DB5RaVJ0i60KzjlarTZoffgz8oLnkiHIPl6a/7HhUGcS/OLBVa6amPIY5v" +
"QmY14gVHh8K2FdZLBL3F2i7djAwBIlqT2EgQdxKoq0RMsvKmqlLePLfBytAu6RxT" +
"hC0vqANPJoPZVz8rV8ixsWINmJ2jx9A+xaGTHYAC6MdcM7sButDhJccIX2H6Zyem" +
"bl0KhfGmrerKZTmeqI/JjsJyaGsXV+h4qAyDpXwcJQKBgQDloiinUDrZZUMnU9af" +
"DacDZ4AWluefmnTvpO3JRKS8wYGYSSE0Aee4CnHTyNv7FFsGorQJgMFGHFNvHFQ1" +
"pk1+tuOgqycVPec6EzLgBPJC/1dMRRPk9JDXMpIM8dYkQ93phvfLqSKOCagGHOdR" +
"PMpk1LBhMUVmvHijFzX2+wMExwKBgQC8Ko9wvbT5GAiu6rIz1PVDvD5dQbv7jXPR" +
"Mu0QJlFJH5gQ5rVBZdxfBIjpQe4aMDtdot3KWkNjpgJm4OGA4T9E5OpHIIHZ+9cr" +
"PLEq9Evp9llrBEFICVC+DI3DZWC9+6Ussrs5p1y2Wyjuai6kZnDuvroUXpV1a6aE" +
"MydQNSWY7QKBgQC4ppOgLsCTrXy5dA4h6d2BvElgYMoyKgab6XiYHo2FhujJ5ww/" +
"AMUu1Z9AWMSjenPTuyOgfJtt4DsrHpGMboTkPvZ9bQNJbnSv215Oi0uvmhm9p9Je" +
"ilap5O1SYWj70mLwdOpvJzs1Egi9maJcTdDGEc0e6nrPKQCszG5FgwSjYwKBgG8f" +
"N0yeS/Ta863Q3mJrvlg9IBtUyZ4aAC6oQ4XJCzIC3XwFsz8m14iple0iyWlf2H9I" +
"wnBQ9AEyNbLp1WKWIxYdlhlhIi5IYt6e3gX+9aH6oP3pKmBPWAaURVgCU6p+pSIL" +
"fzPiGYd7uGVsAZWHBeSIcD29SchpRZJG302nxUdVAoGAQYSVYM7TMeTuQgDAXUD5" +
"g4ulLpZKiq910M7DufQ4tgrZOwT44I1ihDXh0s2BKg8+PLJPT1ldgH/Dtglwosv1" +
"peD0Lep3zSwrTXpyMstdCW16bl96FOKGP8H8c2zXXG7e39E6D9rPSKDt5TtGVScS" +
"PYsWAsMHzfsX2F4aUJNUuN0=";
/**
* example for get encrypted sign
*/
public static void main(String[] args) throws Exception {
// request head params
String customerId = "CSR9372F4E8ADG85";
String service = "queryCard";
String version = "2.0";
String requestId = "7ca6f405-acb4-4dd1-b35e-2b741b595e98";
long timestamp = 1741846955993L;
// payload after aesKey encryption, refer to AesUtils
String payload = "A/R7OP/qWzmIGDwfs0I3c8XmOfwRshvO1NaHDUIaq0yZAnqptgt7WiEXXF6Cg6LgbQ8+p5M6eikXuBLeTe+zxmkjF1Mc/nrnjyVwqwd7/WsWhYJ4YCEGAjjbGO8hftwZsVEufCRwIrL+wxbp8d7cD3AwVxuHr1+mkr2Rb+ox9j4qB5Z3dkUUpNnaMdIxqtMkXZjydoe9A8sAgYEmK28TTkUf/pYGWv7Wj0KtBkX4rMU=";
// generate sign
String sign = buildRequestSignContent(customerId, service, version, requestId, timestamp, payload);
// encrypt sign
String encryptSign = rsaSign(newRsaPrivateKey(rsaPrivateKey), sign);
// print result
System.out.println(encryptSign);
}
public static String rsaSign(PrivateKey privateKey, String content) throws Exception {
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initSign(privateKey);
signer.update(content.getBytes(UTF_8));
return new String(ENCODER.encode(signer.sign()), UTF_8);
}
public static boolean rsaVerify(PublicKey publicKey, String content, String signature) throws Exception {
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initVerify(publicKey);
signer.update(content.getBytes(UTF_8));
return signer.verify(DECODER.decode(signature.getBytes(UTF_8)));
}
public static PrivateKey newRsaPrivateKey(String privateKeyStr) throws Exception {
byte[] bytes = DECODER.decode(privateKeyStr.getBytes(UTF_8));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(bytes));
}
public static PublicKey newRsaPublicKey(String publicKeyStr) throws Exception {
byte[] bytes = DECODER.decode(publicKeyStr.getBytes(UTF_8));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(new X509EncodedKeySpec(bytes));
}
public static String toRsaPrivateKeyStr(PrivateKey privateKey) {
return new String(ENCODER.encode(privateKey.getEncoded()), UTF_8);
}
public static String toRsaPublicKeyStr(PublicKey publicKey) {
return new String(ENCODER.encode(publicKey.getEncoded()), UTF_8);
}
private static String buildRequestSignContent(String customerId, String service, String version, String requestNo, long timestamp, String payload) {
StringBuilder builder = new StringBuilder();
if (StringUtils.isNotBlank(customerId)) {
builder.append(customerId).append("|");
}
if (StringUtils.isNotBlank(service)) {
builder.append(service).append("|");
}
if (StringUtils.isNotBlank(version)) {
builder.append(version).append("|");
}
if (StringUtils.isNotBlank(requestNo)) {
builder.append(requestNo).append("|");
}
if (0 != timestamp) {
builder.append(timestamp).append("|");
}
if (StringUtils.isNotBlank(payload)) {
builder.append(payload);
}
return builder.toString();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
Java 6
用户可以考虑使用org.apache.commons.codec.binary.Base64
类代替Java 8
新增的java.util.Base64
类
C#工具类示例
using System;
using System.Security.Cryptography;
using System.Text;
public class RsaUtils {
private static readonly Base64Encoder ENCODER = new Base64Encoder();
private static readonly Base64Decoder DECODER = new Base64Decoder();
/**
* replace your private rsaKey
*/
private static string rsaPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCoyUMgQDCtymWE" +
"83IGbrbYgrIWK++QzQBsUIypci1hPNEzSuc9X34ICpsFbtyp9RSYX4Es+nNrKE2I" +
"SLdtTsQescPQHSwl6OW7fzk/jmaZpCFXznU+vgrnvhDMIGTvQTN2M3hdfgMGvF3B" +
"DsDvep8ZQ84YWIjJdLGvlXvJ/OjyGQDOKoclMfi3gVkI0izlZUDdBGgHUpGAlMpK" +
"A8yp28GCURioMrsr7CtSjmVP0lPsPrP5sI6Vk0qAlxt6GGVTDghZI3flixuiEpFL" +
"vOyLJjw7TkTCUvFcWsLn15F45TA2AGUzzWHcMdwiUKJEQBy0FlFoFET7GjnQkimC" +
"UU0QZJQ7AgMBAAECggEAAOXFFhxRRfNQE+NphVA8Z61WPhjwtq/oYysQfGwvgpdc" +
"s22gCisCVA+eYGqFAOBdQiwr1y3jxDucIe/lDc8/6rveQzKMhA0Xf6Y/Cy/6KrH9" +
"PWbLJ9DB5RaVJ0i60KzjlarTZoffgz8oLnkiHIPl6a/7HhUGcS/OLBVa6amPIY5v" +
"QmY14gVHh8K2FdZLBL3F2i7djAwBIlqT2EgQdxKoq0RMsvKmqlLePLfBytAu6RxT" +
"hC0vqANPJoPZVz8rV8ixsWINmJ2jx9A+xaGTHYAC6MdcM7sButDhJccIX2H6Zyem" +
"bl0KhfGmrerKZTmeqI/JjsJyaGsXV+h4qAyDpXwcJQKBgQDloiinUDrZZUMnU9af" +
"DacDZ4AWluefmnTvpO3JRKS8wYGYSSE0Aee4CnHTyNv7FFsGorQJgMFGHFNvHFQ1" +
"pk1+tuOgqycVPec6EzLgBPJC/1dMRRPk9JDXMpIM8dYkQ93phvfLqSKOCagGHOdR" +
"PMpk1LBhMUVmvHijFzX2+wMExwKBgQC8Ko9wvbT5GAiu6rIz1PVDvD5dQbv7jXPR" +
"Mu0QJlFJH5gQ5rVBZdxfBIjpQe4aMDtdot3KWkNjpgJm4OGA4T9E5OpHIIHZ+9cr" +
"PLEq9Evp9llrBEFICVC+DI3DZWC9+6Ussrs5p1y2Wyjuai6kZnDuvroUXpV1a6aE" +
"MydQNSWY7QKBgQC4ppOgLsCTrXy5dA4h6d2BvElgYMoyKgab6XiYHo2FhujJ5ww/" +
"AMUu1Z9AWMSjenPTuyOgfJtt4DsrHpGMboTkPvZ9bQNJbnSv215Oi0uvmhm9p9Je" +
"ilap5O1SYWj70mLwdOpvJzs1Egi9maJcTdDGEc0e6nrPKQCszG5FgwSjYwKBgG8f" +
"N0yeS/Ta863Q3mJrvlg9IBtUyZ4aAC6oQ4XJCzIC3XwFsz8m14iple0iyWlf2H9I" +
"wnBQ9AEyNbLp1WKWIxYdlhlhIi5IYt6e3gX+9aH6oP3pKmBPWAaURVgCU6p+pSIL" +
"fzPiGYd7uGVsAZWHBeSIcD29SchpRZJG302nxUdVAoGAQYSVYM7TMeTuQgDAXUD5" +
"g4ulLpZKiq910M7DufQ4tgrZOwT44I1ihDXh0s2BKg8+PLJPT1ldgH/Dtglwosv1" +
"peD0Lep3zSwrTXpyMstdCW16bl96FOKGP8H8c2zXXG7e39E6D9rPSKDt5TtGVScS" +
"PYsWAsMHzfsX2F4aUJNUuN0=";
/**
* example for get encrypted sign
*/
public static void Main(string[] args) {
// request head params
string customerId = "CSR9372F4E8ADG85";
string service = "queryCard";
string version = "2.0";
string requestId = "7ca6f405-acb4-4dd1-b35e-2b741b595e98";
long timestamp = 1741846955993L;
// payload after aesKey encryption, refer to AesUtils
string payload = "A/R7OP/qWzmIGDwfs0I3c8XmOfwRshvO1NaHDUIaq0yZAnqptgt7WiEXXF6Cg6LgbQ8+p5M6eikXuBLeTe+zxmkjF1Mc/nrnjyVwqwd7/WsWhYJ4YCEGAjjbGO8hftwZsVEufCRwIrL+wxbp8d7cD3AwVxuHr1+mkr2Rb+ox9j4qB5Z3dkUUpNnaMdIxqtMkXZjydoe9A8sAgYEmK28TTkUf/pYGWv7Wj0KtBkX4rMU=";
// generate sign
string sign = BuildRequestSignContent(customerId, service, version, requestId, timestamp, payload);
// encrypt sign
string encryptSign = RsaSign(NewRsaPrivateKey(rsaPrivateKey), sign);
// print result
Console.WriteLine(encryptSign);
}
public static string RsaSign(RSA privateKey, string content) {
byte[] dataBytes = Encoding.UTF8.GetBytes(content);
byte[] signatureBytes = privateKey.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
return ENCODER.Encode(signatureBytes);
}
public static bool RsaVerify(RSA publicKey, string content, string signature) {
byte[] dataBytes = Encoding.UTF8.GetBytes(content);
byte[] signatureBytes = DECODER.Decode(signature);
return publicKey.VerifyData(dataBytes, signatureBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}
public static RSA NewRsaPrivateKey(string privateKeyStr) {
byte[] privateKeyBytes = DECODER.Decode(privateKeyStr);
RSA rsa = RSA.Create();
rsa.ImportPkcs8PrivateKey(privateKeyBytes, out _);
return rsa;
}
public static RSA NewRsaPublicKey(string publicKeyStr) {
byte[] publicKeyBytes = DECODER.Decode(publicKeyStr);
RSA rsa = RSA.Create();
rsa.ImportSubjectPublicKeyInfo(publicKeyBytes, out _);
return rsa;
}
public static string ToRsaPrivateKeyStr(RSA privateKey) {
byte[] privateKeyBytes = privateKey.ExportPkcs8PrivateKey();
return ENCODER.Encode(privateKeyBytes);
}
public static string ToRsaPublicKeyStr(RSA publicKey) {
byte[] publicKeyBytes = publicKey.ExportSubjectPublicKeyInfo();
return ENCODER.Encode(publicKeyBytes);
}
private static string BuildRequestSignContent(string customerId, string service, string version, string requestNo, long timestamp, string payload) {
StringBuilder builder = new StringBuilder();
if (!string.IsNullOrEmpty(customerId)) {
builder.Append(customerId).Append("|");
}
if (!string.IsNullOrEmpty(service)) {
builder.Append(service).Append("|");
}
if (!string.IsNullOrEmpty(version)) {
builder.Append(version).Append("|");
}
if (!string.IsNullOrEmpty(requestNo)) {
builder.Append(requestNo).Append("|");
}
if (timestamp != 0) {
builder.Append(timestamp).Append("|");
}
if (!string.IsNullOrEmpty(payload)) {
builder.Append(payload);
}
return builder.ToString();
}
}
public class Base64Encoder {
public string Encode(byte[] data) {
return Convert.ToBase64String(data);
}
}
public class Base64Decoder {
public byte[] Decode(string data) {
return Convert.FromBase64String(data);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
可能需要根据
C#
运行环境进行调整,仅供参考
PHP工具类示例
<?php declare(strict_types=1);
class RsaUtils {
public static function rsaSign(string $privateKeyStr, string $content): string {
openssl_sign($content, $signature, self::pemFormat($privateKeyStr, 'PRIVATE KEY'), OPENSSL_ALGO_SHA256);
return base64_encode($signature);
}
public static function rsaVerify(string $publicKeyStr, string $content, string $signature): bool {
return openssl_verify($content, base64_decode($signature), self::pemFormat($publicKeyStr, 'PUBLIC KEY'), OPENSSL_ALGO_SHA256) === 1;
}
private static function pemFormat(string $keyStr, string $label): string {
return "-----BEGIN {$label}-----\n" . chunk_split($keyStr, 64) . "-----END {$label}-----\n";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardCurrencyCode | String | N | 卡币种 | 默认与结算币种相同。 ISO 4217 货币编号, 3 位数字。 |
settlementCurrencyCode | String | Y | 结算币种 | ISO 4217 货币编号,3 位数字。 |
exchangeCurrencyCode | String | N | 卖出币种 | ISO 4217 货币编号,3 位数字。卡产品为C05时生效且必填。刷卡授权消费时自动将卖出币种兑换为结算币种。 |
activeDate | String | Y | 生效日期 | 格式 yyyy-MM-dd 。 |
inactiveDate | String | Y | 失效日期 | 格式 yyyy-MM-dd 。 |
cardLimit | Number | Y | 额度 | 小数,对应卡币种。 |
minAuthAmount | Number | Y | 单次授权金额下限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
maxAuthAmount | Number | Y | 单次授权金额上限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
maxAuthTimes | Number | Y | 授权次数上限 | 整数。1 :单次卡,-1 :不限次数。 |
cardCloseUsage | Number | N | 自动注销百分比 | 整数,范围0 -100 ,默认0 。当已清算金额占额度比大于等于此值,卡会被自动注销。 特殊值 0 :卡片不会自动注销。(预付费卡,此字段不生效) |
supportedMccGroup | String | Y | 接受的MCC组 | 接受的商户类别组名,由TripLink定义。 非此商户类别组请求的交易会被拒绝。 |
supportedMid | String | N | 接受的商户ID | 非此商户请求的交易会被拒绝。 |
supportedAcquirerId | String | N | 接受的收单行ID | 非此收单行请求的交易会被拒绝。 |
multipleCurrencyCard | Boolean | N | 是否允许非卡币种交易 | 默认true 。 |
allow3ds | Boolean | N | 是否接受3DS交易 | 默认true 。(仅香港万事达卡生效) |
cardProductCode | String | Y | 卡产品 | 枚举值,详见卡分类层次下拉框。 |
cardType | String | Y | 卡类型 | 枚举值,详见卡分类层次下拉框。 |
cardLabel | String | Y | 卡组织 | 枚举值,详见卡分类层次下拉框。 |
cardBin | String | N | 发卡机构识别号 | 可指定开卡卡BIN段,请联系TripLink提供。 |
quoteId | String | N | 汇率ID | 查询汇率 返回的汇率ID。 若有效则以此汇率兑换,若无效则以实时汇率兑换。 (仅卡产品为 C05 时生效) |
timeZone | string | N | 卡时区 | 卡生效与失效日期时区,格式举例: 中国标准时间 GMT+08:00 ,北美东部标准时间 GMT-05:00 。默认值可在商户系统/设置/全局参数处配置。 |
userReferenceMap | Object | N | 用户自定义字段 | String 键值对,共20 个键可选。范围 useRef1Txt -useRef20Txt 。 |
TripLink仅会保存和展示用户自定义字段,没有业务逻辑与此相关。
卡分类层次
名称 | 描述 | 备注 |
---|---|---|
cardProductCode | 卡产品 | 枚举值,C01 ;C02 ;C03 ;C04 ;C05 |
cardType | 卡类型 | 枚举值,详见卡分类层次详情下拉框。 |
cardLabel | 卡组织 | 枚举值,MasterCard ;VISA |
卡分类层次详情
卡产品 | 卡账户 | 发卡地区 | 卡类型 | 卡组织 |
---|---|---|---|---|
C01 | 贷记 | 中国香港 | MCO ;GWTTP ;GWTTP-MBA ;GWTTP-MBG ;GWTTP-MBH ;GWTTP-MBI ;GWTTP-MBJ | MasterCard |
C01 | 贷记 | 美国 | USDVCC | MasterCard ;VISA |
C02 | 借记 | 中国香港 | MCO GWTTP ;GWTTP-MBA ;GWTTP-MBG ;GWTTP-MBH ;GWTTP-MBI ;GWTTP-MBJ | MasterCard |
C02 | 借记 | 新加坡 | TAE ;B2B | VISA |
C03 | 预付费 | 美国 | USDVCC | MasterCard ;VISA |
C04 | 贷记 | 新加坡 | TAE ;B2B | VISA |
C05 | 借记(换汇) | 中国香港 | MCO GWTTP ;GWTTP-MBA ;GWTTP-MBG ;GWTTP-MBH ;GWTTP-MBI ;GWTTP-MBJ | MasterCard |
C05 | 借记(换汇) | 新加坡 | TAE ;B2B | VISA |
请求体示例
{
"requestId": "1ac60d08-0e15-47da-a341-7287dd46ff39",
"customerId": "CSR47284A93E35E4",
"cardCurrencyCode": "840",
"settlementCurrencyCode": "840",
"activeDate": "2022-01-01",
"inactiveDate": "2024-06-01",
"cardLimit": 1000.12,
"minAuthAmount": 3.45,
"maxAuthAmount": 500.67,
"maxAuthTimes": -1,
"cardCloseUsage": 40,
"supportedMccGroup": "ecom",
"multipleCurrencyCard": true,
"cardProductCode": "C02",
"cardBin":"522981",
"cardType": "GWTTP",
"cardLabel": "MasterCard",
"userReferenceMap": {
"useRef1Txt": "anything"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
cardNum | String | 卡号 | 16 位卡号。 |
cardExpirationDate | String | 有效期 | 格式 yyMM 。 |
cvv2 | String | 卡CVV2 | 安全码。 |
cardType | String | 卡品牌 | |
cardLabel | String | 卡组织 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
100001 | Reduplicative requestid | requestId 重复。 |
200002 | Both MCC, MCC groups and [acquirerId,merchantId] are all empty | supportedMccGroup 与(supportedMid 或supportedAccquirerId )都为空。 |
200003 | Customer info not find | 客户信息不存在。 |
200007 | Global parameter not find | 客户全局配置不存在。 |
200008 | InactiveDate must be greater than activeDate | 不可交易日必须晚于可交易日。 |
200013 | Not find the mapping between the cardCurrency and settlementCurrency | 结算账户不存在。 |
200014 | AcquirerId/mid must not be empty | 收单行ID与商户ID必须同时存在。 |
200022 | Not find active pan number config | 卡号生成失败。 |
200029 | Card exists pending request | 其他操作执行中。 |
200036 | card bin not support | 卡品牌不支持。 |
200037 | InactiveDate must submit | 卡不可交易日生成失败。 |
200038 | cardCloseUsage not be null | cardCloseUsage 格式不正确。 |
200040 | Invalid global parameter (indate) | 卡有效期配置不存在。 |
200043 | mcc group is empty | supportedMccGroup 为空。 |
200044 | mcc group all is not supported | supportedMccGroup 不可为all 。 |
200048 | (不固定) | 发卡行处理失败。 |
200060 | (不固定) | 发卡行请求参数错误。 |
201000 | Card available balance exceeds the maximum limit | 卡可用额度超过限额。 |
300004 | mcc link channel group is empty | 发卡行MCC组为空。 |
300005 | Trading is risky | 高风险请求。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"cardLogId": "9448b6a7b3bcb22f99c1bedd246aba092c7932fd5e7f3042607bf58bc7cc3d83",
"cardNum": "5229811460053354",
"cardExpirationDate": "2406",
"cvv2": "123",
"cardType": "GWTTP",
"cardLabel": "MasterCard"
}
2
3
4
5
6
7
8
9
10
# SDK示例
Java SDK
public void testCreateCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardCreateRequest request = new CardCreateRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardCurrencyCode("840");
request.setSettlementCurrencyCode("840");
request.setActiveDate("2022-01-01");
request.setInactiveDate("2024-06-01");
request.setCardLimit(BigDecimal.valueOf(1000.12));
request.setMinAuthAmount(BigDecimal.valueOf(3.45));
request.setMaxAuthAmount(BigDecimal.valueOf(500.67));
request.setMaxAuthTimes(-1);
request.setCardCloseUsage(40);
request.setSupportedMccGroup("ecom");
request.setMultipleCurrencyCard(true);
request.setCardBin("522981");
request.setCardType("GWTTP");
request.setCardLabel("MasterCard");
Map<String, String> userReference = new HashMap<>();
userReference.put("useRef1Txt", "anything");
request.setUserReferenceMap(userReference);
CardCreateResponse response = tripLinkApi.create(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PHP SDK
public function testCreateCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new CreateCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardCurrencyCode('840');
$request->setSettlementCurrencyCode('840');
$request->setActiveDate('2022-01-01');
$request->setInactiveDate('2024-06-01');
$request->setCardLimit(1000.12);
$request->setMinAuthAmount(3.45);
$request->setMaxAuthAmount(500.67);
$request->setMaxAuthTimes(-1);
$request->setCardCloseUsage(40);
$request->setSupportedMccGroup('ecom');
$request->setMultipleCurrencyCard(true);
$request->setCardBin('522981');
$request->setCardType('GWTTP');
$request->setCardLabel('MasterCard');
$userReference = new UserReference();
$userReference->setUseRef1Txt('anything');
$request->setUserReferenceMap($userReference);
$response = $tripLinkAgent->createCard($request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 修改卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
activeDate | String | N | 生效日期 | 格式 yyyy-MM-dd 。 |
inactiveDate | String | N | 失效日期 | 格式 yyyy-MM-dd 。 |
cardLimit | Number | N | 额度 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
minAuthAmount | Number | N | 单次授权金额下限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
maxAuthAmount | Number | N | 单次授权金额上限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
cardCloseUsage | Number | N | 自动注销百分比 | 整数,范围0 -100 ,默认0 。当已清算金额占额度比大于等于此值,卡会被自动注销。 特殊值 0 :卡片不会自动注销。(预付费卡,此字段不生效) |
supportedMccGroup | String | N | 接受的MCC组 | 接受的商户类别组名,由TripLink定义。 非此商户类别组请求的交易会被拒绝。 |
supportedMid | String | N | 接受的商户ID | 非此商户请求的交易会被拒绝。 |
supportedAcquirerId | String | N | 接受的收单行ID | 非此收单行请求的交易会被拒绝。 |
multipleCurrencyCard | Boolean | N | 是否允许非卡币种交易 | |
allow3ds | Boolean | N | 是否接受3DS交易 | (仅香港万事达卡生效) |
timeZone | string | N | 卡时区 | 卡生效与失效日期时区,格式举例: 中国标准时间 GMT+08:00 ,北美东部标准时间 GMT-05:00 。默认值可在商户系统/设置/全局参数处配置。 |
userReferenceMap | Object | N | 用户自定义字段 | String 键值对,共20 个键可选。范围 useRef1Txt -useRef20Txt 。 |
TripLink仅会保存和展示用户自定义字段,没有业务逻辑与此相关。
请求体示例
{
"requestId": "15b77002-748d-4c89-b6a3-1fa0a25adf3b",
"customerId": "CSR47284A93E35E4",
"cardLogId": "9f289daa62ac6e941f918634de3f91a142eea82c09ac27783ea7c2d9c07f8ec3",
"cardLimit": 2000.12,
"multipleCurrencyCard": false
}
2
3
4
5
6
7
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
cardNum | String | 卡号 | 16 位卡号。 |
cardExpirationDate | String | 卡有效期 | 格式yyMM 。 |
cvv2 | String | 卡CVV2 | 安全码。 |
userReferenceMap | Object | 用户自定义字段 | String 键值对,共20 个键可选。范围 useRef1Txt -useRef20Txt 。 |
TripLink仅会保存和展示用户自定义字段,没有业务逻辑与此相关。
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
100001 | Reduplicative requestid | requestId 重复。 |
200001 | ActiveDate must be greater than current date(不固定) | 卡有效期错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200007 | Global parameter not find | 客户全局配置不存在。 |
200009 | Effective mccGroup not find | 有效MCC组不存在。 |
200014 | AcquirerId/mid must not be empty | 收单行ID与商户ID必须同时存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
200019 | Update card limit is less than the amount of used card | 更新额度小于已用额度。 |
200029 | Card exists pending request | 其他操作执行中。 |
200032 | Not find customer global setting | 客户全局参数不存在。 |
200036 | card bin not support | 卡品牌不支持。 |
200048 | (不固定) | 发卡行处理失败。 |
200060 | (不固定) | 发卡行请求参数错误。 |
201000 | Card available balance exceeds the maximum limit | 卡可用额度超过限额。 |
300004 | mcc link channel group is empty | 发卡行MCC组为空。 |
300005 | Trading is risky | 高风险请求。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"cardLogId": "9f289daa62ac6e941f918634de3f91a142eea82c09ac27783ea7c2d9c07f8ec3",
"cardNum": "5395933355051253",
"cardExpirationDate": "2406",
"cvv2": "123",
"userReferenceMap": {
"useRef1Txt": "anything"
}
}
2
3
4
5
6
7
8
9
10
11
# SDK示例
Java SDK
public void testUpdateCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardUpdateRequest request = new CardUpdateRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
request.setCardLimit(BigDecimal.valueOf(2000.12));
request.setMultipleCurrencyCard(false);
CardUpdateResponse response = tripLinkApi.update(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
PHP SDK
public function testUpdateCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new UpdateCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$request->setCardLimit(2000.12);
$request->setMultipleCurrencyCard(false);
$response = $tripLinkAgent->updateCard($request);
}
2
3
4
5
6
7
8
9
10
11
12
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 充值卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
rechargeAmount | Number | Y | 充值金额 | 小数,对应卡币种。 |
请求体示例
{
"requestId": "9340c297-e8b8-4148-b0b7-3d8aa5fcb487",
"customerId": "CSR47284A93E35E4",
"cardLogId": "9261267e66b808e9a2f62fe54e516192677236b943aa2dee1836284b369768d7",
"rechargeAmount": 100.12
}
2
3
4
5
6
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
201000 | Card available balance exceeds the maximum limit | 卡可用额度超过限额。 |
300003 | Call JPM gateway error | 发卡行返回错误。 |
300004 | mcc link channel group is empty | 发卡行MCC组为空。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success"
}
2
3
4
# SDK示例
Java SDK
public void testRechargeCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardRechargeRequest request = new CardRechargeRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
request.setRechargeAmount(BigDecimal.valueOf(100.12));
CardRechargeResponse response = tripLinkApi.recharge(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
PHP SDK
public function testRechargeCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new RechargeCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$request->setRechargeAmount(100.12);
$response = $tripLinkAgent->rechargeCard($request);
}
2
3
4
5
6
7
8
9
10
11
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 提现卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
withdrawAmount | Number | Y | 提现金额 | 小数,对应卡币种。 |
请求体示例
{
"requestId": "8f26c686-6275-4271-aa6d-a0a6a4df441e",
"customerId": "CSR47284A93E35E4",
"cardLogId": "9261267e66b808e9a2f62fe54e516192677236b943aa2dee1836284b369768d7",
"withdrawAmount": 80.12
}
2
3
4
5
6
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
200019 | Update card limit is less than the amount of used card | 更新额度小于已用额度。 |
200029 | Card exists pending request | 其他操作执行中。 |
200048 | card issuer failed | 发卡行返回错误。 |
300004 | mcc link channel group is empty | 发卡行MCC组为空。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success"
}
2
3
4
# SDK示例
Java SDK
public void testWithdrawCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardWithdrawRequest request = new CardWithdrawRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
request.setWithdrawAmount(BigDecimal.valueOf(80.12));
CardWithdrawResponse response = tripLinkApi.withdraw(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
PHP SDK
public function testWithdrawCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new WithdrawCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$request->setWithdrawAmount(80.12);
$response = $tripLinkAgent->withdrawCard($request);
}
2
3
4
5
6
7
8
9
10
11
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 锁定卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
请求体示例
{
"requestId": "7d451d22-fab3-471e-acfa-efd7aa3a1db9",
"customerId": "CSR47284A93E35E4",
"cardLogId": "f05c9c6670a956150aa346e671d6d9fe757cbe178d555a763631be75e61fee07"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
300006 | Not support suspend the card | 发卡行不支持锁定卡。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success"
}
2
3
4
# SDK示例
Java SDK
public void testSuspendCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardSuspendRequest request = new CardSuspendRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
CardSuspendResponse response = tripLinkApi.suspend(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
public function testSuspendCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new SuspendCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$response = $tripLinkAgent->suspendCard($request);
}
2
3
4
5
6
7
8
9
10
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 解锁卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
请求体示例
{
"requestId": "7d451d22-fab3-471e-acfa-efd7aa3a1db9",
"customerId": "CSR47284A93E35E4",
"cardLogId": "f05c9c6670a956150aa346e671d6d9fe757cbe178d555a763631be75e61fee07"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
300007 | Not support unsuspend the card | 发卡行不支持解锁卡 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success"
}
2
3
4
# SDK示例
Java SDK
public void testUnsuspendCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardUnsuspendRequest request = new CardUnsuspendRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
CardUnsuspendResponse response = tripLinkApi.unsuspend(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
public function testUnsuspendCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new UnsuspendCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$response = $tripLinkAgent->unsuspendCard($request);
}
2
3
4
5
6
7
8
9
10
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 注销卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
请求体示例
{
"requestId": "7d451d22-fab3-471e-acfa-efd7aa3a1db9",
"customerId": "CSR47284A93E35E4",
"cardLogId": "f05c9c6670a956150aa346e671d6d9fe757cbe178d555a763631be75e61fee07"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200003 | Customer info not find | 客户信息不存在。 |
200015 | Not find card | 卡不存在。 |
200016 | Card status is clop or clos | 卡已注销。 |
200025 | card status pre cancel not allow | 不允许注销卡。 |
200051 | card cancel exception | 发卡行注销卡失败。 |
200053 | Incorrect card status | 卡不在正常状态。 |
300005 | Trading is risky | 高风险请求。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success"
}
2
3
4
# SDK示例
Java SDK
public void testCloseCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardCancelRequest request = new CardCancelRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
CardCancelResponse response = tripLinkApi.close(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
public function testCloseCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new CloseCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$response = $tripLinkAgent->closeCard($request);
}
2
3
4
5
6
7
8
9
10
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询卡
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
请求体示例
{
"requestId": "5148d00e-d98f-4ccc-a5ef-acd1ff53d37e",
"customerId": "CSR47284A93E35E4",
"cardLogId": "0b51f2edf394d3875fa3c284186e5022236a59bc31dda6b3aba7dbe2982bc91a"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
customerId | String | 客户ID | 同请求头。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
cardCurrencyCode | String | 卡币种 | ISO 4217 货币编号,3 位数字。 |
settlementCurrencyCode | String | 结算币种 | ISO 4217 货币编号,3 位数字。 |
activeDate | String | 生效日期 | 格式yyyy-MM-dd 。 |
inactiveDate | String | 失效日期 | 格式yyyy-MM-dd 。 |
cardLimit | Number | 额度 | 小数,对应卡币种。 |
minAuthAmount | Number | 单次授权金额下限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
maxAuthAmount | Number | 单次授权金额上限 | 小数,对应卡币种。 (预付费卡,此字段不生效) |
maxAuthTimes | Number | 授权次数上限 | 整数。1 :单次卡,-1 :不限次数。 |
cardCloseUsage | Number | 自动注销百分比 | 整数,范围0 -100 ,默认0 。当已清算金额占额度比大于等于此值,卡会被自动注销。 特殊值 0 :卡片不会自动注销。(预付费卡,此字段不生效) |
supportedMccGroup | String | 接受的MCC组 | 接受的商户类别组名,由TripLink定义。 非此商户类别组请求的交易会被拒绝。 |
supportedMid | String | 接受的商户ID | 非此商户请求的交易会被拒绝。 |
supportedAcquirerId | String | 接受的收单行ID | 非此收单行请求的交易会被拒绝。 |
multipleCurrencyCard | Boolean | 是否允许非卡币种交易 | |
allow3ds | Boolean | 是否接受3DS交易 | 仅香港万事达卡生效 |
applyTime | String | 申请日期 | 格式yyyy-MM-dd 。 |
status | String | 卡状态 | NORM :正常,SUSP :锁定,CLOP :预销卡,CLOS :销卡。 |
cardNum | String | 卡号 | 16 位卡号。 |
cardExpirationDate | String | 卡有效期 | 格式yyMM 。 |
cvv2 | String | 卡CVV2 | 安全码。 |
availableBalance | Number | 可用余额 | 小数,对应卡币种。 |
authorizeAmount | Number | 待入账金额 | 小数,对应卡币种。 |
settlementAmount | Number | 已入账金额 | 小数,对应卡币种。 |
cardLabel | String | 卡组织 | 枚举值,范围MasterCard ,VISA 。 |
cardType | String | 卡类型 | 枚举值,范围GWTTP ,MCO ,USDVCC 等。 |
timeZone | string | 卡时区 | 卡生效与失效日期时区,格式举例: 中国标准时间 GMT+08:00 ,北美东部标准时间 GMT-05:00 。默认值可在商户系统/设置/全局参数处配置。 |
userReferenceMap | Object | 用户自定义字段 | String 键值对,共20 个键可选。范围 useRef1Txt -useRef20Txt 。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect(不固定) | 请求参数错误。 |
200015 | Not find card | 卡不存在。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"customerId": "CSR47284A93E35E4",
"cardLogId": "0b51f2edf394d3875fa3c284186e5022236a59bc31dda6b3aba7dbe2982bc91a",
"cardCurrencyCode": "840",
"settlementCurrencyCode": "840",
"activeDate": "2022-01-01",
"inactiveDate": "2024-06-01",
"cardLimit": 1000.12,
"minAuthAmount": 3.45,
"maxAuthAmount": 500.67,
"maxAuthTimes": -1,
"cardCloseUsage": 40,
"supportedMccGroup": "ecom",
"multipleCurrencyCard": true,
"allow3ds": true,
"applyTime": "2022-02-17",
"status": "NORM",
"cardNum": "5395933355052420",
"cardExpirationDate": "2406",
"cvv2": "123",
"availableBalance": 1000.12,
"authorizeAmount": 0.00,
"settlementAmount": 0.00,
"cardType": "GWTTP",
"cardLabel": "MasterCard",
"timeZone": "GMT+08:00",
"userReferenceMap": {
"useRef1Txt": "anything"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# SDK示例
Java SDK
public void testQueryCard() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
CardDetailQueryRequest request = new CardDetailQueryRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
CardDetailQueryResponse response = tripLinkApi.queryCard(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
public function testQueryCard(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new QueryCardRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$response = $tripLinkAgent->queryCard($request);
}
2
3
4
5
6
7
8
9
10
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询账户额度
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
请求体示例
{
"requestId": "3ddf14f6-04b0-4a66-840b-a21cf0c148ee",
"customerId": "CSR47284A93E35E4"
}
2
3
4
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
customerId | String | 客户ID | 同请求头。 |
list | Array | 账户信息 | 详见Account 。 |
Account
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
accountType | String | 账户类型 | CREDIT :贷记账户;DEBIT :借记账户;CCP_ACCT :换汇账户。 |
accountCurrency | String | 账户币种 | ISO 4217 货币编号,3 位数字。 |
accountAmount | Number | 账户额度 | 仅账户类型为CREDIT 时有值。小数,对应账户币种。 |
remainAccountAmount | Number | 剩余账户额度 | 小数,对应账户币种。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | input parameter is incorrect | 请求参数错误。 |
200007 | not find the account credit | 未找到账户。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "success",
"customerId": "CSR47284A93E35E4",
"list": [
{
"accountType": "DEBIT",
"accountCurrency": "840",
"remainAccountAmount": 999967.66
},
{
"accountType": "DEBIT",
"accountCurrency": "978",
"remainAccountAmount": 999999.99
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# SDK示例
Java SDK
public void testQueryAccount() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
QueryCustomerCreditAmountRequest request = new QueryCustomerCreditAmountRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
QueryCustomerCreditAmountResponse response = tripLinkApi.queryCustomerCreditAmount(request);
}
2
3
4
5
6
7
8
9
10
11
PHP SDK
public function testQueryAccount(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new QueryAccountRequest(uniqid(), CUSTOMER_ID);
$response = $tripLinkAgent->queryAccount($request);
}
2
3
4
5
6
7
8
9
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询授权交易
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
orderNo | String | N | 订单号 | |
transactionStatus | String | N | 交易状态 | 枚举值:1 -交易成功 2 -交易失败。 |
transactionCode | String | N | 交易类型 | 枚举值:6810 -消费授权 6820 -授权查询 6510 -退款授权 6930 -消费授权冲正 6940 -退款授权冲正。 |
transactionStartTime | String | N | 起始时间 | 格式:yyyy-MM-dd HH:mm:ss 。 |
transactionEndTime | String | N | 截止时间 | 格式:yyyy-MM-dd HH:mm:ss 。 |
pageNo | Number | N | 分页页码 | 整数,取值范围[1,100] ,默认值为1 。 |
pageSize | Number | N | 分页条数 | 整数,取值范围[1,100] ,默认值为5 。 |
请求体示例
{
"requestId":"7fb57ff0-ea70-4099-acf5-eacba55e18ef",
"customerId":"CSR47284A93E35E4",
"cardLogId":"c55d99dac26bb334c07879404a93d2c6a96b42f7372f9c04d14034d019203fe4",
"transactionStartTime":"2022-10-01 03:00:00",
"transactionEndTime":"2022-10-02 04:00:00",
"pageNo":1,
"pageSize":10
}
2
3
4
5
6
7
8
9
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
count | Number | 交易数量 | 整数,本次查询返回的交易数据量。 |
more | Boolean | 更多数据 | 是否还有更多的分页数据 true 表示本次请求查询条件下有更多的分页数据。 |
transactionData | Array | 授权交易 | 详见AuthTransaction 。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100007 | NOT_FIND_CARD | 卡不存在。 |
9XXXXX | (不固定) | 系统错误。 |
AuthTransaction
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
requestId | String | 交易唯一ID | 全局唯一。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
transactionId | String | 交易关联ID | 授权交易与对应冲正交易的transactionID 相同。 |
orderNo | String | 订单号 | |
transactionCurrencyCode | String | 交易币种 | ISO 4217 货币编号,3 位数字。 |
transactionAmount | Number | 交易金额 | 小数,对应交易币种。 |
cardCurrencyCode | String | 卡币种 | ISO 4217 货币编号,3 位数字。 |
cardTransactionAmount | Number | 卡交易金额 | 小数,对应卡币种。 |
responseCode | String | 交易响应码 | 枚举值,4 位数字,详见授权响应码下拉框。(非 0000 表示授权拒绝) |
responseDescription | String | 交易响应码描述 | 详见授权响应码下拉框。 |
approvalCode | String | 授权码 | 随机6 位字母与数字。 |
transactionCode | String | 交易类型 | 枚举值,4 位数字,详见授权类型下拉框。 |
transactionDate | String | 交易发生时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
localTime | String | 交易发生本地时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
merchantName | String | 商户名称 | |
mcc | String | 商户MCC | ISO 18245 商户类别,4 位数字。 |
merchantCountry | String | 商户所在国家 | (未标准化) |
isoMerchantCountryCode | String | 商户所在国家 | ISO 3166 国家代码,3 位字母。(可能为空值) |
merchantCity | String | 商户所在城市 | |
merchantId | String | 商户ID | |
acquiringBankId | String | 收单行ID | |
cardInitialBalance | Number | 卡片期初金额 | |
cardEndingBalance | Number | 卡片期末金额 | |
creditTransactionSign | String | 贷记交易标记 | 枚举值,1 -贷记交易 0 -借记交易 |
reversalType | String | 是否为授权释放交易 | 仅授权类型为6930 或6940 时该字段有意义。枚举值, 0 -授权释放交易 1 -非授权释放交易 |
授权类型
messageType | messageTypeDescription | 描述 | 交易类别 |
---|---|---|---|
6810 | Authorization Approval | 消费授权 | 借记交易 |
6510 | Auth Refund Approval | 退款授权 | 贷记交易 |
6930 | Authorization Reversal Approval | 消费授权冲正 | 贷记交易 |
6940 | Auth Refund Reversal Approval | 退款授权冲正 | 借记交易 |
6820 | Authorization Query | 授权查询 | 借记交易 |
授权响应码(6810 消费授权)
responseCode | responseCodeDescription | 备注 |
---|---|---|
0000 | Authorization Approval | 授权成功。 |
1002 | High Risk Transaction | 高风险的交易。 |
1003 | Invalid Account | 无效账号。 |
1101 | Abnormal Customer Status | 客户状态异常。 |
1102 | Card canceled | 卡片已注销。 |
1103 | Authorization Amount Error | 授权金额错误。 |
1104 | VAN Amount Limit Error | 账户余额不足。 |
1105 | Invalid Expiry Date | 无效的有效期。 |
1106 | Transaction Count Over Limit | 交易次数超过上限。 |
1107 | Invalid CVV2 | 无效的CVV2安全码。 |
1108 | VAN Amount Limit Error | 账户余额不足。 |
1110 | Trans Currency Not Allowed | 交易币种不支持。 |
1111 | MCC Error | MCC商户类别错误。 |
1112 | VAN credit limit greater than max Limit | 卡片授权金额超出最高限额。 |
1113 | VAN credit limit less than min Limit | 卡片授权金额低于最小限额。 |
1114 | Transaction Date before card activeDate | 交易日期早于卡片有效期。 |
1115 | Transaction Date after card inactiveDate | 交易日期晚于卡片失效日期。 |
1116 | Auth Amount greater than available VAN credit limit | 授权金额超出卡片可用余额。 |
1117 | Auth Amount greater than available account credit limit | 授权金额超出账户可用余额。 |
1118 | Limited usage with abnormal card status | 卡片状态异常暂不可用。 |
1201 | Authorization already in process, please wait until the last authorization completed | 授权过于频繁。 |
1203 | Not support 3ds | 卡不支持3DS交易。 |
2012 | Cardholder cancels identity verification | 持卡人取消身份验证。 |
2014 | Cardholder fails to complete identity verification within the specified time | 持卡人未能在规定时间内完成身份验证。 |
2019 | Cardholder fails to complete identity verification within the specified number of attempts | 持卡人未能在规定的尝试次数内完成身份验证。 |
2022 | Merchant requests invalid information | 商户请求信息不合法。 |
2222 | Authorization decision reject | 授权决策拒绝。 |
2299 | Authorization decision downgrade reject | 授权决策降级后拒绝。 |
3004 | Abnormal Card Scheme Network | 卡组网络异常。 |
9000 | Unknow Error | 未知的错误。 |
授权响应码(6510 退款授权)
responseCode | responseCodeDescription | 备注 |
---|---|---|
0000 | Authorization Approval | 授权成功。 |
1002 | High Risk Transaction | 高风险的交易。 |
1003 | Invalid Account | 无效账号。 |
1101 | Abnormal Customer Status | 客户状态异常。 |
1107 | Invalid CVV2 | 无效的CVV2安全码。 |
1110 | Trans Currency Not Allowed | 交易币种不支持。 |
1111 | MCC Error | MCC商户类别错误。 |
授权响应码(6930 消费授权冲正)
responseCode | responseCodeDescription | 备注 |
---|---|---|
0000 | Authorization Approval | 授权成功。 |
1002 | High Risk Transaction | 高风险的交易。 |
1003 | Invalid Account | 无效账号。 |
1101 | Abnormal Customer Status | 客户状态异常。 |
1105 | Invalid Expiry Date | 无效的有效期。 |
2001 | Original Transaction Unmatch | 未匹配到原始的授权交易(有冲正通知)。 |
2002 | Original Transaction Unmatch | 未匹配到原始的授权交易(无冲正通知)。 |
授权响应码(6940 退款授权冲正)
responseCode | responseCodeDescription | 备注 |
---|---|---|
0000 | Authorization Approval | 授权成功。 |
1002 | High Risk Transaction | 高风险的交易。 |
1003 | Invalid Account | 无效账号。 |
2001 | Original Transaction Unmatch | 未匹配到原始的授权交易(有冲正通知)。 |
2002 | Original Transaction Unmatch | 未匹配到原始的授权交易(无冲正通知)。 |
授权响应码(6820 授权查询)
responseCode | responseCodeDescription | 备注 |
---|---|---|
0000 | Authorization Approval | 授权成功。 |
1002 | High Risk Transaction | 高风险的交易。 |
1003 | Invalid Account | 无效账号。 |
1102 | Card canceled | 卡片已注销。 |
1118 | Limited usage with abnormal card status | 卡片状态异常暂不可用。 |
响应体示例
{
"returnCode":"000000",
"errorMessage":"Success",
"cardLogId":"3d70589dfe5c9a771c520d3382ad67af6a17389128b1c3d7968d33b3f62d0703",
"count":1,
"more":true,
"transactionData":[
{
"cardLogId":"3d70589dfe5c9a771c520d3382ad67af6a17389128b1c3d7968d33b3f62d0703",
"requestId":"63fe1c0b-9030-4d57-82c7-74eec6e4a450",
"transactionId":"0707110634049997213457",
"orderNo":"dingdan11",
"transactionCurrencyCode":"344",
"transactionAmount":1000,
"cardCurrencyCode":"840",
"cardTransactionAmount":127.44,
"responseCode":"0000",
"responseDescription":"Authorization Approval",
"approvalCode":"730704",
"transactionCode":"6810",
"transactionDate":"2022-07-07 19:06:34",
"localTime":"2022-07-07 13:06:34",
"merchantName":"ALIEXPRESS.COM",
"mcc":"0015",
"merchantCountry":"SGP",
"merchantCity":"Singapore",
"merchantId":"87846545546",
"acquiringBankId":"213457",
"creditTransactionSign":"0",
"reversalType":"0"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# SDK示例
Java SDK
public void testQueryAuthorizationByPage() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
QueryAuthTransactionByPageRequest request = new QueryAuthTransactionByPageRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setCardLogId(CARD_LOG_ID);
request.setTransactionStartTime("2022-10-01 03:00:00");
request.setTransactionEndTime("2022-10-10 04:00:00");
QueryAuthTransactionByPageResponse response = tripLinkApi.authTransactionQueryByPage(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
PHP SDK
public function testQueryAuthorizationByPage(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new QueryAuthTransactionByPageRequest(uniqid(), CUSTOMER_ID);
$request->setCardLogId(CARD_LOG_ID);
$request->setStartTime('2022-10-01 03:00:00');
$request->setEndTime('2022-10-10 04:00:00');
$response = $tripLinkAgent->authTransactionQueryByPage($request);
}
2
3
4
5
6
7
8
9
10
11
12
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询清算交易
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
cardLogId | String | Y | 卡ID | TripLink专用卡标识。 |
settlementStartTime | String | Y | 起始日期 | 格式yyyy-MM-dd HH:mm:ss 。 |
settlementEndTime | String | Y | 截止日期 | 格式yyyy-MM-dd HH:mm:ss 。 |
pageNo | Number | N | 分页页码 | 整数,取值范围[1,100] ,默认值为1 。 |
pageSize | Number | N | 分页条数 | 整数,取值范围[1,100] ,默认值为5 。 |
请求体示例
{
"requestId": "9032aee1-85aa-41e8-bc46-7ff8bb36097d",
"customerId": "CSR47284A93E35E4",
"cardLogId": "c55d99dac26bb334c07879404a93d2c6a96b42f7372f9c04d14034d019203fe4",
"settlementStartTime": "2022-02-01 03:00:00",
"settlementEndTime": "2022-03-01 04:00:00"
}
2
3
4
5
6
7
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
cardLogId | String | 卡ID | TripLink专用卡标识。 |
count | Number | 交易数量 | 整数,本次查询返回的交易数据量。 |
more | Boolean | 更多数据 | 是否还有更多的分页数据 true 表示本次请求查询条件下有更多的分页数据。 |
settlementData | Array | 清算交易 | 详见SettlementTransaction 。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect | 请求参数错误。 |
100007 | NOT_FIND_CARD | 卡不存在。 |
9XXXXX | (不固定) | 系统错误。 |
SettlementTransaction
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
serialNo | String | 交易唯一ID | 全局唯一。 |
occurDateTime | String | 交易发生时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
postingDateTime | String | 入账处理时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
postingSysTime | String | 入账系统时间 | 格式yyyy-MM-dd 。 |
transactionCode | String | 交易类型 | 枚举值,4 位数字,详见清算类型下拉框。 |
transactionType | String | 交易类型描述 | 详见清算类型下拉框。 |
approvalCode | String | 授权码 | 随机6 位字母与数字。 |
isCredit | String | 借贷记 | DEBT :借记,CRED :贷记。 |
originalTransactionCurrency | String | 交易币种 | ISO 4217 货币编号,3 位数字。 |
originalTransactionAmount | Number | 交易金额 | 小数,对应交易币种。 |
cardTransactionCurrency | String | 卡币种 | ISO 4217 货币编号,3 位数字。 |
cardTransactionAmount | Number | 卡交易金额 | 小数,对应卡币种。 |
accountCurrency | String | 清算币种 | ISO 4217 货币编号,3 位数字。 |
billAccountAmount | Number | 清算金额 | 小数,对应账户币种。 |
posMerchantID | String | 商户ID | |
posMerchantName | String | 商户名称 | |
posMerchantClassCode | String | 商户MCC | ISO 18245 商户类别,4 位数字。 |
posMerchantCountry | String | 商户所在国家 | (未标准化) |
isoMerchantCountryCode | String | 商户所在国家 | ISO 3166 国家代码,3 位字母。(可能为空值) |
posMerchantCity | String | 商户所在城市 | |
posAcquirerID | String | 收单行ID | |
transactionId | String | 交易关联ID | 关联同笔交易的关联ID |
清算类型
transactionCode | transactionType | 描述 | 借贷记 | 金额数值 |
---|---|---|---|---|
2010 | Purchase | 消费 | DEBT | 正 |
2110 | Refund | 消费退款 | CRED | 负 |
4060 | Chargeback Release | 争议释放 | DEBT | 正 |
4160 | Chargeback | 消费争议 | CRED | 负 |
响应体示例
# SDK示例
Java SDK
PHP SDK
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 发起账户提现
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
paymentCurrency | String | Y | 提现币种 | ISO 4217 货币编号,3 位数字。 |
paymentAmount | Number | Y | 提现金额 | 小数,对应提现币种。 |
beneficiaryAccountNo | String | Y | 收款账号 | 账户须在TripLink备案。 详情请联系您的客户经理。 |
beneficiaryAccountName | String | Y | 收款账户名称 | |
beneficiaryBankName | String | Y | 收款银行名称 | |
beneficiaryBankCountryCode | String | Y | 收款银行所在国家 | ISO 3166 国家代码,2 位字母。 |
reference | String | Y | 附言 | 将直接传递给收款银行,长度不多于90 字符。 仅允许英文,数字,空格和部分特殊字符 , - ()./ |
clientOrderId | String | N | 客户订单号 |
请求体示例
{
"requestId": "9032aee1-85aa-41e8-bc46-7ff8bb36097d",
"customerId": "CSR47284A93E35E4",
"paymentCurrency": "840",
"paymentAmount": "100.21",
"beneficiaryAccountNo": "660010011001",
"beneficiaryAccountName": "Trip company",
"beneficiaryBankName": "JP Morgan",
"beneficiaryBankCountryCode": "HK",
"reference": "payment to xx",
"clientOrderId": "13211000"
}
2
3
4
5
6
7
8
9
10
11
12
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
orderId | String | 订单号 | 全局唯一。 |
paymentCurrency | String | 提现币种 | ISO 4217 货币编号,3 位数字。 |
paymentAmount | Number | 提现金额 | 小数,对应提现币种。 |
acceptTime | String | 受理时间 | 格式:yyyy-MM-dd HH:mm:ss 。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect | 请求参数错误。 |
150016 | RequestId is exists | 请求ID已存在。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"orderId": "142303141346210898",
"paymentCurrency": "840",
"paymentAmount": "100.21",
"acceptTime": "2023-03-14 12:00:00"
}
2
3
4
5
6
7
8
# SDK示例
Java SDK
public void testPayoutCreate() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
PayoutCreateRequest request = new PayoutCreateRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId("CSR2E54DC4B8A5D4");
request.setPaymentCurrency("840");
request.setPaymentAmount(new BigDecimal("100"));
request.setBeneficiaryAccountNo("12321424");
request.setBeneficiaryAccountName("trip company");
request.setBeneficiaryBankName("bank name");
request.setBeneficiaryBankCountryCode("HK");
request.setReference("reference123");
request.setClientOrderId("f334f967102d");
PayoutCreateResponse response = tripLinkApi.payoutCreate(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PHP SDK
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询账户提现
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
oriRequestId | String | Y | 原始请求流水号 |
请求体示例
{
"requestId": "68519520-66ef-404d-82cc-fa34f967002d",
"customerId": "CSR47284A93E35E4",
"oriRequestId": "9032aee1-85aa-41e8-bc46-7ff8bb36097d"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
orderId | String | 订单号 | 全局唯一。 |
status | String | 订单状态 | 1 :处理中,2 :已汇出,3 审核拒绝4 :汇款拒绝,5 :汇款异常,6 :已退票 |
paymentCurrency | String | 提现币种 | ISO 4217 货币编号,3 位数字。 |
paymentAmount | Number | 提现金额 | 小数,对应提现币种。 |
beneficiaryAccountNo | String | 收款人账号 | |
beneficiaryAccountName | String | 收款人账户名称 | |
acceptTime | String | 受理时间 | 格式:yyyy-MM-dd HH:mm:ss 。 |
clientOrderId | String | 客户订单号 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect | 请求参数错误。 |
150017 | Order is not exists | 订单不存在。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"orderId": "142303141346210898",
"status": 1,
"paymentCurrency": "840",
"paymentAmount": "100.21",
"beneficiaryAccountNo": "1232112",
"beneficiaryAccountName": "trip company",
"acceptTime": "2023-03-14 12:00:00",
"clientOrderId": "clientOrderId"
}
2
3
4
5
6
7
8
9
10
11
12
# SDK示例
Java SDK
public void testPayoutQuery() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
PayoutQueryRequest request = new PayoutQueryRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId("CSR2E54DC4B8A5D4");
request.setOriRequestId("9032aee1-85aa-41e8-bc46-7ff8bb36097d");
PayoutQueryResponse response = tripLinkApi.payoutQuery(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询汇率
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
sellCurrency | String | Y | 卖出币种 | ISO 4217 货币编号,3 位数字。 |
buyCurrency | String | Y | 买入币种 | ISO 4217 货币编号,3 位数字。 |
fxDirection | Number | Y | 交易方向 | 0 :指定卖出,此时fxAmount 为卖出金额;1 :指定买入,此时fxAmount 为买入金额。 |
fxAmount | Number | Y | 交易金额 | 小数,对应交易币种。 |
请求体示例
{
"requestId": "3ddf14f6-04b0-4a66-840b-a21cf0c148ee",
"customerId": "CSR47284A93E35E4",
"sellCurrency": "156",
"buyCurrency": "840",
"fxDirection": 0,
"fxAmount": 100.00
}
2
3
4
5
6
7
8
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
quoteId | String | 汇率ID | 汇率唯一ID。 |
sellCurrency | String | 卖出币种 | ISO 4217 货币编号,3 位数字。 |
sellAmount | Number | 卖出金额 | 小数,对应卖出币种。 |
buyCurrency | String | 买入币种 | ISO 4217 货币编号,3 位数字。 |
buyAmount | Number | 买入金额 | 小数,对应买入币种。 |
rate | Number | 汇率 | 小数。 |
expireTime | String | 失效时间 | 格式yyyy-MM-dd HH:mm:ss (时区 UTC+08:00 )。 |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "success",
"quoteId": "f3c41a86e880f2c71de0b5c45d4ae066",
"sellCurrency": "156",
"sellAmount": 100.00,
"buyCurrency": "840",
"buyAmount": 15.72,
"rate": 0.15707102,
"expireTime": "2022-02-25 21:56:51"
}
2
3
4
5
6
7
8
9
10
11
# SDK示例
Java SDK
public void testFxQuote() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
QuoteRequest request = new QuoteRequest();
request.setRequestId(UUID.randomUUID().toString());
request.setCustomerId(CUSTOMER_ID);
request.setSellCurrency("156");
request.setBuyCurrency("840");
request.setFxDirection(0);
request.setFxAmount(BigDecimal.valueOf(100.00));
QuoteResponse response = tripLinkApi.quote(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP SDK
public function testFxQuote(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new FxQuoteRequest(uniqid(), CUSTOMER_ID);
$request->setSellCurrency('156');
$request->setBuyCurrency('840');
$request->setFxDirection(0);
$request->setFxAmount(100.00);
$response = $tripLinkAgent->fxQuote($request);
}
2
3
4
5
6
7
8
9
10
11
12
13
BASE_URL
:API地址。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 发起换汇订单
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
sellCurrency | String | Y | 卖出币种 | ISO 4217 货币编号,3 位数字。 |
buyCurrency | String | Y | 买入币种 | ISO 4217 货币编号,3 位数字。 |
fxDirection | Number | Y | 交易方向 | 0 :指定卖出,此时fxAmount 为卖出金额;1 :指定买入,此时fxAmount 为买入金额。 |
fxAmount | Number | Y | 交易金额 | 对应交易币种。 |
quoteId | String | N | 汇率ID | 查询汇率 返回的汇率ID。 若不传,则以实时汇率成交。 |
请求体示例
{
"requestId": "9032aee1-85aa-41e8-bc46-7ff8bb36097d",
"customerId": "CSR32384FAC033D4",
"sellCurrency": "840",
"buyCurrency": "157",
"fxDirection": "0",
"fxAmount": "200.99"
}
2
3
4
5
6
7
8
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
orderId | String | 交易订单号 | TripLink返回的唯一订单号。 |
acceptTime | String | 受理时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
sellCurrency | String | 卖出币种 | ISO 4217 货币编号,3 位数字。 |
sellAmount | Number | 卖出金额 | 对应卖出币种。 |
buyCurrency | String | 买入币种 | ISO 4217 货币编号,3 位数字。 |
buyAmount | Number | 买入金额 | 对应买入币种。 |
rate | Number | 汇率 | 小数。 |
quoteId | String | 汇率ID |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect | 请求参数错误。 |
100006 | No rate | 汇率不存在。 |
100010 | account currency not enough | 账户余额不足。 |
100017 | customer product is not support | 产品不支持。 |
120034 | RequestId is exists | 请求id已存在。 |
120035 | Fx info not match quote info | 换汇信息与询价信息不匹配。 |
120037 | The exchange amount is not within the limit | 换汇金额不在限制范围内。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"orderId": "646873e2-4d3f-486b-83af-e6a0bc6d464c",
"acceptTime": "2024-01-08 14:38:17",
"sellCurrency": "840",
"sellAmount": "28.08",
"buyCurrency": "157",
"buyAmount": "200.99",
"rate": "7.15711345",
"quoteId": "ff36346e5c5c4562af194ba44165d759"
}
2
3
4
5
6
7
8
9
10
11
12
# SDK示例
Java SDK
public void testFxCreate() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
FxCreateRequest request = new FxCreateRequest();
request.setRequestId(String.valueOf(UUID.randomUUID()));
request.setCustomerId("CSR2E54DC4B8A5D4");
request.setSellCurrency("840");
request.setBuyCurrency("344");
request.setFxDirection(0);
request.setFxAmount(new BigDecimal("100.03"));
FxCreateResponse response = tripLinkApi.fxCreate(request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PHP SDK
public function testFxCreate(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new FxCreateRequest(uniqid(), CUSTOMER_ID);
$request->setSellCurrency('840');
$request->setBuyCurrency('157');
$request->setFxDirection(0);
$request->setFxAmount(2.98);
$request->setQuoteId('');
$response = $tripLinkAgent->fxCreate($request);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
BASE_URL
:API地址;
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 查询换汇订单
# 请求体
名称 | 类型 | 必填 | 描述 | 备注 |
---|---|---|---|---|
requestId | String | Y | 请求流水号 | 同请求头。 |
customerId | String | Y | 客户ID | 同请求头。 |
oriRequestId | String | N | 原始请求流水号 | oriRequestId 与 orderId 其中一者必填。 |
orderId | String | N | 订单号 | oriRequestId 与 orderId 其中一者必填。 |
请求体示例
{
"requestId": "2024010800000001",
"customerId": "CSR32384FAC033D4",
"oriRequestId": "9032aee1-85aa-41e8-bc46-7ff8bb360976"
}
2
3
4
5
# 响应体
名称 | 类型 | 描述 | 备注 |
---|---|---|---|
returnCode | String | 结果码 | 枚举值,6 位数字,详见结果码下拉框。(非 000000 表示请求处理失败) |
errorMessage | String | 结果码描述 | 详见结果码下拉框。 |
orderId | String | 交易订单号 | TripLink返回的唯一订单号。 |
status | Number | 状态 | 0 :创建中,1 :成功,2 :失败。 |
acceptTime | String | 受理时间 | 格式yyyy-MM-dd HH:mm:ss 。 |
sellCurrency | String | 卖出币种 | ISO 4217 货币编号,3 位数字。 |
sellAmount | Number | 卖出金额 | 对应卖出币种。 |
buyCurrency | String | 买入币种 | ISO 4217 货币编号,3 位数字。 |
buyAmount | Number | 买入金额 | 对应买入币种。 |
rate | Number | 汇率 | 小数。 |
quoteId | String | 汇率ID |
结果码
returnCode | errorMessage | 备注 |
---|---|---|
000000 | Success | 成功。 |
100000 | Input parameter is incorrect | 请求参数错误。 |
120036 | Fx order not found | 换汇订单不存在。 |
9XXXXX | (不固定) | 系统错误。 |
响应体示例
{
"returnCode": "000000",
"errorMessage": "Success",
"orderId": "f1f0dded-a130-4bc9-be08-0d9cc9072dc4",
"status": 1,
"acceptTime": "2024-01-08 14:39:31",
"sellCurrency":"840",
"sellAmount":200.99,
"buyCurrency":"157",
"buyAmount":1438.51,
"rate":7.15711345,
"quoteId":"94eae20cbbc54c7e89c502a653ce41bc"
}
2
3
4
5
6
7
8
9
10
11
12
13
# SDK示例
Java SDK
public void testFxQuery() {
HttpClient<CallHttpResponse> httpClient = new TripLinkHttpClient();
TripLinkBizImplV2 tripLinkCore = new TripLinkBizImplV2(CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY, AES_KEY, BASE_URL, httpClient);
TripLinkApiImplV2 tripLinkApi = new TripLinkApiImplV2(tripLinkCore);
FxQueryRequest request = new FxQueryRequest();
request.setRequestId(String.valueOf(UUID.randomUUID()));
request.setCustomerId("CSR2E54DC4B8A5D4");
request.setOriRequestId("testRequest1");
FxQueryResponse response = tripLinkApi.fxQuery(request);
}
2
3
4
5
6
7
8
9
10
11
12
PHP SDK
public function testFxQuery(): void {
$httpClient = new GuzzleHttpClient();
$customer = new Customer(CUSTOMER_ID, AES_KEY, CUSTOMER_PRIVATE_KEY, TRIPLINK_PUBLIC_KEY);
$tripLinkAgent = new SimpleTripLinkAgent(BASE_URL, $customer, $httpClient);
$request = new FxQueryRequest(uniqid(), CUSTOMER_ID);
$request->setOrderId('27f4b30b-3ddc-4736-8c9d-a35d3e73cae7');
$response = $tripLinkAgent->fxQuery($request);
}
2
3
4
5
6
7
8
9
10
BASE_URL
:API地址;CARD_LOG_ID
:卡ID。
CUSTOMER_ID
:客户ID;CUSTOMER_PRIVATE_KEY
:客户RSA私钥。
AES_KEY
:AES密钥;TRIPLINK_PUBLIC_KEY
:TripLink RSA公钥。
# 报表服务
# 报表分类
TripLink向客户提供多种维度报表,每种报表位于SFTP路径/production/report/类型
下(具体路径请联系 TripLink 商务团队确认),接入方可以选择需要的类型与周期。
名称 | 类型 | 周期 | 文件名格式 |
---|---|---|---|
结算报表 | SETTLEMENT_REPORT | 每日 每周 每月 | ST001_2023-02-02.csv ST010_2023-02-06.csv ST100_2023-02-01.csv |
周期结算报表 | CYCLE_SETTLEMENT_REPORT | 账期 | CST001_2023-02-01.csv |
账单报表 | BILL_REPORT | 账期 | SS001_2023-02-01.csv |
授权交易报表 | AUTHORIZATION_REPORT | 每天 | VA001_2023-02-01.csv |
开卡报表 | CARD_ISSUED_REPORT | 每天 | OV001_2023-02-01.csv |
还款报表 | REPAY_REPORT | 每天 | VPMT001_2023-02-01.csv |
争议报表 | CHARGEBACK_REPORT | 每月 | NATC100_2023-02-01.csv |
vcc充值报表 | VCC_CHARGE_REPORT | 每天 | TUP001_2023-02-01.csv |
授权计费报表 | AUTH_FEE_REPORT | 每天 | AF001_2023-02-01.csv |
资金明细报表 | FUNDS_DETAIL_REPORT | 每天 | FU001_2023-02-01.csv |
实时换汇授权报表 | EXCHANGE_REPORT | 每天 | RFX001_2023-02-01.csv |
奖励金报表 | REBATE_REPORT | 每月 | RB100_2023-02-01.csv |
# 报表触发方式
1.客户在TripLink的客户端中的报表服务菜单下,主动发起报表请求
2.系统根据客户的报表配置主动发起
# 报表送达方式
1.portal下载:客户在TripLink客户端主动发起的报表,文件生成后,可直接在客户端下载。
2.邮件推送:文件生成后向客户配置的接收邮箱中发送一份邮件,附件就是生成后的文件(邮件送达方式有附件的大小限制,当文件大于15M时,邮件方式无法送达,建议客户改接SFTP)。
3.SFTP推送:文件生成后,向客户目录下投递文件,格式为:/production/report/ + 报表类型 + /+ 具体文件名。例如:客户A配置了开卡报表,那么在文件生成后,会投递到该客户的文件服务器上,路径为:/production/report/CARD_ISSUED_REPORT/OV001_2022-06-15.csv。
# 报表表头说明
1.结算报表表头(含周期结算报表)
表头字段 | 字段类型 | 字段含义 |
---|---|---|
VANhistoryID | String | 结算记录唯一标识 |
CardlogID | String | 卡记录ID,加密后的卡号 |
ProductCode | String | 卡类型,卡的产品代码 |
TransID | String | 卡记录号(卡短号) |
ActivityType | String | 交易类型,Refund --退款,Purchase --消费,Rebate -奖励金,Chargeback -争议,ChargebackFee -争议手续费 |
IssuedToECN | String | 客户号 |
VAN | String | 卡号 |
TransDate | String | 入账日期,切日前, 格式 yyyy-MM-dd |
TransTime | String | 入账时间,清算完成时间, 格式yyyy-MM-dd HH:mm:ss |
TransCurr | String | 入账币种,卡入账币种, 如USD ,EUR ,HKD |
TransAmt | String | 入账金额,卡入账金额(交易金额转为卡本币的金额) |
POSAmt | String | 交易金额 |
POSCurr | String | 交易币种 |
ReconciliationAmount | String | 清算金额 |
ReconciliationCurrency | String | 清算币种 |
RequestedDate | String | 发卡日期, 格式yyyy-MM-dd |
RequestedTime | String | 发卡时间, 格式yyyy-MM-dd HH:mm:ss |
LocalTime | String | 交易时间(交易当地时间), 格式yyyy-MM-dd HH:mm:ss |
AuthTime | String | 授权时间 |
MinAmt | String | 卡最小授权金额 |
VANAmt | String | 开卡总金额 |
MaxAmt | String | 卡最大授权金额 |
ActivationDate | String | 卡可交易日期, 格式yyyy-MM-dd |
AuthAmt | String | 授权金额 |
AuthCurr | String | 授权币种 |
AuthCode | String | 授权码 |
ValidUntil | String | 卡失效日期 |
MerchID | String | MID,商户ID |
MerchCategoryCode | String | MCC, 商户MCC |
MerchCategoryName | String | MCC名称, 商户MCC名称 |
MerchName | String | 商户名 |
MerchAddress | String | 商户地址 |
MerchCity | String | 商户城市 |
MerchState | String | 商户州 |
MerchPostCode | String | 商户邮编 |
MerchCountry | String | 商户国家 |
CrossBoardType | String | 跨境类型, international -国际, domestic -国内 |
UserReference1 | String | 预留域1 |
UserReference2 | String | 预留域2 |
UserReference3 | String | 预留域3 |
UserReference4 | String | 预留域4 |
UserReference5 | String | 预留域5 |
UserReference6 | String | 预留域6 |
UserReference7 | String | 预留域7 |
UserReference8 | String | 预留域8 |
NatOrNot | String | 是否是Nat交易, yes -是 , no -否 |
OrderId | String | 交易的唯一id, 同授权报表OrderId |
2.授权交易报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
CardlogID | String | 卡记录ID,加密的卡号 |
ProductCode | String | 卡类型 |
TransID | String | 卡记录号(卡短号) |
Status | String | 卡状态 |
IssuedToECN | String | 客户号 |
CardType | String | 卡片类型 |
MerchantCategory | String | 商户类别 |
VAN | String | 卡号 |
TransactionProfileCode | String | 交易码, 6810 -消费授权,6510 -退款授权,6930 -消费授权冲正,6940 -退款授权冲正,6820 -授权查询 |
TransactionProfileType | String | 交易类型,Authorization (Purchase) -消费授权,Authorization (Refund) -退款授权,Authorization Reversal (Purchase) -消费授权冲正,Authorization Reversal (Refund) -退款授权冲正,Authorization Query -授权查询 |
RequestedTime | String | 发卡时间,格式yyyy-MM-dd HH:mm:ss |
ActivationDate | String | 可交易日期,格式yyyy-MM-dd |
ExpiryDate | String | 有效期, 格式yyyy-MM-dd |
VANCurrency | String | 开卡币种 |
MinAmt | String | 最小交易金额 |
MaxAmt | String | 最大交易金额 |
AvailableBalance | String | 剩余额度 |
AuthCount | String | 授权次数 |
VANMode | String | 单次/多次卡, Singleuse -单次卡,Multiuse -多次卡 |
VANhistoryID | String | 授权流水号 |
AuthStatus | String | 授权状态,success -成功,failure -失败 |
MsgType | String | 消息类型 |
AuthCode | String | 授权码 |
TransTime | String | UTC8时间,格式yyyy-MM-dd HH:mm:ss |
POSCurr | String | 刷卡币种 |
POSAmt | String | 刷卡金额 |
MerchID | String | MID |
MerchantName | String | 商户名称 |
MerchantCity | String | 商户城市 |
MerchantCountry | String | 商户国家 |
CrossBoardType | String | 跨境类型, international -国际, domestic -国内 |
MerchCategoryCode | String | MCC |
MerchCategoryName | String | MCC名称 |
UserReference1 | String | 预留域1 |
UserReference2 | String | 预留域2 |
UserReference3 | String | 预留域3 |
UserReference4 | String | 预留域4 |
UserReference5 | String | 预留域5 |
UserReference6 | String | 预留域6 |
UserReference7 | String | 预留域7 |
UserReference8 | String | 预留域8 |
Notes | String | N/A, 一般为空 |
OrderId | String | 交易id, |
3.开卡报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
VAN | String | 卡号 |
CardlogID | String | 加密卡号 |
ProductCode | String | 卡类型 |
TransID | String | 卡记录号(卡短号) |
RequestedDate | String | 申卡日期,格式 yyyy-MM-dd |
RequestedTime | String | 申卡时间, 格式yyyy-MM-dd HH:mm:ss |
VANCurrency | String | 开卡币种 |
VANAmt | String | 开卡额度 |
SettlementCurrency | String | 结算币种 |
ActivationDate | String | 可交易日期, 格式yyyy-MM-dd |
ExpiryDate | String | 有效期, 格式yyyy-MM-dd |
VANMode | String | 卡片模式,Singleuse -单次卡,Multiuse -多次卡 |
CloseRatio | String | 关卡百分比 |
MinAuthAmt | String | 最小授权金额 |
MaxAuthAmt | String | 最大授权金额 |
BookingNumber | String | 订单号 |
UserName | String | 开卡用户 |
4.还款报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
VANhistoryID | String | 交易明细ID |
IssuedToECN | String | 客户ID |
Account | String | 账户类型 |
ActivityType | String | 还款 |
PMTAmount | String | 还款金额 |
PMTCurrency | String | 还款币种 |
TransDate | String | 还款日期 |
TransTime | String | 还款时间 |
5.争议报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
ECN | String | 客户ID |
TransID | String | 卡记录号(卡短号) |
CardlogID | String | 卡记录id |
ProductCode | String | 卡类型 |
NATID | String | N/A, 一般为空 |
MerchantName/Location/MC | String | MCC |
VAN | String | 卡号 |
Amount | String | 金额 |
VANCurrency | String | 卡币种 |
NetSettled | String | 清算金额 |
SettlementCurrency | String | 清算币种 |
PosAmount | String | 交易金额 |
PosCurrency | String | 交易币种 |
VANAvailableBalance | String | 卡余额 |
VANIssuedDate | String | 开卡日期, 格式yyyy-MM-dd |
1stPresentmentDate | String | 首次请款日期, 格式yyyy-MM-dd |
ActionType | String | 交易类型, Chargeback in transit -争议中, Small Balance advances -小额垫付,Chargeback Release to Ctrip -争议释放给triplink,Chargeback Release to BU -争议释放给客户 |
ActionDate | String | 日期, 格式yyyy-MM-dd |
TransTime | String | 时间,格式yyyy-MM-dd HH:mm:ss |
ActionBy | String | UID |
ChargebackReason | String | N/A,一般是为空 |
Notes/Justification | String | N/A, 一般是为空 |
DocumentationFee | String | N/A, 一般是为空 |
MasterCardDocumentationFee | String | N/A,一般是为空 |
MasterCardDocumentationFee | String | N/A,一般是为空 |
6.vcc充值报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
Date | String | 日期, 格式yyyy-MM-dd |
ClientID | String | 客户ID |
ClientName | String | 客户名称 |
Top_up_Amount | String | 充值金额 |
Top_up_Currency | String | 充值币种 |
7.授权计费报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
Date | String | 日期,格式yyyy-MM-dd |
ClientID | String | 客户ID |
ClientName | String | 客户名称 |
Auth_Fee | String | 授权费用 |
Auth_Fee_Curr | String | 授权费用币种 |
CardlogID | String | 卡id |
ProductCode | String | 产品code |
TransID | String | 交易id |
VAN | String | 卡号 |
TransactionProfileCode | String | 授权码 |
TransactionProfileType | String | 授权类型 |
AuthStatus | String | 授权状态 |
MsgType | String | MSG |
AuthCode | String | 授权code |
TransTime | String | 授权时间 |
POSCurr | String | 授权币种 |
POSAmt | String | 授权金额 |
8.资金明细报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
Customer_id | String | 客户id |
Event_time | String | 变动时间, 格式yyyy-MM-dd HH:mm:ss |
ActivityType | String | 交易类型 |
VANhistoryID | String | 流水号, 唯一的 |
OrderID | String | 交易号 |
SettlementState | String | 是否清算 |
TransactionCurrency | String | 交易币种 |
TransactionAmount | String | 交易金额 |
CardlogId | String | 加密卡号 |
VAN | String | 卡号 |
Currency | String | 币种 |
Amount | String | 金额 |
BeginBalanceAmount | String | 期初金额 |
EndBalanceAmount | String | 期末金额 |
AuthCode | String | 授权码 |
9.实时换汇授权报表表头
表头字段 | 字段类型 | 字段含义 |
---|---|---|
CustomerId | String | 客户号 |
CardlogID | String | 加密卡号 |
VAN | String | 卡号 |
AuthCode | String | 授权码 |
TransTime | String | 授权时间, 格式yyyy-MM-dd |
POSCurr | String | 授权币种 |
POSAmt | String | 授权金额 |
QuotaId | String | 查询汇率id |
QuotaIdRate | String | 查询汇率 |
FXTime | String | 换汇时间, 格式yyyy-MM-dd HH:mm:ss |
BuyCurr | String | 买入币种 |
BuyAmt | String | 买入金额 |
SellCurr | String | 卖出币种 |
SellAmt | String | 卖出金额 |
Rate | String | 汇率(实际成交) |
10.奖励金报表
表头字段 | 字段类型 | 字段含义 |
---|---|---|
CardlogID | String | 加密卡号 |
orderid | String | 订单号 |
TransID | String | 记录ID |
ActivityType | String | 交易类型 |
VAN | String | 卡号 |
TransDate | String | 入账日期, 格式yyyy-MM-dd |
TransTime | String | 入账时间, 格式yyyy-MM-dd HH:mm:ss |
ReconciliationCurrency | String | 结算币种 |
ReconciliationAmount | String | 结算金额 |
product_code | String | 卡类型 |
crossboard_type | String | 跨境类型, international -国际, domestic -国内 |
commission_rate | String | 返点率 |
commission_mcc_group | String | mcc组 |
channel | String | 渠道 |
MerchName | String | 商户名称 |