跳到主要内容

同一终端内应用集成

1. 简介

商家的 POS 应用程序运行在同一个支付终端上时,可以通过 CodePay Register 的支付集成API 拉起结账组件来完成付款。

同一终端内应用集成结构图

1.1 典型处理流程

同一终端内应用集成交易流程图
  1. POS 应用程序向 CodePay Register 发送订单信息(包括订单号、金额),以拉取支付结账组件。
  2. CodePay Register 的结账组件收集银行卡信息/移动钱包用户支付凭证并安全地进行处理,然后将其与交易数据中的订单信息合并,并向 CodePay Gateway 发送支付请求。
  3. CodePay Gateway 处理交易数据包并发送到Processor的支付平台或收单系统。
  4. Processor的支付平台或收单系统向 CodePay Gateway 响应结果。
  5. CodePay Gateway 向 CodePay Register 应用程序响应交易结果。
  6. CodePay Register 应用程序向 POS 应用程序返回交易结果。

1.2 集成方式

POS 应用程序使用 Android Intent 方式与 CodePay Register 应用程序进行交互。以下图表显示了这两个应用程序之间的交互。

同一终端内应用集成集成方式
  1. 第三方POS应用程序调用 "startActivityForResult" 函数来调用 CodePay Register应用程序。
  2. CodePay Register应用程序解析来自 POS 应用程序的捆绑数据,然后处理交易。
  3. 然后,CodePay Register应用程序在交易完成后调用 "setResult" 函数并 "finish" 自己的 Activity。
  4. POS 应用程序通过 "onActivityResult" 事件接收交易结果。

2. 交易API

本文根据以下约定每个参数字段的必要性。

  • M:必要参数
  • C:在满足某些条件时,是必要参数
  • O:可选参数
  • -:不存在

2.1 消费(Sale)

销售交易指持卡人从商户处购买商品或服务时进行的支付操作。交易金额从持卡人账户中扣除,转入到商户账户。

2.1.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值 "1.1"
transTypeStringMM消费交易的类型代码,固定值 01
appIdString18M-在 Codepay 网关中注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentScenarioStringMM支付场景
1 - 刷卡支付
2 - 现金支付
3 - 二维码支付,商家出示二维码,顾客扫描
4 - 二维码支付,顾客出示二维码,商家扫描
paymentMethodStringCM支付方式。仅当“paymentScenario”设置为“3”或“4”时,该字段才是必填项.
请参考 支付方式
cardTypeStringC-当“paymentScenario”字段设置为“1”时,该字段是必填项。
1 - DEBIT_CARD
2 - CREDIT_CARD
3 - EBT_CARD
4 - GIFT_CARD
amtString12MM订单金额
tipString12OO小费金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-C授权码。该字段在信用卡交易时返回值。
refNoString12-C检索参考号码。该字段在信用卡交易时返回值。
cardNoString19-C卡号,已根据 PCI 规范进行掩码处理。
示例:430277****5723. 该字段在卡付交易时返回值。
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID。
noteString128O-订单备注信息
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称
onScreenTipBoolean10-true: 弹出小费选择界面. false: 不需要小费界面.
onScreenSignatureBoolean10-true: 弹出电子签名. false: 不需要电子签名.

2.1.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "01"); // Sale transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("businessOrderNo","202202222222");
jsonObject.put("paymentScenario","1"); //Card payment
jsonObject.put("cardType", "1") //Debit
jsonObject.put("amt","2.15");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.2 撤销(Void)

撤销交易通常是指在交易完成后的短时间内,商家因某种原因(例如商家错误、顾客改变主意等)需要取消交易。

  • 撤销通常必须在交易当日且在批结算之前进行。
  • 成功撤销后,原交易金额将退还给持卡人的账户,就像交易从未发生过一样。
  • 撤销通常需要原始交易凭证或相关信息才能进行操作。

2.2.1 Message

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM撤销交易的类型代码,固定值 02
appIdString18M-在 Codepay 网关注册的支付应用程序 ID, 请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData field

参数名 类型 长度 请求 响应 说明
originBusinessOrderNoStringMM原始消费交易的订单号
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentMethodString-M请参考 支付方式
amtString12-M订单金额
tipString12-O小费金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-MA授权码,该字段在信用卡交易时返回值
refNoString12-M检索参考号码,该字段在信用卡交易时返回值
cardNoString19-M卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称

2.2.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "02"); // Void transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("originBusinessOrderNo","202202222222");
jsonObject.put("businessOrderNo","202202222233");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.3 退款(Refund)

退款交易是指持卡人因某种原因(例如物品有问题、对服务不满意等)需要退回物品或取消服务,在交易清算后要求将支付的金额退回到信用卡账户的过程。

  • 退款可能发生在交易当天,也可能在几天或更久之后。
  • 退款通常需要持卡人提供购买凭证和退款原因,商家审核后退款将适当金额退回到持卡人的信用卡账户。

2.3.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM退款交易的类型代码,固定值 03
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
originBusinessOrderNoStringCC原始消费交易或授权完成交易的订单号
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentScenarioStringMM支付场景
1 - 刷卡支付
2 - 现金支付
3 - 二维码支付,商家出示二维码,顾客扫描
4 - 二维码支付,顾客出示二维码,商家扫描
paymentMethodString-M请参考 支付方式
cardTypeStringC-当“paymentScenario”字段设置为“1”时,该字段是必填项。
1 - DEBIT_CARD
2 - CREDIT_CARD
3 - EBT_CARD
4 - GIFT_CARD
amtString12MM退款订单金额
tipString12OO小费金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-C授权码,该字段在信用卡交易时返回值
refNoString12-C检索参考号码,该字段在信用卡交易时返回值
cardNoString19-C卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称

2.3.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "03"); // Refund transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("originBusinessOrderNo","202202222222");
jsonObject.put("businessOrderNo","202202222233");
jsonObject.put("paymentScenario","1");//Card payment
jsonObject.put("amt","1.2");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.4 授权(Authorization)

授权交易是一种卡片交易授权类型,商家可以通过该授权确保交易金额在客户账户中冻结或保留,直到交易完成。 在授权阶段,商家向客户的银行请求特定金额的授权,如果客户的账户中有足够的可用余额或信用额度,则会暂时冻结该金额。这意味着该金额尚未实际扣除,但客户在此期间不能将资金用于其他购买。 授权通常用于最终交易金额不确定的情况,例如住宿服务、租赁服务、无人值守自助服务等。

2.4.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM授权交易的类型代码,固定值 04
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentMethodString-M请参考 支付方式
cardTypeStringM-1 -- DEBIT_CARD
2 -- CREDIT_CARD
3 -- EBT_CARD
4 -- GIFT_CARD
amtString12MM订单金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-M授权码,该字段在信用卡交易时返回值
refNoString12-M检索参考号码,该字段在信用卡交易时返回值
cardNoString19-M卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称
onScreenSignatureBoolean10-true: 弹出电子签名. false: 不需要电子签名.

2.4.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "04"); // Authorization transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("businessOrderNo","202202222222");
jsonObject.put("cardType","1");//DEBIT_CARD
jsonObject.put("amt","1.2");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.5 完成(Completion)

完成交易是指在授权后,当服务或商品的实际消费完成并最终确定金额时,请求商家正式从客户的账户中扣除先前授权的金额的过程。这一步是对授权的后续行动,确保商家收到付款。 例如,当顾客在住宿结束时结账离开酒店时,酒店将比较先前授权的金额与实际花费的金额;如果实际花费的金额较高,酒店将请求额外授权以弥补差额;如果实际花费的金额较低,则只会扣除实际花费的金额,授权金额的余额将退回到客户的账户中。

2.5.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM授权完成交易的类型代码,固定值 06
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
originBusinessOrderNoString12M-原始授权交易的订单号
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentMethodString-M请参考 支付方式
amtString12MM授权确认金额。最终支付金额以及授权期间的任何多余金额将退还至客户账户
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员工号
authCodeString6-M授权码,该字段在信用卡交易时返回值
refNoString12-M检索参考号码,该字段在信用卡交易时返回值
cardNoString19-M卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723.
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡d
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称

2.5.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "06"); // Authorization Completion transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("originBusinessOrderNo","202202222233");
jsonObject.put("businessOrderNo","202202222222");
jsonObject.put("amt","1.2");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.6 返现(Sale with Cashback)

“消费返现”通常用于银行卡交易,指的是客户在使用借记卡支付购买商品或服务的费用时,除了商品或服务的成本外,还可以从银行账户中请求额外的现金。这项服务通常可以在零售店或超市的收银台找到,客户可以在结账时选择此选项,从而避免去银行或自动取款机提取现金的麻烦。

例如,如果你在杂货店花费 50 美元并想要 20 美元现金,你可以请求进行 70 美元的交易,其中 50 美元支付给超市,剩下的 20 美元以现金形式退还给你。此交易可能会在你的银行账户记录中显示为“消费返现”,总额为 70 美元。

2.6.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM消费返现交易的类型代码,固定值 11
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentMethodString-M请参考 支付方式
cardTypeStringM-卡类型。1 -- DEBIT_CARD
2 -- CREDIT_CARD
3 -- EBT_CARD
4 -- GIFT_CARD
amtString12MM订单金额
cashAmountString12MM返现金额
tipString12OO小费金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-M授权码,该字段在信用卡交易时返回值
refNoString12-M检索参考号码,该字段在信用卡交易时返回值
cardNoString19-M卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称
onScreenTipBoolean10-true: 弹出小费选择界面. false: 不需要小费界面.
onScreenSignatureBoolean10-true: 弹出电子签名. false: 不需要电子签名.

2.6.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "11"); // Cashback transaction
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("businessOrderNo","202202222222");
jsonObject.put("cardType","1");//Debit
jsonObject.put("amt","10.2");
jsonObject.put("cashAmount","1.2");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.7 查询(Query)

查询指定交易的详情

2.7.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM查询交易的类型代码,固定值 21
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
businessOrderNoStringMM商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的
paymentScenarioString-M1 - 刷卡支付
2 - 现金支付
3 - 二维码支付,商家出示二维码,顾客扫描
4 - 二维码支付,顾客出示二维码,商家扫描
paymentMethodString-M支付方式。 仅当“paymentScenario”设置为“3”或“4”时,该字段才是必填项,
请参考 支付方式
amtString12-M订单金额
cashAmountString12-O返现金额
tipString12-O小费金额
transDateString8-M交易日期,格式:YYYYMMDD
transTimeString6-M交易时间,格式:HHMMSS
operatorString4-O操作员的工号
authCodeString6-C授权码。该字段在信用卡交易时返回值
transTypeString2-M查询结果的交易类型
refNoString12-C检索参考号码。该字段在信用卡交易时返回值
cardNoString19-C卡号,已根据 PCI 规范进行掩码处理。 示例:430277****5723. 该字段在卡付交易时返回值
entryModeString2-O该字段在信用卡交易时返回值:
1 - 刷卡磁条卡
2 - 接触式芯片卡
3 - 非接触式芯片卡
4 - 手动输入
transactionIDString32-MCodePay 网关的交易 ID
merchantIdString32-C银行卡交易的商户号
payChannelMerchantIDString32-C支付通道商户号
payChannelTerminalIDString32-C支付通道终端号
merchantNameString128-C商户名称

2.7.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "21");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("businessOrderNo","202202222222");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

2.8 重打印(Reprint)

重打印指定交易的收据。收据上会标记为“重打印”。

2.8.1 报文参数

参数名 类型 长度 请求 响应 说明
versionStringMMAPI 版本,固定值“1.1”
transTypeStringMM重打印交易的类型代码,固定值 22
appIdString18M-在 Codepay 网关注册的支付应用程序 ID,请参阅 支付网关集成指南
transDataJSONMC
resultString-M请参阅附录 - 交易结果代码
resultMsgString-C结果消息

transData 字段

参数名 类型 长度 请求 响应 说明
businessOrderNoStringM-商家的POS应用程序或业务系统的订单号码,必须在其系统中是唯一的

2.8.2 示例代码

Intent intent = new Intent();
intent.setAction("com.codepay.transaction.call");
intent.putExtra("version", "1.0");
intent.putExtra("appId", "{YOUR_APP_ID}");
intent.putExtra("transType", "22");
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("businessOrderNo","202202222222");
intent.putExtra("transData", jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
startActivityForResult(intent, 1);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
String resultMsg = data.getStringExtra("resultMsg");
String transData = data.getStringExtra("transData");
if (result.equals("00")){
try {
JSONObject jsonObject = new JSONObject(transData);
String amount = jsonObject.getString("amt");
}catch(JSONException e){
e.printStackTrace();
}
}
}

3. 附录

3.1 交易结果码

类别 结果码 说明
成功00交易已批准
终端交易内核异常A003卡片中没有 EMV 应用程序
A008交易已被拒绝
A020IC 命令失败
A036二次GAC 失败
A040初始化SDK失败
卡片识别异常C000读卡异常
C001刷卡失败
C004读卡失败
C006卡片冲突
C008IC 卡不允许先刷卡
C009读卡超时
C011找不到跟踪键
C014磁条卡模式不支持非接触式交易
密码键盘异常G000PinPad 异常
G003输入取消
G004输入超时
G005输入失败
包处理异常H010Mac 错误
H011签名验证失败
网络异常J000网络异常
J002网络连接超时
J003网络连接失败
J004发送数据失败
J005读取数据失败
J006读取数据超时
交易异常K018必须使用与原始交易的卡
K019无待结算数据
K026操作员手动取消
K027交易超时
K029电池电量低!
三方APP调用过程异常M002参数错误
M003无效金额
M007此功能暂不支持
M008调用版本不正确
M009无效的应用程序调用
M010找不到原始交易
M011无法作废原始交易
M013无法退款原始交易
M014无法完成原始交易
服务端异常N002网关服务请求异常
N003收单服务请求异常
用户端异常P001账户或密码错误,请重试
P002账户已锁定,无法登录
初始化过程异常Q001系统时间错误,请连接网络获取自动时间!
Q002AID 未配置
Q003支付功能未配置。请联系技术支持。
其它异常Z000出现异常。请联系技术支持。