-
Notifications
You must be signed in to change notification settings - Fork 0
四、子域配置
子域类型分为FIXED、UV、UVAS、TLV、TLV2、TV、ULV、ULV2、PAGE及嵌套子域;其中TLV、TLV2和TV较为特殊,可以和其他子域类型组合使用。
- FIXED 固定格式子域,例如银联F53、F54、F60、F90,JCB F28、F43等
- UV usage-value子域,例如银联F59、F62,cup F47、F48、F62等
- UVAS 多个UV通过usage=AS方式组合子域,例如银联F48、F57等
- TLV tag-length-value子域,例如银联F55
- TLV2 TLV变种,目前只与UV子域组合使用,例如cupF62
- TV tag-value子域,目前只与UV子域组合使用,例如银联F62
- ULV usage-length-value子域,例如银联F56、F63、F104、F113等
- ULV2 ULV变种,例如JCB F48、F60
- PAGE 分页子域,例如固定格式3886交易
- 嵌套子域 以上类型子域的嵌套关系,例如银联F59 usage=QR、F60.11、F61.10等
子域分类:
- 单独方式 每种子域类型独立存在,例如:FIXED、UV、UVAS、TLV、ULV、PAGE等
- 嵌套方式 子域下配置子域,即嵌套子域,例如:FIXED-UV、FIXED-PAGE、UV-FIXED、FIXED-FIXED、FIXED-PAGE等
- 组合方式 特殊的单独方式,两种子域类型组合成一种,例如:ULV-TLV、UV-TV、UV-TLV2等
子域配置需额外增加两项参数:existSubdomain: true
,subdomainType: [子域类型]
;
FIXED类型子域,子域无特殊格式处理,以银联53域为例:
父域配置为:
payload:
- { "domainNo": 53, "name": "secRelatdCtrlInfo", "fixed": true, "length": 16, "remark": "安全控制信息", "existSubdomain": true, "subdomainType": "FIXED" }
子域配置为F[子域号]
,后接子域字段:
F53:
- { "domainNo": 1, "name": "keyType", "fixed": true, "length": 1, "remark": "重置密钥的类型/PIN格式", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "encryptionMethodUsed", "fixed": true, "length": 1, "remark": "加密算法标志", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "reserved", "fixed": true, "length": 14, "remark": "保留使用", "clazz": "java.lang.String" }
父域配置为:
<payload>
<field domainNo="53" name="secRelatdCtrlInfo" fixed="true" length="16" remark="安全控制信息" existSubdomain="true" subdomainType="FIXED"/>
</payload>
子域配置:
<subPayload domain="F53">
<field domainNo="1" name="keyType" fixed="true" length="1" remark="重置密钥的类型/PIN格式" clazz="java.lang.String"/>
<field domainNo="2" name="encryptionMethodUsed" fixed="true" length="1" remark="加密算法标志" clazz="java.lang.String"/>
<field domainNo="3" name="reserved" fixed="true" length="14" remark="保留使用" clazz="java.lang.String"/>
</subPayload>
通过引用子域类来映射父子域关系,父域配置为:
@IsoFieldMeta(domainNo = 53, fixed = true, length = 16, remark = "安全控制信息", existSubdomain = true, subdomainType = FIXED)
private Field53 secRelatdCtrlInfo;
子域配置:
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F53", remark = "银联8583 53域")
public class Field53 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 1, remark = "重置密钥的类型/PIN格式")
private String keyType;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 1, remark = "加密算法标志")
private String encryptionMethodUsed;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 14, remark = "保留使用")
private String reserved;
// getter setter
}
ALK_MESSAGE_DEFINITION
表配置:
M_ID | M_TYPE | M_GROUP | M_CODE | M_KIND | M_DOMAIN | M_USAGE | M_DOMAIN_TYPE | M_HOLDER | M_CHARSET | M_REMARK |
---|---|---|---|---|---|---|---|---|---|---|
20 | iso | cups | common | subPayload | F53 | NONE | GB18030 | 银联8583报文F53 |
ALK_FIELD_DEFINITION
表配置:
M_ID | F_ID | F_DOMAIN_NO | F_NAME | F_ALIAS_NAME | F_FIXED | F_LENGTH | F_MAX_LENGTH | F_CLAZZ | F_PATTERN | F_REMARK | F_STATUS | F_PAGE_SIZE_NAME | F_PARSE_TYPE | F_EXIST_SUBDOMAIN | F_SUBDOMAIN_TYPE | F_NON_SUBDOMAIN_EXCEPTION |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
20 | 336 | 1 | keyType | 1 | 1 | 1 | java.lang.String | 重置密钥的类型/PIN格式 | OPEN | ASCII | 0 | |||||
20 | 337 | 2 | encryptionMethodUsed | 1 | 1 | 1 | java.lang.String | 加密算法标志 | OPEN | ASCII | 0 | |||||
20 | 338 | 3 | reserved | 1 | 14 | 14 | java.lang.String | 保留使用 | OPEN | ASCII | 0 |
UV(usage-value)类型子域,以银联59域为例:
父域配置为:
payload:
- { "domainNo": 59, "name": "detailInqrng", "fixed": false, "length": 3, "maxLength": 600, "remark": "明细查询数据", "existSubdomain": true, "subdomainType": "UV" }
子域配置为F[子域号]$[usage]
,后接子域字段;usage=QL/QD子域配置为:
F59$QL:
- { "domainNo": 1, "name": "number", "fixed": true, "length": 3, "remark": "当前明细顺序号", "clazz": "java.lang.Integer" }
F59$QD:
- { "domainNo": 1, "name": "number", "fixed": true, "length": 3, "remark": "当前明细顺序号", "clazz": "java.lang.Integer" }
- { "domainNo": 2, "name": "beginDate", "fixed": true, "length": 8, "remark": "明细起始日期", "clazz": "java.time.LocalDate", "pattern": "yyyyMMdd" }
- { "domainNo": 3, "name": "endDate", "fixed": true, "length": 8, "remark": "明细中止日期", "clazz": "java.time.LocalDate", "pattern": "yyyyMMdd" }
父域配置为:
<payload>
<field domainNo="59" name="detailInqrng" fixed="false" length="3" maxLength="600" remark="明细查询数据" existSubdomain="true" subdomainType="UV"/>
</payload>
子域配置:
<subPayload domain="F59" usage="QL">
<field domainNo="1" name="number" fixed="true" length="3" remark="当前明细顺序号" clazz="java.lang.Integer"/>
</subPayload>
<subPayload domain="F59" usage="QD">
<field domainNo="1" name="number" fixed="true" length="3" remark="当前明细顺序号" clazz="java.lang.Integer"/>
<field domainNo="2" name="beginDate" fixed="true" length="8" remark="明细起始日期" clazz="java.time.LocalDate" pattern="yyyyMMdd"/>
<field domainNo="3" name="endDate" fixed="true" length="8" remark="明细中止日期" clazz="java.time.LocalDate" pattern="yyyyMMdd"/>
</subPayload>
UV类型父域通过com.alatka.messages.holder.UsageSubdomain
引用子域接口,父域配置为:
@IsoFieldMeta(domainNo = 59, fixed = false, length = 3, maxLength = 600, remark = "明细查询数据", existSubdomain = true, subdomainType = UV)
private UsageSubdomain<Field59> detailInqrng;
子域配置:
public interface Field59 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F59", usage = "QL", remark = "银联8583 59域usage=QL")
public class Field59$QL implements Field59 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 3, remark = "当前明细顺序号")
private Integer number;
// getter setter
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F59", usage = "QD", remark = "银联8583 59域usage=QD")
public class Field59$QD implements Field59 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 3, remark = "当前明细顺序号")
private Integer number;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 8, remark = "明细起始日期", pattern = "yyyyMMdd")
private LocalDate beginDate;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 8, remark = "明细中止日期", pattern = "yyyyMMdd")
private LocalDate endDate;
// getter setter
}
UVAS类型子域,为多个UV以usage=AS方式组合,配置方式与UV类型相同;UVAS类型会判断域中是否存在usage=AS及自动解析处理;以银联57域为例:
父域配置为:
payload:
- { "domainNo": 57, "name": "addtnlData57", "fixed": false, "length": 3, "maxLength": 100, "remark": "附加交易信息", "existSubdomain": true, "subdomainType": "UVAS" }
子域配置为F[子域号]$[usage]
,后接子域字段;usage=AR/AB子域:
F57$AR:
- { "domainNo": 1, "name": "f57f1", "fixed": true, "length": 3, "remark": "附加应答信息", "clazz": "java.lang.String" }
F57$AB:
- { "domainNo": 1, "name": "addInfo", "fixed": true, "length": 20, "remark": "发卡方附加交易信息", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "cupsAddInfo", "fixed": true, "length": 20, "remark": "CUPS附加交易信息", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "reserved", "fixed": true, "length": 56, "remark": "保留使用", "clazz": "java.lang.String" }
父域配置为:
<payload>
<field domainNo="57" name="addtnlData57" fixed="false" length="3" maxLength="100" remark="附加交易信息" existSubdomain="true" subdomainType="UVAS"/>
</payload>
子域配置:
<subPayload domain="F57" usage="AR">
<field domainNo="1" name="f57f1" fixed="true" length="3" remark="附加应答信息" clazz="java.lang.String"/>
</subPayload>
<subPayload domain="F57" usage="AB">
<field domainNo="1" name="addInfo" fixed="true" length="20" remark="发卡方附加交易信息" clazz="java.lang.String"/>
<field domainNo="2" name="cupsAddInfo" fixed="true" length="20" remark="CUPS附加交易信息" clazz="java.lang.String"/>
<field domainNo="3" name="reserved" fixed="true" length="56" remark="保留使用" clazz="java.lang.String"/>
</subPayload>
父域通过com.alatka.messages.holder.UsageSubdomain
引用子域接口,父域配置为:
@IsoFieldMeta(domainNo = 57, fixed = false, length = 3, maxLength = 100, remark = "附加交易信息", existSubdomain = true, subdomainType = UVAS)
private UsageSubdomain<Field57> addtnlData57;
子域配置:
public interface Field57 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F57", usage = "AR", remark = "银联8583 57域usage=AR")
public class Field57$AR implements Field57 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 3, remark = "附加应答信息")
private String f57f1;
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F57", usage = "AB", remark = "银联8583 57域usage=AB")
public class Field57$AB implements Field57 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 20, remark = "发卡方附加交易信息")
private String addInfo;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 20, remark = "CUPS附加交易信息")
private String cupsAddInfo;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 56, remark = "保留使用")
private String reserved;
}
TLV(tag-length-value)类型子域,以银联55域为例:
父域配置为:
payload:
- { "domainNo": 55, "name": "iccData", "fixed": false, "length": 3, "maxLength": 255, "remark": "IC卡数据域", "existSubdomain": true, "subdomainType": "TLV" }
子域配置为F[子域号]@TLV
,后接子域字段:
F55@TLV:
- { "domainNo": 1, "aliasName": "9F26", "name": "crypt", "fixed": true, "length": 8, "remark": "应用密文", "clazz": "[B" }
- { "domainNo": 2, "aliasName": "9F27", "name": "cryptInfoData", "fixed": true, "length": 1, "remark": "密文信息数据", "clazz": "[B" }
- { "domainNo": 3, "aliasName": "9F10", "name": "issuerAppData", "fixed": false, "maxLength": 32, "remark": "发卡行应用数据", "clazz": "[B" }
- { "domainNo": 4, "aliasName": "9F37", "name": "unpredictableNumber", "fixed": true, "length": 4, "remark": "不可预知数", "clazz": "[B" }
- { "domainNo": 5, "aliasName": "9F36", "name": "appTransCounter", "fixed": true, "length": 2, "remark": "应用交易计数器", "clazz": "[B" }
- { "domainNo": 6, "aliasName": "95", "name": "termVerificationResult", "fixed": true, "length": 5, "remark": "终端验证结果", "clazz": "[B" }
- { "domainNo": 7, "aliasName": "9A", "name": "transDate", "fixed": true, "length": 3, "remark": "交易日期", "clazz": "java.time.LocalDate", "pattern": "yyMMdd", "parseType": "BCD" }
- { "domainNo": 8, "aliasName": "9C", "name": "transType", "fixed": true, "length": 1, "remark": "交易类型", "clazz": "java.lang.Integer", "parseType": "BCD" }
- { "domainNo": 9, "aliasName": "9F02", "name": "transAmt", "fixed": true, "length": 6, "remark": "授权金额", "clazz": "java.math.BigDecimal", "parseType": "BCD" }
- { "domainNo": 10, "aliasName": "5F2A", "name": "transCurrencyCode", "fixed": true, "length": 2, "remark": "交易货币代码", "clazz": "java.lang.Integer", "parseType": "BCD" }
- { "domainNo": 11, "aliasName": "82", "name": "appInterchangeProfile", "fixed": true, "length": 2, "remark": "应用交互特征", "clazz": "[B" }
- { "domainNo": 12, "aliasName": "9F1A", "name": "termCountryCode", "fixed": true, "length": 2, "remark": "终端国家代码", "clazz": "java.lang.Integer", "parseType": "BCD" }
- { "domainNo": 13, "aliasName": "9F03", "name": "otherAmt", "fixed": true, "length": 6, "remark": "其它金额", "clazz": "java.math.BigDecimal", "parseType": "BCD" }
- { "domainNo": 14, "aliasName": "9F33", "name": "termCap", "fixed": true, "length": 3, "remark": "终端性能", "clazz": "[B" }
- { "domainNo": 15, "aliasName": "9F34", "name": "cardholderVerificationMethodResults", "fixed": true, "length": 3, "remark": "持卡人验证方法结果", "clazz": "[B" }
- { "domainNo": 16, "aliasName": "9F35", "name": "termType", "fixed": true, "length": 1, "remark": "终端类型", "clazz": "java.lang.Integer", "parseType": "BCD" }
- { "domainNo": 17, "aliasName": "9F1E", "name": "interfaceDeviceSerialNumber", "fixed": true, "length": 8, "remark": "接口设备序列号", "clazz": "java.lang.String" }
- { "domainNo": 18, "aliasName": "84", "name": "dedicatedFileName", "fixed": false, "maxLength": 16, "remark": "专用文件名称", "clazz": "[B" }
- { "domainNo": 19, "aliasName": "9F09", "name": "termAppVersionNumber", "fixed": true, "length": 2, "remark": "应用版本号", "clazz": "[B" }
- { "domainNo": 20, "aliasName": "9F41", "name": "transSequenceCounter", "fixed": false, "maxLength": 4, "remark": "交易序列计数器", "clazz": "java.lang.Integer", "parseType": "BCD" }
- { "domainNo": 21, "aliasName": "91", "name": "issuerAuthenticationData", "fixed": false, "maxLength": 16, "remark": "发卡行认证数据", "clazz": "[B" }
- { "domainNo": 22, "aliasName": "71", "name": "issuerScriptTemplate1", "fixed": false, "maxLength": 128, "remark": "发卡行脚本1", "clazz": "[B" }
- { "domainNo": 23, "aliasName": "72", "name": "issuerScriptTemplate2", "fixed": false, "maxLength": 128, "remark": "发卡行脚本2", "clazz": "[B" }
- { "domainNo": 24, "aliasName": "DF31", "name": "issuerScriptResults", "fixed": false, "maxLength": 21, "remark": "发卡方脚本结果", "clazz": "[B" }
- { "domainNo": 25, "aliasName": "9F74", "name": "issuerAuthorizationCode", "fixed": true, "length": 6, "remark": "电子现金发卡行授权码", "clazz": "java.lang.String" }
- { "domainNo": 26, "aliasName": "9F63", "name": "cardProductIdentification", "fixed": true, "length": 16, "remark": "卡产品标识信息", "clazz": "[B" }
- { "domainNo": 27, "aliasName": "8A", "name": "authorizationResponseCode", "fixed": true, "length": 2, "remark": "授权响应码", "clazz": "java.lang.String" }
父域配置为:
<payload>
<field domainNo="55" name="iccData" fixed="false" length="3" maxLength="255" remark="IC卡数据域" existSubdomain="true" subdomainType="TLV"/>
</payload>
子域配置:
<subPayload domain="F55" domainType="TLV">
<field domainNo="1" aliasName="9F26" name="crypt" fixed="true" length="8" remark="应用密文" clazz="[B"/>
<field domainNo="2" aliasName="9F27" name="cryptInfoData" fixed="true" length="1" remark="密文信息数据" clazz="[B"/>
<field domainNo="3" aliasName="9F10" name="issuerAppData" fixed="false" maxLength="32" remark="发卡行应用数据" clazz="[B"/>
<field domainNo="4" aliasName="9F37" name="unpredictableNumber" fixed="true" length="4" remark="不可预知数" clazz="[B"/>
<field domainNo="5" aliasName="9F36" name="appTransCounter" fixed="true" length="2" remark="应用交易计数器" clazz="[B"/>
<field domainNo="6" aliasName="95" name="termVerificationResult" fixed="true" length="5" remark="终端验证结果" clazz="[B"/>
<field domainNo="7" aliasName="9A" name="transDate" fixed="true" length="3" remark="交易日期" clazz="java.time.LocalDate" pattern="yyMMdd" parseType="BCD"/>
<field domainNo="8" aliasName="9C" name="transType" fixed="true" length="1" remark="交易类型" clazz="java.lang.Integer" parseType="BCD"/>
<field domainNo="9" aliasName="9F02" name="transAmt" fixed="true" length="6" remark="授权金额" clazz="java.math.BigDecimal" parseType="BCD"/>
<field domainNo="10" aliasName="5F2A" name="transCurrencyCode" fixed="true" length="2" remark="交易货币代码" clazz="java.lang.Integer" parseType="BCD"/>
<field domainNo="11" aliasName="82" name="appInterchangeProfile" fixed="true" length="2" remark="应用交互特征" clazz="[B"/>
<field domainNo="12" aliasName="9F1A" name="termCountryCode" fixed="true" length="2" remark="终端国家代码" clazz="java.lang.Integer" parseType="BCD"/>
<field domainNo="13" aliasName="9F03" name="otherAmt" fixed="true" length="6" remark="其它金额" clazz="java.math.BigDecimal" parseType="BCD"/>
<field domainNo="14" aliasName="9F33" name="termCap" fixed="true" length="3" remark="终端性能" clazz="[B"/>
<field domainNo="15" aliasName="9F34" name="cardholderVerificationMethodResults" fixed="true" length="3" remark="持卡人验证方法结果" clazz="[B"/>
<field domainNo="16" aliasName="9F35" name="termType" fixed="true" length="1" remark="终端类型" clazz="java.lang.Integer" parseType="BCD"/>
<field domainNo="17" aliasName="9F1E" name="interfaceDeviceSerialNumber" fixed="true" length="8" remark="接口设备序列号" clazz="java.lang.String"/>
<field domainNo="18" aliasName="84" name="dedicatedFileName" fixed="false" maxLength="16" remark="专用文件名称" clazz="[B"/>
<field domainNo="19" aliasName="9F09" name="termAppVersionNumber" fixed="true" length="2" remark="应用版本号" clazz="[B"/>
<field domainNo="20" aliasName="9F41" name="transSequenceCounter" fixed="false" maxLength="4" remark="交易序列计数器" clazz="java.lang.Integer" parseType="BCD"/>
<field domainNo="21" aliasName="91" name="issuerAuthenticationData" fixed="false" maxLength="16" remark="发卡行认证数据" clazz="[B"/>
<field domainNo="22" aliasName="71" name="issuerScriptTemplate1" fixed="false" maxLength="128" remark="发卡行脚本1" clazz="[B"/>
<field domainNo="23" aliasName="72" name="issuerScriptTemplate2" fixed="false" maxLength="128" remark="发卡行脚本2" clazz="[B"/>
<field domainNo="24" aliasName="DF31" name="issuerScriptResults" fixed="false" maxLength="21" remark="发卡方脚本结果" clazz="[B"/>
<field domainNo="25" aliasName="9F74" name="issuerAuthorizationCode" fixed="true" length="6" remark="电子现金发卡行授权码" clazz="java.lang.String"/>
<field domainNo="26" aliasName="9F63" name="cardProductIdentification" fixed="true" length="16" remark="卡产品标识信息" clazz="[B"/>
<field domainNo="27" aliasName="8A" name="authorizationResponseCode" fixed="true" length="2" remark="授权响应码" clazz="java.lang.String"/>
</subPayload>
父域通过引用子域类,父域配置为:
@IsoFieldMeta(domainNo = 55, fixed = false, length = 3, maxLength = 255, remark = "IC卡数据域", existSubdomain = true, subdomainType = TLV)
private Field55 iccData;
子域配置:
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F55", domainType = TLV, remark = "cups 55域")
public class Field55 {
@IsoFieldMeta(domainNo = 1, aliasName = "9F26", fixed = true, length = 8, remark = "应用密文")
private byte[] crypt;
@IsoFieldMeta(domainNo = 2, aliasName = "9F27", fixed = true, length = 1, remark = "密文信息数据")
private byte[] cryptInfoData;
@IsoFieldMeta(domainNo = 3, aliasName = "9F10", fixed = false, maxLength = 32, remark = "发卡行应用数据")
private byte[] issuerAppData;
@IsoFieldMeta(domainNo = 4, aliasName = "9F37", fixed = true, length = 4, remark = "不可预知数")
private byte[] unpredictableNumber;
@IsoFieldMeta(domainNo = 5, aliasName = "9F36", fixed = true, length = 2, remark = "应用交易计数器")
private byte[] appTransCounter;
@IsoFieldMeta(domainNo = 6, aliasName = "95", fixed = true, length = 5, remark = "终端验证结果")
private byte[] termVerificationResult;
@IsoFieldMeta(domainNo = 7, aliasName = "9A", fixed = true, length = 3, remark = "交易日期", pattern = "yyMMdd", parseType = BCD)
private LocalDate transDate;
@IsoFieldMeta(domainNo = 8, aliasName = "9C", fixed = true, length = 1, remark = "交易类型", parseType = BCD)
private Integer transType;
@IsoFieldMeta(domainNo = 9, aliasName = "9F02", fixed = true, length = 6, remark = "授权金额", parseType = BCD)
private BigDecimal transAmt;
@IsoFieldMeta(domainNo = 10, aliasName = "5F2A", fixed = true, length = 2, remark = "交易货币代码", parseType = BCD)
private Integer transCurrencyCode;
@IsoFieldMeta(domainNo = 11, aliasName = "82", fixed = true, length = 2, remark = "应用交互特征")
private byte[] appInterchangeProfile;
@IsoFieldMeta(domainNo = 12, aliasName = "9F1A", fixed = true, length = 2, remark = "终端国家代码", parseType = BCD)
private Integer termCountryCode;
@IsoFieldMeta(domainNo = 13, aliasName = "9F03", fixed = true, length = 6, remark = "其它金额", parseType = BCD)
private BigDecimal otherAmt;
@IsoFieldMeta(domainNo = 14, aliasName = "9F34", fixed = true, length = 3, remark = "持卡人验证方法结果")
private byte[] cardholderVerificationMethodResults;
@IsoFieldMeta(domainNo = 15, aliasName = "9F35", fixed = true, length = 1, remark = "终端类型", parseType = BCD)
private Integer termType;
@IsoFieldMeta(domainNo = 16, aliasName = "9F09", fixed = true, length = 2, remark = "应用版本号")
private byte[] termAppVersionNumber;
@IsoFieldMeta(domainNo = 17, aliasName = "9F33", fixed = true, length = 3, remark = "终端性能")
private byte[] termCap;
@IsoFieldMeta(domainNo = 18, aliasName = "9F1E", fixed = true, length = 8, remark = "接口设备序列号")
private String interfaceDeviceSerialNumber;
@IsoFieldMeta(domainNo = 19, aliasName = "4F", fixed = false, maxLength = 16, remark = "icc application ID")
private byte[] iccAppId;
@IsoFieldMeta(domainNo = 20, aliasName = "9F41", fixed = false, maxLength = 4, remark = "交易序列计数器", parseType = BCD)
private Integer transSequenceCounter;
@IsoFieldMeta(domainNo = 21, aliasName = "9F7C", fixed = false, maxLength = 32, remark = "Partner Discretionary Data")
private byte[] pdd;
@IsoFieldMeta(domainNo = 22, aliasName = "84", fixed = false, maxLength = 16, remark = "专用文件名称")
private byte[] dedicatedFileName;
@IsoFieldMeta(domainNo = 23, aliasName = "91", fixed = false, maxLength = 16, remark = "发卡行认证数据")
private byte[] issuerAuthenticationData;
@IsoFieldMeta(domainNo = 24, aliasName = "71", fixed = false, maxLength = 128, remark = "发卡行脚本1")
private byte[] issuerScriptTemplate1;
@IsoFieldMeta(domainNo = 25, aliasName = "72", fixed = false, maxLength = 128, remark = "发卡行脚本2")
private byte[] issuerScriptTemplate2;
// getter setter
}
TLV2(tag-length-value)类型子域,以cupd62域usage=DA为例:
父域配置为:
payload:
- { "domainNo": 62, "name": "switchingData", "fixed": false, "length": 3, "maxLength": 200, "remark": "交换中心数据", "existSubdomain": true, "subdomainType": "UV" }
子域配置为F[子域号]@TLV2
,后接子域字段:
F62$DA@TLV2:
- { "domainNo": 1, "aliasName": "T00", "name": "f104f1", "fixed": false, "maxLength": 6, "remark": "渠道编码", "clazz": "java.lang.String" }
- { "domainNo": 2, "aliasName": "T01", "name": "f104f2", "fixed": false, "maxLength": 4, "remark": "账务代码", "clazz": "java.lang.String" }
- { "domainNo": 3, "aliasName": "T02", "name": "f104f3", "fixed": false, "maxLength": 32, "remark": "渠道流水号", "clazz": "java.lang.String" }
- { "domainNo": 4, "aliasName": "T03", "name": "f104f4", "fixed": true, "length": 71, "remark": "反洗钱相关", "existSubdomain": true, "subdomainType": "FIXED" }
- { "domainNo": 5, "aliasName": "T94", "name": "f104f5", "fixed": true, "length": 8, "remark": "原始交易信息", "clazz": "java.lang.String" }
- { "domainNo": 6, "aliasName": "T95", "name": "f104f6", "fixed": true, "length": 15, "remark": "第三方支付信息", "existSubdomain": true, "subdomainType": "FIXED" }
- { "domainNo": 7, "aliasName": "T96", "name": "f104f7", "fixed": true, "length": 67, "remark": "无卡平台信息", "clazz": "java.lang.String" }
- { "domainNo": 8, "aliasName": "T97", "name": "f104f8", "fixed": true, "length": 51, "remark": "总帐系统配套会计平台", "existSubdomain": true, "subdomainType": "FIXED" }
- { "domainNo": 9, "aliasName": "T98", "name": "f104f9", "fixed": false, "maxLength": 19, "remark": "联盟流水号", "clazz": "java.lang.String" }
- { "domainNo": 10, "aliasName": "T99", "name": "f104f10", "fixed": true, "length": 134, "remark": "行内信息", "clazz": "java.lang.String" }
父域配置为:
子域配置:
父域通过引用子域类,父域配置为:
子域配置:
TV(tag-value)类型子域,以银联62域为例:
父域配置为:
payload:
- { "domainNo": 62, "name": "switchingData", "fixed": false, "length": 3, "maxLength": 200, "remark": "交换中心数据", "existSubdomain": true, "subdomainType": "UV" }
子域配置为F[子域号]@TV
,后接子域字段:
F62$IO@TV:
- { "domainNo": 1, "name": "f62f1", "aliasName": "T00", "fixed": true, "length": 3, "remark": "国际信用卡公司/外资银行标志", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "f62f2", "aliasName": "T07", "fixed": true, "length": 10, "remark": "交易日期时间", "clazz": "java.time.LocalDateTime", "pattern": "MMddHHmmss" }
- { "domainNo": 3, "name": "f62f3", "aliasName": "T11", "fixed": true, "length": 6, "remark": "系统跟踪号码", "clazz": "java.lang.String" }
- { "domainNo": 4, "name": "f62f4", "aliasName": "T18", "fixed": true, "length": 4, "remark": "商户类型", "clazz": "java.lang.String" }
- { "domainNo": 5, "name": "f62f5", "aliasName": "T32", "fixed": true, "length": 11, "remark": "受理机构代码", "clazz": "java.lang.String" }
- { "domainNo": 6, "name": "f62f6", "aliasName": "T33", "fixed": true, "length": 11, "remark": "发送机构标识码", "clazz": "java.lang.String" }
- { "domainNo": 7, "name": "f62f7", "aliasName": "T39", "fixed": true, "length": 2, "remark": "响应码", "clazz": "java.lang.String" }
- { "domainNo": 8, "name": "f62f8", "aliasName": "T37", "fixed": true, "length": 12, "remark": "检索参考号码", "clazz": "java.lang.String" }
- { "domainNo": 9, "name": "f62f9", "aliasName": "T41", "fixed": true, "length": 8, "remark": "终端代码", "clazz": "java.lang.String" }
- { "domainNo": 10, "name": "f62f10", "aliasName": "T42", "fixed": true, "length": 15, "remark": "商户代码", "clazz": "java.lang.String" }
- { "domainNo": 11, "name": "f62f11", "aliasName": "T43", "fixed": true, "length": 40, "remark": "商户名称、地址", "clazz": "java.lang.String" }
- { "domainNo": 12, "name": "f62f12", "aliasName": "T60", "fixed": true, "length": 7, "remark": "报文原因码", "clazz": "java.lang.String" }
父域配置为:
<payload>
<field domainNo="62" name="switchingData" fixed="false" length="3" maxLength="200" remark="交换中心数据" existSubdomain="true" subdomainType="UV"/>
</payload>
子域配置:
<subPayload domain="F62" usage="IO" domainType="TV">
<field domainNo="1" name="f62f1" aliasName="T00" fixed="true" length="3" remark="国际信用卡公司/外资银行标志" clazz="java.lang.String"/>
<field domainNo="2" name="f62f2" aliasName="T07" fixed="true" length="10" remark="交易日期时间" clazz="java.time.LocalDateTime" pattern="MMddHHmmss"/>
<field domainNo="3" name="f62f3" aliasName="T11" fixed="true" length="6" remark="系统跟踪号码" clazz="java.lang.String"/>
<field domainNo="4" name="f62f4" aliasName="T18" fixed="true" length="4" remark="商户类型" clazz="java.lang.String"/>
<field domainNo="5" name="f62f5" aliasName="T32" fixed="true" length="11" remark="受理机构代码" clazz="java.lang.String"/>
<field domainNo="6" name="f62f6" aliasName="T33" fixed="true" length="11" remark="发送机构标识码" clazz="java.lang.String"/>
<field domainNo="7" name="f62f7" aliasName="T39" fixed="true" length="2" remark="响应码" clazz="java.lang.String"/>
<field domainNo="8" name="f62f8" aliasName="T37" fixed="true" length="12" remark="检索参考号码" clazz="java.lang.String"/>
<field domainNo="9" name="f62f9" aliasName="T41" fixed="true" length="8" remark="终端代码" clazz="java.lang.String"/>
<field domainNo="10" name="f62f10" aliasName="T42" fixed="true" length="15" remark="商户代码" clazz="java.lang.String"/>
<field domainNo="11" name="f62f11" aliasName="T43" fixed="true" length="40" remark="商户名称、地址" clazz="java.lang.String"/>
<field domainNo="12" name="f62f12" aliasName="T60" fixed="true" length="7" remark="报文原因码" clazz="java.lang.String"/>
</subPayload>
父域通过引用子域类,父域配置为:
@IsoFieldMeta(domainNo = 62, fixed = false, length = 3, maxLength = 200, remark = "交换中心数据", existSubdomain = true, subdomainType = UV)
private UsageSubdomain<Field62> switchingData;
子域配置:
public interface Field62 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F62", usage = "IO", domainType = TV, remark = "银联8583 62域usage=IO")
public class Field62$IO implements Field62 {
@IsoFieldMeta(domainNo = 1, aliasName = "T00", fixed = true, length = 3, remark = "国际信用卡公司/外资银行标志")
private String f62f1;
@IsoFieldMeta(domainNo = 2, aliasName = "T07", fixed = true, length = 10, remark = "交易日期时间", pattern = "MMddHHmmss")
private LocalDateTime f62f2;
@IsoFieldMeta(domainNo = 3, aliasName = "T11", fixed = true, length = 6, remark = "系统跟踪号码")
private String f62f3;
@IsoFieldMeta(domainNo = 4, aliasName = "T18", fixed = true, length = 4, remark = "商户类型")
private String f62f4;
@IsoFieldMeta(domainNo = 5, aliasName = "T32", fixed = true, length = 11, remark = "受理机构代码")
private String f62f5;
@IsoFieldMeta(domainNo = 6, aliasName = "T33", fixed = true, length = 11, remark = "发送机构标识码")
private String f62f6;
@IsoFieldMeta(domainNo = 7, aliasName = "T39", fixed = true, length = 2, remark = "响应码")
private String f62f7;
@IsoFieldMeta(domainNo = 8, aliasName = "T37", fixed = true, length = 12, remark = "检索参考号码")
private String f62f8;
@IsoFieldMeta(domainNo = 9, aliasName = "T41", fixed = true, length = 8, remark = "终端代码")
private String f62f9;
@IsoFieldMeta(domainNo = 10, aliasName = "T42", fixed = true, length = 15, remark = "商户代码")
private String f62f10;
@IsoFieldMeta(domainNo = 11, aliasName = "T43", fixed = true, length = 40, remark = "商户名称、地址")
private String f62f11;
@IsoFieldMeta(domainNo = 12, aliasName = "T60", fixed = true, length = 7, remark = "报文原因码")
private String f62f12;
// getter setter
}
ULV(usage-length-value)类型子域,U(usage)2字节acsii编码,L(length)3字节acsii编码;以银联63域为例:
父域配置为:
payload:
- { "domainNo": 63, "name": "finaclNetData", "fixed": false, "length": 3, "maxLength": 512, "remark": "金融网络数据", "existSubdomain": true, "subdomainType": "ULV" }
子域配置为F[子域号]$[usage]
,后接子域字段;usage=SM子域:
F63$SM:
- { "domainNo": 1, "name": "pin", "fixed": true, "length": 16, "remark": "SM4算法加密的PIN数据", "clazz": "[B" }
usage=TK子域格式为TLV,配置为F[子域号]$[usage]@TLV
,后接子域字段:
F63$TK@TLV:
- { "domainNo": 1, "aliasName": "01", "name": "tag01", "fixed": true, "length": 1, "remark": "是否验证过Token相关信息", "clazz": "java.lang.String" }
- { "domainNo": 2, "aliasName": "02", "name": "tag02", "fixed": false, "maxLength": 19, "remark": "Token", "clazz": "java.lang.String" }
- { "domainNo": 3, "aliasName": "03", "name": "tag03", "fixed": true, "length": 4, "remark": "Token有效期", "clazz": "java.time.YearMonth", "pattern": "yyMM" }
- { "domainNo": 4, "aliasName": "04", "name": "tag04", "fixed": false, "maxLength": 2, "remark": "Token担保级别", "clazz": "java.lang.String" }
- { "domainNo": 5, "aliasName": "05", "name": "tag05", "fixed": true, "length": 2, "remark": "Token应用场景标识", "clazz": "java.lang.Integer" }
- { "domainNo": 6, "aliasName": "06", "name": "tag06", "fixed": false, "maxLength": 11, "remark": "TRID", "clazz": "java.lang.String" }
- { "domainNo": 7, "aliasName": "07", "name": "tag07", "fixed": false, "maxLength": 32, "remark": "保留使用", "clazz": "[B" }
- { "domainNo": 8, "aliasName": "08", "name": "tag08", "fixed": true, "length": 4, "remark": "产品标识", "clazz": "[B" }
父域配置为:
<payload>
<field domainNo="63" name="finaclNetData" fixed="false" length="3" maxLength="512" remark="金融网络数据" existSubdomain="true" subdomainType="ULV"/>
</payload>
子域配置:
<subPayload domain="F63" usage="SM">
<field domainNo="1" name="pin" fixed="true" length="16" remark="SM4算法加密的PIN数据" clazz="[B"/>
</subPayload>
<subPayload domain="F63" usage="TK" domainType="TLV">
<field domainNo="1" aliasName="01" name="tag01" fixed="true" length="1" remark="是否验证过Token相关信息" clazz="java.lang.String"/>
<field domainNo="2" aliasName="02" name="tag02" fixed="false" maxLength="19" remark="Token" clazz="java.lang.String"/>
<field domainNo="3" aliasName="03" name="tag03" fixed="true" length="4" remark="Token有效期" clazz="java.time.YearMonth" pattern="yyMM"/>
<field domainNo="4" aliasName="04" name="tag04" fixed="false" maxLength="2" remark="Token担保级别" clazz="java.lang.String"/>
<field domainNo="5" aliasName="05" name="tag05" fixed="true" length="2" remark="Token应用场景标识" clazz="java.lang.Integer"/>
<field domainNo="6" aliasName="06" name="tag06" fixed="false" maxLength="11" remark="TRID" clazz="java.lang.String"/>
<field domainNo="7" aliasName="07" name="tag07" fixed="false" maxLength="32" remark="保留使用" clazz="[B"/>
<field domainNo="8" aliasName="08" name="tag08" fixed="true" length="4" remark="产品标识" clazz="[B"/>
</subPayload>
父域通过com.alatka.messages.holder.UsageSubdomain
引用子域接口,父域配置为:
@IsoFieldMeta(domainNo = 63, fixed = false, length = 3, maxLength = 512, remark = "金融网络数据", existSubdomain = true, subdomainType = ULV)
private UsageSubdomain<Field63> finaclNetData;
子域配置:
public interface Field63 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F63", usage = "SM", remark = "银联8583 63域usage=SM")
public class Field63$SM implements Field63 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 16, remark = "SM4算法加密的PIN数据")
private byte[] pin;
// getter setter
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F63", usage = "TK", domainType = TLV, remark = "银联8583 63域usage=TK")
public class Field63$TK implements Field63 {
@IsoFieldMeta(domainNo = 1, aliasName = "01", fixed = true, length = 1, remark = "是否验证过Token相关信息")
private String tag01;
@IsoFieldMeta(domainNo = 2, aliasName = "02", fixed = false, maxLength = 19, remark = "Token")
private String tag02;
@IsoFieldMeta(domainNo = 3, aliasName = "03", fixed = true, length = 4, remark = "Token有效期", pattern = "yyMM")
private YearMonth tag03;
@IsoFieldMeta(domainNo = 4, aliasName = "04", fixed = false, maxLength = 2, remark = "Token担保级别")
private String tag04;
@IsoFieldMeta(domainNo = 5, aliasName = "05", fixed = true, length = 2, remark = "Token应用场景标识")
private Integer tag05;
@IsoFieldMeta(domainNo = 6, aliasName = "06", fixed = false, maxLength = 11, remark = "TRID")
private String tag06;
@IsoFieldMeta(domainNo = 7, aliasName = "07", fixed = false, maxLength = 32, remark = "保留使用")
private byte[] tag07;
@IsoFieldMeta(domainNo = 8, aliasName = "08", fixed = true, length = 4, remark = "产品标识")
private byte[] tag08;
// getter setter
}
ULV2(usage-length-value)类型子域,U(usage)2字节ebcdic编码,L(length)2字节ebcdic编码;以jcb 60域为例:
父域配置为:
payload:
- { "domainNo": 60, "name": "stipRelInfo", "fixed": false, "length": 1, "maxLength": 255, "remark": "STIP related information", "existSubdomain": true, "subdomainType": "ULV2", "parseType": "NONE_V2" }
子域配置为F[子域号]$[usage]
,后接子域字段,usage=01/02/03:
F60$01:
- { "domainNo": 1, "name": "f60f1", "fixed": true, "length": 1, "remark": "STIP Institution", "clazz": "java.lang.String", "parseType": "EBCDIC" }
F60$02:
- { "domainNo": 1, "name": "f60f1", "fixed": true, "length": 1, "remark": "STIP Reason", "clazz": "java.lang.String", "parseType": "EBCDIC" }
F60$03:
- { "domainNo": 1, "name": "f60f1", "fixed": true, "length": 2, "remark": "STIP Rejected Reason", "clazz": "java.lang.String", "parseType": "EBCDIC" }
父域配置为:
<payload>
<field domainNo="60" name="stipRelInfo" fixed="false" length="1" maxLength="255" remark="STIP related information" existSubdomain="true" subdomainType="ULV2" parseType="NONE_V2"/>
</payload>
子域配置:
<subPayload domain="F60" usage="01">
<field domainNo="1" name="f60f1" fixed="true" length="1" remark="STIP Institution" clazz="java.lang.String" parseType="EBCDIC"/>
</subPayload>
<subPayload domain="F60" usage="02">
<field domainNo="1" name="f60f1" fixed="true" length="1" remark="STIP Reason" clazz="java.lang.String" parseType="EBCDIC"/>
</subPayload>
<subPayload domain="F60" usage="03">
<field domainNo="1" name="f60f1" fixed="true" length="2" remark="STIP Rejected Reason" clazz="java.lang.String" parseType="EBCDIC"/>
</subPayload>
父域通过com.alatka.messages.holder.UsageSubdomain
引用子域接口,父域配置为:
@IsoFieldMeta(domainNo = 60, fixed = false, length = 1, maxLength = 255, remark = "STIP related information", existSubdomain = true, subdomainType = ULV2, parseType = NONE_V2)
private UsageSubdomain<Field60> stipRelInfo;
子域配置:
public interface Field60 {
}
@MessageMeta(type = iso, group = "jcb", code = "common", kind = subPayload, domain = "F60", usage = "01", remark = "jcb 60域usage=01")
public class Field60$01 implements Field60 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 1, remark = "STIP Institution", parseType = EBCDIC)
private String f60f1;
// getter setter
}
@MessageMeta(type = iso, group = "jcb", code = "common", kind = subPayload, domain = "F60", usage = "02", remark = "jcb 60域usage=02")
public class Field60$02 implements Field60 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 1, remark = "STIP Reason", parseType = EBCDIC)
private String f60f1;
// getter setter
}
@MessageMeta(type = iso, group = "jcb", code = "common", kind = subPayload, domain = "F60", usage = "03", remark = "jcb 60域usage=03")
public class Field60$03 implements Field60 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 2, remark = "STIP Rejected Reason", parseType = EBCDIC)
private String f60f1;
// getter setter
}
PAGE类型子域,用于分页处理;以固定格式3886交易为例,F11 counts字段为记录数,需要在分页子域中通过"pageSizeName": "counts"
进行关联:
response:
- { "domainNo": 11, "name": "counts", "length": 2, "remark": "本次返回交易条数", "clazz": "java.lang.Integer" }
- { "domainNo": 13, "name": "elements", "fixed": false, "length": 141, "remark": "集合", "clazz": "java.util.ArrayList", "pageSizeName": "counts", "existSubdomain": true, "subdomainType": "PAGE" }
子域配置为F[子域号]$[usage]
,后接子域字段:
F13:
- { "domainNo": 1, "name": "monthNbr", "length": 3, "remark": "月份序号", "clazz": "java.lang.Integer" }
- { "domainNo": 2, "name": "valDate", "length": 8, "remark": "入账日期", "clazz": "java.time.LocalDate", "pattern": "yyyyMMdd" }
- { "domainNo": 3, "name": "purDate", "length": 8, "remark": "记录日期", "clazz": "java.time.LocalDate", "pattern": "yyyyMMdd" }
- { "domainNo": 4, "name": "purTime", "length": 8, "remark": "消费时间", "clazz": "java.time.LocalTime", "pattern": "HHmmssSS" }
- { "domainNo": 5, "name": "tranNo", "length": 6, "remark": "交易流水号", "clazz": "java.lang.Integer" }
- { "domainNo": 6, "name": "tranType", "length": 4, "remark": "交易类型", "clazz": "java.lang.String" }
- { "domainNo": 7, "name": "amount", "length": 12, "remark": "交易金额", "clazz": "java.math.BigDecimal" }
- { "domainNo": 8, "name": "amountFl", "length": 1, "remark": "交易金额符号", "clazz": "java.lang.String" }
- { "domainNo": 9, "name": "authCode", "length": 6, "remark": "授权代码", "clazz": "java.lang.String" }
- { "domainNo": 10, "name": "desline1", "length": 42, "remark": "交易描述1", "clazz": "java.lang.String" }
- { "domainNo": 11, "name": "desline2", "length": 25, "remark": "交易描述2", "clazz": "java.lang.String" }
- { "domainNo": 12, "name": "cardEnd", "length": 4, "remark": "卡号后四位", "clazz": "java.lang.String" }
- { "domainNo": 13, "name": "currNum", "length": 3, "remark": "货币代码", "clazz": "java.lang.String" }
- { "domainNo": 14, "name": "mpFlag", "length": 1, "remark": "保留字段1", "clazz": "java.lang.String" }
- { "domainNo": 15, "name": "purDate1", "length": 4, "remark": "消费日期", "clazz": "java.time.MonthDay", "pattern": "MMdd" }
- { "domainNo": 16, "name": "revInd", "length": 1, "remark": "撤销冲正标志", "clazz": "java.lang.String" }
- { "domainNo": 17, "name": "mcc", "length": 4, "remark": "商户类别", "clazz": "java.lang.String" }
- { "domainNo": 18, "name": "facePayFlag", "length": 1, "remark": "人脸支付标志", "clazz": "java.lang.String" }
父域配置为:
<response>
<field domainNo="11" name="counts" length="2" remark="本次返回交易条数" clazz="java.lang.Integer"/>
<field domainNo="13" name="elements" fixed="false" length="141" remark="集合" clazz="java.util.ArrayList" pageSizeName="counts" existSubdomain="true" subdomainType="PAGE"/>
</response>
子域配置:
<subPayload domain="F13">
<field domainNo="1" name="monthNbr" length="3" remark="月份序号" clazz="java.lang.Integer"/>
<field domainNo="2" name="valDate" length="8" remark="入账日期" clazz="java.time.LocalDate" pattern="yyyyMMdd"/>
<field domainNo="3" name="purDate" length="8" remark="记录日期" clazz="java.time.LocalDate" pattern="yyyyMMdd"/>
<field domainNo="4" name="purTime" length="8" remark="消费时间" clazz="java.time.LocalTime" pattern="HHmmssSS"/>
<field domainNo="5" name="tranNo" length="6" remark="交易流水号" clazz="java.lang.Integer"/>
<field domainNo="6" name="tranType" length="4" remark="交易类型" clazz="java.lang.String"/>
<field domainNo="7" name="amount" length="12" remark="交易金额" clazz="java.math.BigDecimal"/>
<field domainNo="8" name="amountFl" length="1" remark="交易金额符号" clazz="java.lang.String"/>
<field domainNo="9" name="authCode" length="6" remark="授权代码" clazz="java.lang.String"/>
<field domainNo="10" name="desline1" length="42" remark="交易描述1" clazz="java.lang.String"/>
<field domainNo="11" name="desline2" length="25" remark="交易描述2" clazz="java.lang.String"/>
<field domainNo="12" name="cardEnd" length="4" remark="卡号后四位" clazz="java.lang.String"/>
<field domainNo="13" name="currNum" length="3" remark="货币代码" clazz="java.lang.String"/>
<field domainNo="14" name="mpFlag" length="1" remark="保留字段1" clazz="java.lang.String"/>
<field domainNo="15" name="purDate1" length="4" remark="消费日期" clazz="java.time.MonthDay" pattern="MMdd"/>
<field domainNo="16" name="revInd" length="1" remark="撤销冲正标志" clazz="java.lang.String"/>
<field domainNo="17" name="mcc" length="4" remark="商户类别" clazz="java.lang.String"/>
<field domainNo="18" name="facePayFlag" length="1" remark="人脸支付标志" clazz="java.lang.String"/>
</subPayload>
父域配置为:
@FixedFieldMeta(domainNo = 11, length = 2, remark = "本次返回交易条数")
private Integer counts;
@FixedFieldMeta(domainNo = 13, fixed = false, length = 141, remark = "集合", pageSizeName = "counts", existSubdomain = true, subdomainType = PAGE)
private List<Fixed3886Page> elements;
子域配置:
@MessageMeta( type = fixed, group = "0305", code = "3886", kind = subPayload, remark = "账单明细查询")
public class Fixed3886Page {
@FixedFieldMeta(domainNo = 1, length = 3, remark = "月份序号")
private Integer monthNbr;
@FixedFieldMeta(domainNo = 2, length = 8, remark = "入账日期", pattern = "yyyyMMdd")
private LocalDate valDate;
@FixedFieldMeta(domainNo = 3, length = 8, remark = "记录日期", pattern = "yyyyMMdd")
private LocalDate purDate;
@FixedFieldMeta(domainNo = 4, length = 8, remark = "消费时间", pattern = "HHmmssSS")
private LocalTime purTime;
@FixedFieldMeta(domainNo = 5, length = 6, remark = "交易流水号")
private Integer tranNo;
@FixedFieldMeta(domainNo = 6, length = 4, remark = "交易类型")
private String tranType;
@FixedFieldMeta(domainNo = 7, length = 12, remark = "交易金额")
private BigDecimal amount;
@FixedFieldMeta(domainNo = 8, length = 1, remark = "交易金额符号")
private String amountFl;
@FixedFieldMeta(domainNo = 9, length = 6, remark = "授权代码")
private String authCode;
@FixedFieldMeta(domainNo = 10, length = 42, remark = "交易描述1")
private String desline1;
@FixedFieldMeta(domainNo = 11, length = 25, remark = "交易描述2")
private String desline2;
@FixedFieldMeta(domainNo = 12, length = 4, remark = "卡号后四位")
private String cardEnd;
@FixedFieldMeta(domainNo = 13, length = 3, remark = "货币代码")
private String currNum;
@FixedFieldMeta(domainNo = 14, length = 1, remark = "保留字段1")
private String mpFlag;
@FixedFieldMeta(domainNo = 15, length = 4, remark = "消费日期", pattern = "MMdd")
private MonthDay purDate1;
@FixedFieldMeta(domainNo = 16, length = 1, remark = "撤销冲正标志")
private String revInd;
@FixedFieldMeta(domainNo = 17, length = 4, remark = "商户类别")
private String mcc;
@FixedFieldMeta(domainNo = 18, length = 1, remark = "人脸支付标志")
private String facePayFlag;
// getter setter
}
嵌套子域配置为F[域号]_F[子域号]
,以_
连接
银联60子域中,第11域为嵌套子域:
F60:
- { "domainNo": 1, "name": "f60f1", "fixed": true, "length": 4, "remark": "报文原因码", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "f60f2", "fixed": true, "length": 1, "remark": "账户所有人类型", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "f60f3", "fixed": true, "length": 1, "remark": "终端读取能力", "clazz": "java.lang.String" }
- { "domainNo": 4, "name": "f60f4", "fixed": true, "length": 1, "remark": "IC卡条件代码", "clazz": "java.lang.String" }
- { "domainNo": 5, "name": "f60f5", "fixed": true, "length": 1, "remark": "保留使用", "clazz": "java.lang.String" }
- { "domainNo": 6, "name": "f60f6", "fixed": true, "length": 2, "remark": "终端类型", "clazz": "java.lang.String" }
- { "domainNo": 7, "name": "f60f7", "fixed": true, "length": 1, "remark": "受理免验密码标志", "clazz": "java.lang.String" }
- { "domainNo": 8, "name": "f60f8", "fixed": true, "length": 1, "remark": "IC卡验证可靠性标志", "clazz": "java.lang.String" }
- { "domainNo": 9, "name": "f60f9", "fixed": true, "length": 2, "remark": "电子商务标志", "clazz": "java.lang.String" }
- { "domainNo": 10, "name": "f60f10", "fixed": true, "length": 1, "remark": "交互方式标志", "clazz": "java.lang.String" }
- { "domainNo": 11, "name": "f60f11", "fixed": false, "length": -1, "maxLength": 15, "remark": "交易发生附加信息", "existSubdomain": true, "subdomainType": "FIXED" }
F60_F11:
- { "domainNo": 1, "name": "f60f11f1", "fixed": true, "length": 2, "remark": "特殊计费类型", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "f60f11f2", "fixed": true, "length": 1, "remark": "特殊计费档次", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "f60f11f3", "fixed": true, "length": 3, "remark": "保留使用(第3位为MAC算法标识)", "clazz": "java.lang.String" }
- { "domainNo": 4, "name": "f60f11f4", "fixed": true, "length": 1, "remark": "支持部分承兑和返回余额标志", "clazz": "java.lang.String" }
- { "domainNo": 5, "name": "f60f11f5", "fixed": true, "length": 1, "remark": "交易发起方式", "clazz": "java.lang.String" }
- { "domainNo": 6, "name": "f60f11f6", "fixed": true, "length": 1, "remark": "交易介质", "clazz": "java.lang.String" }
- { "domainNo": 7, "name": "f60f11f7", "fixed": true, "length": 1, "remark": "IC 卡的应用类型", "clazz": "java.lang.String" }
- { "domainNo": 8, "name": "f60f11f8", "fixed": true, "length": 2, "remark": "账户结算类型", "clazz": "java.lang.String" }
- { "domainNo": 9, "name": "f60f11f9", "fixed": true, "length": 1, "remark": "卡账户等级", "clazz": "java.lang.String" }
- { "domainNo": 10, "name": "f60f11f10", "fixed": true, "length": 2, "remark": "卡产品", "clazz": "java.lang.String" }
银联59域usage=QR子域中,第3域为分页子域:
F59$QR:
- { "domainNo": 1, "name": "currencyCode", "fixed": true, "length": 3, "remark": "卡账户货币代码", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "counts", "fixed": true, "length": 3, "remark": "所有满足查询条件的记录数", "clazz": "java.lang.Integer" }
- { "domainNo": 3, "name": "elements", "fixed": false, "length": 50, "maxLength": 5000, "remark": "查询结果", "clazz": "java.util.ArrayList", "pageSizeName": "counts", "existSubdomain": true, "subdomainType": "PAGE" }
F59$QR_F3:
- { "domainNo": 1, "name": "number", "fixed": true, "length": 3, "remark": "明细顺序号", "clazz": "java.lang.Integer" }
- { "domainNo": 2, "name": "transDate", "fixed": true, "length": 8, "remark": "交易日期", "clazz": "java.time.LocalDate", "pattern": "yyyyMMdd" }
- { "domainNo": 3, "name": "currencyCode", "fixed": true, "length": 3, "remark": "交易货币代码", "clazz": "java.lang.String" }
- { "domainNo": 4, "name": "transAmt", "fixed": true, "length": 13, "remark": "交易金额", "clazz": "java.lang.String" }
- { "domainNo": 5, "name": "balanceAmt", "fixed": true, "length": 13, "remark": "余额", "clazz": "java.lang.String" }
- { "domainNo": 6, "name": "memoCode", "fixed": true, "length": 10, "remark": "备注代码", "clazz": "java.lang.String" }
银联121子域中,第5域为UV子域:
F121:
- { "domainNo": 1, "name": "f121f1", "fixed": true, "length": 1, "remark": "应答原因码", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "f121f2", "fixed": true, "length": 1, "remark": "单/双或双/单转换码", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "f121f3", "fixed": true, "length": 1, "remark": "卡性质", "clazz": "java.lang.String" }
- { "domainNo": 4, "name": "f121f4", "fixed": true, "length": 40, "remark": "CUPS保留", "clazz": "java.lang.String" }
- { "domainNo": 5, "name": "f121f5", "fixed": true, "length": 38, "remark": "转入和转出方标识代码/手续费信息", "existSubdomain": true, "subdomainType": "UV" }
F121_F5$FD:
- { "domainNo": 1, "name": "f121f5f1", "fixed": true, "length": 36, "remark": "手续费信息", "clazz": "java.lang.String" }
F121_F5$ID:
- { "domainNo": 1, "name": "f121f5f1", "fixed": true, "length": 8, "remark": "转出方标识代码", "clazz": "java.lang.String" }
- { "domainNo": 2, "name": "f121f5f2", "fixed": true, "length": 8, "remark": "转入方标识代码", "clazz": "java.lang.String" }
- { "domainNo": 3, "name": "f121f5f3", "fixed": true, "length": 20, "remark": "其余", "clazz": "java.lang.String" }
银联60子域中,第11域为嵌套子域:
<subPayload domain="F60">
<field domainNo="1" name="f60f1" fixed="true" length="4" remark="报文原因码" clazz="java.lang.String"/>
<field domainNo="2" name="f60f2" fixed="true" length="1" remark="账户所有人类型" clazz="java.lang.String"/>
<field domainNo="3" name="f60f3" fixed="true" length="1" remark="终端读取能力" clazz="java.lang.String"/>
<field domainNo="4" name="f60f4" fixed="true" length="1" remark="IC卡条件代码" clazz="java.lang.String"/>
<field domainNo="5" name="f60f5" fixed="true" length="1" remark="保留使用" clazz="java.lang.String"/>
<field domainNo="6" name="f60f6" fixed="true" length="2" remark="终端类型" clazz="java.lang.String"/>
<field domainNo="7" name="f60f7" fixed="true" length="1" remark="受理免验密码标志" clazz="java.lang.String"/>
<field domainNo="8" name="f60f8" fixed="true" length="1" remark="IC卡验证可靠性标志" clazz="java.lang.String"/>
<field domainNo="9" name="f60f9" fixed="true" length="2" remark="电子商务标志" clazz="java.lang.String"/>
<field domainNo="10" name="f60f10" fixed="true" length="1" remark="交互方式标志" clazz="java.lang.String"/>
<field domainNo="11" name="f60f11" fixed="false" length="-1" maxLength="15" remark="交易发生附加信息" existSubdomain="true" subdomainType="FIXED"/>
</subPayload>
<subPayload domain="F60_F11">
<field domainNo="1" name="f60f11f1" fixed="true" length="2" remark="特殊计费类型" clazz="java.lang.String"/>
<field domainNo="2" name="f60f11f2" fixed="true" length="1" remark="特殊计费档次" clazz="java.lang.String"/>
<field domainNo="3" name="f60f11f3" fixed="true" length="3" remark="保留使用(第3位为MAC算法标识)" clazz="java.lang.String"/>
<field domainNo="4" name="f60f11f4" fixed="true" length="1" remark="支持部分承兑和返回余额标志" clazz="java.lang.String"/>
<field domainNo="5" name="f60f11f5" fixed="true" length="1" remark="交易发起方式" clazz="java.lang.String"/>
<field domainNo="6" name="f60f11f6" fixed="true" length="1" remark="交易介质" clazz="java.lang.String"/>
<field domainNo="7" name="f60f11f7" fixed="true" length="1" remark="IC 卡的应用类型" clazz="java.lang.String"/>
<field domainNo="8" name="f60f11f8" fixed="true" length="2" remark="账户结算类型" clazz="java.lang.String"/>
<field domainNo="9" name="f60f11f9" fixed="true" length="1" remark="卡账户等级" clazz="java.lang.String"/>
<field domainNo="10" name="f60f11f10" fixed="true" length="2" remark="卡产品" clazz="java.lang.String"/>
</subPayload>
银联59域usage=QR子域中,第3域为分页子域:
<subPayload domain="F59" usage="QR">
<field domainNo="1" name="currencyCode" fixed="true" length="3" remark="卡账户货币代码" clazz="java.lang.String"/>
<field domainNo="2" name="counts" fixed="true" length="3" remark="所有满足查询条件的记录数" clazz="java.lang.Integer"/>
<field domainNo="3" name="elements" fixed="false" length="50" maxLength="5000" remark="查询结果" clazz="java.util.ArrayList" pageSizeName="counts" existSubdomain="true" subdomainType="PAGE"/>
</subPayload>
<subPayload domain="F59$QR_F3">
<field domainNo="1" name="number" fixed="true" length="3" remark="明细顺序号" clazz="java.lang.Integer"/>
<field domainNo="2" name="transDate" fixed="true" length="8" remark="交易日期" clazz="java.time.LocalDate" pattern="yyyyMMdd"/>
<field domainNo="3" name="currencyCode" fixed="true" length="3" remark="交易货币代码" clazz="java.lang.String"/>
<field domainNo="4" name="transAmt" fixed="true" length="13" remark="交易金额" clazz="java.lang.String"/>
<field domainNo="5" name="balanceAmt" fixed="true" length="13" remark="余额" clazz="java.lang.String"/>
<field domainNo="6" name="memoCode" fixed="true" length="10" remark="备注代码" clazz="java.lang.String"/>
</subPayload>
银联121子域中,第5域为UV子域:
<subPayload domain="F121">
<field domainNo="1" name="f121f1" fixed="true" length="1" remark="应答原因码" clazz="java.lang.String"/>
<field domainNo="2" name="f121f2" fixed="true" length="1" remark="单/双或双/单转换码" clazz="java.lang.String"/>
<field domainNo="3" name="f121f3" fixed="true" length="1" remark="卡性质" clazz="java.lang.String"/>
<field domainNo="4" name="f121f4" fixed="true" length="40" remark="CUPS保留" clazz="java.lang.String"/>
<field domainNo="5" name="f121f5" fixed="true" length="38" remark="转入和转出方标识代码/手续费信息" existSubdomain="true" subdomainType="UV"/>
</subPayload>
<subPayload domain="F121_F5" usage="FD">
<field domainNo="1" name="f121f5f1" fixed="true" length="36" remark="手续费信息" clazz="java.lang.String"/>
</subPayload>
<subPayload domain="F121_F5" usage="ID">
<field domainNo="1" name="f121f5f1" fixed="true" length="8" remark="转出方标识代码" clazz="java.lang.String"/>
<field domainNo="2" name="f121f5f2" fixed="true" length="8" remark="转入方标识代码" clazz="java.lang.String"/>
<field domainNo="3" name="f121f5f3" fixed="true" length="20" remark="其余" clazz="java.lang.String"/>
</subPayload>
银联60子域中,第11域为嵌套子域:
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F60", remark = "银联8583 60域")
public class Field60 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 4, remark = "报文原因码")
private String f60f1;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 1, remark = "账户所有人类型")
private String f60f2;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 1, remark = "终端读取能力")
private String f60f3;
@IsoFieldMeta(domainNo = 4, fixed = true, length = 1, remark = "IC卡条件代码")
private String f60f4;
@IsoFieldMeta(domainNo = 5, fixed = true, length = 1, remark = "保留使用")
private String f60f5;
@IsoFieldMeta(domainNo = 6, fixed = true, length = 2, remark = "终端类型")
private String f60f6;
@IsoFieldMeta(domainNo = 7, fixed = true, length = 1, remark = "受理免验密码标志")
private String f60f7;
@IsoFieldMeta(domainNo = 8, fixed = true, length = 1, remark = "IC卡验证可靠性标志")
private String f60f8;
@IsoFieldMeta(domainNo = 9, fixed = true, length = 2, remark = "电子商务标志")
private String f60f9;
@IsoFieldMeta(domainNo = 10, fixed = true, length = 1, remark = "交互方式标志")
private String f60f10;
@IsoFieldMeta(domainNo = 11, fixed = true, length = -1, maxLength = 15, remark = "交易发生附加信息", existSubdomain = true, subdomainType = FIXED)
private Field60_F11 f60f11;
// getter setter
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F60_F11", remark = "银联8583 60.11域")
public class Field60_F11 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 2, remark = "特殊计费类型")
private String f60f11f1;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 1, remark = "特殊计费档次")
private String f60f11f2;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 3, remark = "保留使用(第3位为MAC算法标识)")
private String f60f11f3;
@IsoFieldMeta(domainNo = 4, fixed = true, length = 1, remark = "支持部分承兑和返回余额标志")
private String f60f11f4;
@IsoFieldMeta(domainNo = 5, fixed = true, length = 1, remark = "交易发起方式")
private String f60f11f5;
@IsoFieldMeta(domainNo = 6, fixed = true, length = 1, remark = "交易介质")
private String f60f11f6;
@IsoFieldMeta(domainNo = 7, fixed = true, length = 1, remark = "IC 卡的应用类型")
private String f60f11f7;
@IsoFieldMeta(domainNo = 8, fixed = true, length = 2, remark = "账户结算类型")
private String f60f11f8;
@IsoFieldMeta(domainNo = 9, fixed = true, length = 1, remark = "卡账户等级")
private String f60f11f9;
@IsoFieldMeta(domainNo = 10, fixed = true, length = 2, remark = "卡产品")
private String f60f11f10;
// getter setter
}
银联59域usage=QR子域中,第3域为分页子域:
public interface Field59 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F59", usage = "QR", remark = "银联8583 59域usage=QR")
public class Field59$QR implements Field59 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 3, remark = "卡账户货币代码")
private String currencyCode;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 3, remark = "所有满足查询条件的记录数")
private Integer counts;
@IsoFieldMeta(domainNo = 3, fixed = false, length = 50, maxLength = 5000, remark = "查询结果", pageSizeName = "counts", existSubdomain = true, subdomainType = PAGE)
private List<F59QRPage> elements;
// getter setter
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F59@QR_F3", remark = "银联8583 59域usage=QR page")
public class Field59$QR_F3 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 3, remark = "明细顺序号")
private Integer number;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 8, remark = "交易日期", pattern = "yyyyMMdd")
private LocalDate transDate;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 3, remark = "交易货币代码")
private String currencyCode;
@IsoFieldMeta(domainNo = 4, fixed = true, length = 13, remark = "交易金额")
private String transAmt;
@IsoFieldMeta(domainNo = 5, fixed = true, length = 13, remark = "余额")
private String balanceAmt;
@IsoFieldMeta(domainNo = 6, fixed = true, length = 10, remark = "备注代码")
private String memoCode;
// getter setter
}
银联121子域中,第6域为UV子域:
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F121", remark = "银联8583 121域")
public class Field121 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 1, remark = "应答原因码")
private String f121f1;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 1, remark = "单/双或双/单转换码")
private String f121f2;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 1, remark = "卡性质")
private String f121f3;
@IsoFieldMeta(domainNo = 4, fixed = true, length = 40, remark = "CUPS保留")
private String f121f4;
@IsoFieldMeta(domainNo = 5, fixed = true, length = 38, remark = "转入和转出方标识代码/手续费信息", existSubdomain = true, subdomainType = UV)
private UsageSubdomain<Field121_F5> f121f5;
// getter setter
}
public interface Field121_F5 {
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F121_F5", usage = "FD", remark = "银联8583 121.5域usage=FD")
public class Field121_F5$FD implements Field121_F5 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 36, remark = "手续费信息")
private String f121f5f1;
// getter setter
}
@MessageMeta(type = iso, group = "cups", code = "common", kind = subPayload, domain = "F121_F5", usage = "ID", remark = "银联8583 121.5域usage=ID")
public class Field121_F5$ID implements Field121_F5 {
@IsoFieldMeta(domainNo = 1, fixed = true, length = 8, remark = "转出方标识代码")
private String f121f5f1;
@IsoFieldMeta(domainNo = 2, fixed = true, length = 8, remark = "转入方标识代码")
private String f121f5f2;
@IsoFieldMeta(domainNo = 3, fixed = true, length = 20, remark = "其余")
private String f121f5f3;
// getter setter
}