收单应用调用
开发者开发应用程序,并上架于星POS的应用商城时需要接通支付通道,这时通过本接口实现。
主要是通过传入不同的参数调用到对应的支付界面。
交易类
域内容 |
数据类型 |
键(KEY) |
请求值(VALUE) |
返回值(VALUE) |
备注 |
报文类型 |
String |
msg_tp |
0200 |
0210 |
固定值,只区分请求和应答. |
支付方式 |
String |
pay_tp |
“”-不限 0-银行卡 1-扫码 11-微信支付 12-支付宝支付 |
0-银行卡 1-微信 2-支付宝 |
用于第三方调用时指定支付渠道;可为空;不为空时要与交易处理码(proc_cd)保持一致,例如:660000与1是一致的。(是否生效以交易商终开通的收款产品为准)* |
交易类型 |
String |
proc_tp |
00-消费类 |
|
考虑到各行业的不同需求,预留了交易类型域.一般都只填00 |
交易处理码 |
String |
proc_cd |
详见交易处理码 |
|
必填项 非消费/扫码支付交易处理码,以该字段传入值为准调用交易;反之,则以传入的支付方式字段为准调用交易; |
凭证号 |
String |
systraceno |
非必填 |
|
消费撤销时,传入做撤销 |
交易金额 |
String |
amt |
消费、预授权、扫码支付时必填示例:100.01 |
|
用法一:消费、预授权、扫码支付传入交易金额用法二:扫码退货如该字段传入值为空,则默认全额退款。 |
订单号 |
String |
order_no |
非必填 第三方传入的订单号,订单号的格式必须是由英文和数字组成的字符串(不要使用特殊字符),可全英文或全数字也可英文、数字混合使用。 |
与传过来的一致 |
用法一:消费、扫码支付时作为订单号传入做交易用法二:扫码撤销时与批次流水号任选其一传入做撤销(两者都不传入或无之前使用该订单号的本地交易数据,则调起收单扫码撤销页面) |
批次流水号 |
String |
batchbillno |
非必填第三方传入的批次号+流水号(凭证号) |
与传过来的一致 |
扫码撤销时与批次流水号任选其一传入做撤销(两者都不传入则调起收单扫码撤销页面) |
应用包名 |
String |
appid |
|
|
调用者应用包名 |
交易时间戳 |
String |
time_stamp |
|
交易成功返回交易时间 |
YYYYMMDDhhmmss |
打印信息 |
String |
print_info |
非必填 |
|
行业应用需要打印的备注信息(100汉字以内) |
失败原因 |
String |
reason |
|
|
仅在调用返回失败时存在 |
交易详情 |
String |
txndetail |
|
交易详情 |
json字符串(结构参照附录B) |
银行卡类型 |
String |
cardtype |
|
00:借记卡 01:贷记卡 02:准贷记卡 03:预付卡 04:其他 |
该字段仅在返回数据中,请求数据不需要 |
原交易凭证号 |
String |
sysoldtraceno |
|
|
该字段仅在返回数据中,请求数据不需要 |
原交易参考号 |
String |
sysoldreferno |
|
|
该字段仅在返回数据中,请求数据不需要 |
原交易日期 |
String |
sysolddate |
|
|
该字段仅在返回数据中,请求数据不需要 |
操作员 |
String |
oprId |
|
|
该字段仅在返回数据中,请求数据不需要 |
查询类
域内容 |
数据类型 |
键(KEY) |
请求值(VALUE) |
返回值(VALUE) |
备注 |
报文类型 |
String |
msg_tp |
0300 |
0310 |
固定值,只区分请求和应答. |
支付方式 |
String |
pay_tp |
0-银行卡 1-扫码 2-商户信息 |
|
|
订单号 |
String |
order_no |
第三方传入的订单号 |
与传过来的一致 |
若不传入第三方订单号,需传入支付方式则跳转到收单交易查询页面 |
应用包名 |
String |
appid |
|
|
调用者应用包名 |
失败原因 |
String |
reason |
|
|
仅在调用返回失败时存在 |
交易详情 |
String |
txndetail |
|
交易详情 |
json字符串(结构参照附录B) |
调用样例
调用者启用收单支付应用支付功能组件
try {
ComponentName component = new ComponentName("com.newland.caishen", "com.newland.caishen.ui.activity.MainActivity");
Intent intent = new Intent();
intent.setComponent(component);
Bundle bundle = new Bundle();
bundle.putString("msg_tp", "0200");
bundle.putString("pay_tp", "0");
bundle.putString("proc_tp", "00");
bundle.putString("proc_cd", "000000");
bundle.putString("amt", "100.01");
bundle.putString("order_no", "xxxxxxxxxxx");
bundle.putString("appid", "com.nld.trafficmanage");
bundle.putString("time_stamp", "20150930035201");
bundle.putString("print_info", "订单商品明细单价等xxxxxx");
intent.putExtras(bundle);
this.startActivityForResult(intent, 1);
} catch(ActivityNotFoundException e) {
//TODO:
} catch(Exception e) {
//TODO:
}
调用者处理支付功能组件返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Bundle bundle = data.getExtras();
if (requestCode == 1&&bundle != null) {
switch (resultCode) {
// 支付成功
case Activity.RESULT_OK:
String msgTp = bundle.getString("msg_tp");
if (TextUtils.equals(msgTp, "0210")) {
// TODO:
}
break;
// 支付取消
case Activity.RESULT_CANCELED:
String reason = bundle.getString("reason");
if (reason != null) {
// TODO:
}
break;
default:
// TODO:
break;
}
}
}
附录
交易详情JSON结构
字段 |
字段类型 |
字段名称 |
备注 |
mername |
String |
商户名称 |
交易类和查询类交易返回 |
merid |
String |
商户号 |
交易类和查询类交易返回 |
termid |
String |
终端号 |
交易类和查询类交易返回 |
acqno |
String |
收单行 |
|
iisno |
String |
发卡行 |
|
expdate |
String |
有效期 |
|
batchno |
String |
批次号 |
|
systraceno |
String |
凭证号 |
|
authcode |
String |
授权号 |
|
orderid_scan |
String |
订单号 |
|
translocaltime |
String |
交易时间 |
|
translocaldate |
String |
交易日期 |
|
transamount |
String |
交易金额 |
|
priaccount |
String |
卡号 |
|
refernumber |
String |
系统参考号 |
|
pay_tp |
String |
交易类型 |
查询类交易返回 |
交易处理码
处理码 |
含义 |
000000 |
消费 |
200000 |
消费撤销(仅限当日) |
300000 |
预授权 |
330000 |
预授权完成 |
400000 |
预授权撤销 |
440000 |
预授权完成撤销 |
500000 |
联机退货 |
660000 |
扫码支付 |
680000 |
扫码撤销 |
700000 |
扫码补单 |
900000 |
结算 |