易生MIS-POS技术方案
商户收银系统POS机交易
接口方案
Mispos主要是为了解决商户收银管理系统对刷卡消费的信息的自动采集需求而设计的一种pos机。商户收银系统发起刷卡消费,然后由pos机进行刷卡消费的实现,最后刷卡消费的结果返回给商户的收银系统。
接口RS232
开始交易前必须先到这个页面
1 接口总体描述
刷卡消费的业务处理如下图1-1:
当顾客要付款时,若使用银行卡或行业卡进行付款,则由收银系统发送交易命令给接口处理模块(mis-client),包括金额等主要信息;然后,由mis-client进行处理后,发送交易报文给mis-pos,最后由mis-pos通过电话线或者无线网络与支付中心完成交易处理(或者,由mis-client作为mis-pos与支付中心的传输渠道完成交易处理);mis-pos把结果返回给mis-client,然后由mis-client把结果在返回给收银系统;完成这个交易流程。
1.1 系统环境要求
- 收银系统所用设备需要有空余串口(目前,也支持USB口)供mis-pos与收银系统设备进行连接;
- 收银系统所用设备的操作系统目前支持windos系统或dos系统
- 刷卡交易需要网络线路与支付中心进行连接;目前,商户可以提供电话线路供pos机使用;也可以使用pos机自带无线通讯网络(移动手机网络)设备;也可以使用收银系统pc机所带互联网专网进行交易传输。
交易时:POS页面需要 显示 COMPOS 的页面上
DEMO示例:
JAVA:https://gitee.com/easypay_debug_support/mis-pos
C:
1.2 Mis-client说明
Mis-client是一个DLL(SO)动态库,主要集成了pos机上的各种交易处理;是收银系统和mis-pos之间的处理模块,使收银系统涉及到的刷卡交易标准化、简单化。
生产地址:58.246.226.173 端口:40004
测试地址:180.168.215.67 端口:10004
2 接口详细说明
Mis-client提供一整套的API接口函数,用来实现收银系统所需要的各种交易调用。
2.1 统一参数说明
2.1.1 函数返回值
返回值 | 说明 | 备注 |
---|---|---|
0 | 执行成功 | |
-1 | 连接失败 | |
-2 | MIS-client与POS通讯超时 | |
-3 | POS与银行前置通讯超时 | |
-4 | 其它错误 |
2.1.2 多应用版本参数
为实现终端多应用、多渠道控制,在API中增加了多应用版本控制参数(app_name);来控制终端应用使用。在每个API函数中增加参数。
参数值 | 说明 | 备注 |
---|---|---|
MISAPP1 | 国内标准金融卡应用 | |
MISAPP2 | 其他应用渠道 | 海南为旅游一卡通交易 |
MISAPP3 | ||
... |
2.1.3 响应数据参数
2.1.3.1 响应数据参数格式
大部分API接口函数中都带有响应数据参数(rps_data);该参数是一个数据集合体,它是由收银系统所需要的交商户信息、卡信息、交易流水、交易时间等等信息组成的一个数据块。在本节定义该数据块的具体格式。
LEN (4 bytes) | RETCODE(2bytes) | DATA(n bytes) |
---|
- LEN: 响应数据参数的总长度(DATA字段长度);是4位的字符型数字。
- RETCODE:两个字节长度的交易应答码;是指成功执行后的金融交易是否成功; 00 代表成功,其它值则是交易失败。
- DATA:交易中的主要信息组成的数据块;以下会详细说明。
2.1.3.2 RETCODE参数说明
交易码 | 中文解释说明 | 交易码 | 中文解释说明 | 交易码 | 中文解释说明 | 交易码 | 中文解释说明 |
---|---|---|---|---|---|---|---|
00 | 交易成功 | 31 | 交易此卡不能受理 | 63 | 请联系发卡方 | 97 | 终端未登记 |
01 | 查询发卡方 | 33 | 过期卡 | 64 | 原始金额不正确 | 98 | 交易超时,重试 |
02 | CALLBANK 查询 | 34 | 没收卡 | 65 | 交易次数超限 | 99 | PIN 格式错 |
03 | 商户未登记 | 35 | 没收卡 | 66 | 请联系银联 | A0 | MAC 校验错 |
04 | 没收卡 | 36 | 没收卡 | 67 | 没收卡 | X0 | 交易取消 |
05 | 不承兑 | 37 | 没收卡 | 68 | 交易超时 | X1 | 交易失败 |
06 | 联系发卡行 | 38 | 密码输错次超限 | 75 | 密码错误超次数 | X2 | 无记录 |
07 | 没收卡 | 39 | 交易失败,重试 | 77 | 请重新签到 | X3 | 无交易 |
09 | 交易失败,重试 | 40 | 功能尚不支持 | 78 | 脱机对账不平 | X4 | 打包错误 |
10 | 承兑部分金额 | 41 | 遗失卡,请没收 | 79 | 帐务处理超时 | X5 | 联接失败 |
12 | 无效交易 | 42 | 无此账户 | 80 | MAC 不正确 | X6 | 数据发送失败 |
13 | 无效金额 | 43 | 没收卡 | 81 | 网间 MAC 不正确 | X7 | 数据接收失败 |
14 | 无此卡号 | 44 | 无此投资账户 | 83 | 无效终端 | X8 | 数据接收有误 |
15 | 此卡不能受理 | 45 | 请使用芯片卡 | 84 | 限本地卡 | X9 | 冲正失败 |
19 | 稍侯重做交易 | 51 | 余额不足 | 85 | 限异地信用卡 | XA | 不支持该交易 |
20 | 无效应答 | 52 | 请联系发卡行 | 86 | 单笔核对有误 | XB | 无原始交易 |
21 | 交易失败 | 53 | 无此帐户 | 88 | 网络联结失败 | XC | 不能重复处理 |
22 | 操作有误,重试 | 54 | 过期卡 | 89 | 操作员密码错 | XD | 交易不符 |
23 | 不接受的交易费 | 55 | 密码错 | 90 | 系统暂停 | XE | 读卡错误 |
25 | 记录不存在 | 56 | 无卡记录 | 91 | 交换站未操作 | XF | 金额不符 |
26 | 重复的更新记录 | 57 | 无效交易 | 92 | 找不到交易终点 | XG | 文件操作失败 |
27 | 更新文件错 | 58 | 无效交易 | 93 | 交易违法 | XH | 密钥错误 |
28 | 文件锁定 | 59 | 舞弊嫌疑 | 94 | 重复交易 | XI | 小费已付 |
29 | 更新文件错 | 61 | 金额太大 | 95 | 对帐不平 | XJ | 小费金额超限 |
30 | 格式错,请重试 | 62 | 受限制的卡 | 96 | 系统故障 | XK | 小费交易未开通 |
XL | 交易已经调整过 | XM | 交易拒绝 | XN | 金额超限 | XO | EMV 处理错误 |
Y0 | 未知错误 | Z0 | 无此应用 |
2.1.3.3 DATA格式
TAG (2 bytes) | LEN (2 bytes) | VALUE(n bytes) | … |
---|
- TAG: 标识符,例如#1。
- LEN: VALUE长度,字符型数字。
- VALUE:数据域,数据内容。
DATA格式详表:(类型:L代表1位数字,LLvar:表示2位长度,数据是字符型,数据长度是LL)
TAG | 类型 | 说明 | 备注 |
---|---|---|---|
#1 | LLvar | 银行卡号 | |
#2 | LLvar | 交易金额 | 分为单位 |
#3 | LLvar | POS流水号 | |
#4 | LLvar | 授权码 | |
#5 | LLvar | 系统参考号 | |
#6 | LLvar | 交易日期 | 格式:YYMMDD |
#7 | LLvar | 交易时间 | 格式:hhmmss |
#8 | LLvar | 终端号 | POS终端号 |
#9 | LLvar | 发卡行代码 | |
#A | LLvar | 发卡行名称 | |
#P | LLvar | 借记总笔数 | |
#Q | LLvar | 借记总金额 | |
#R | LLvar | 贷记总笔数 | |
#S | LLvar | 贷记总金额 | |
#M | LLvar | 商户号 | POS商户号 |
#N | LLvar | 商户名称 | POS商户名 |
#E | LLvar | 卡片有效期 | YYMM |
#D | LLvar | 订单编号 | |
#C | LLvar | 批次号 | |
#J | LLvar | 线上借记总笔数 | |
#F | LLvar | 线上借记总金额 | |
#G | LLvar | 线上贷记总笔数 | |
#H | LLvar | 线上贷记总金额 | |
#I | LLvar | 发卡组织CUP:内卡 |
- #M #N #e 为 14.09.10新增
2.2 AIP接口函数说明
2.2.1 设置通讯模式
函数体:int com_typeset(int comtype);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | comtype | 通讯方式 | 0x01为串口通讯,0x02为TCP/IP通讯,默认串口通讯 |
此函数设置后,需要对应设置;若为0x01,则需要调用设置通讯的串口和速率函数进行相关设置,若为0x02,则需要调用设置通讯的ip地址函数进行ip及端口设置。
函数返回值如2.1.1章节所示,以下函数返回值同上。
2.2.2 设置通信的串口和速率
函数体:int com_setup(int iCom, long iBaud);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | iCom | 串口号 | 0x01为COM1,0x02为COM2,等等…依次类推 |
iBaud | 速率 | 值:9600,38400,115200,默认9600 |
注:Linux下该函数稍有不同
函数体:int *com_setup(char Comname long iBaud);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | Comname | 串口文件 | 类似 /dev/ttyS0, /dev/ttyS1 等 |
并且需要保证应用程序用户有读写该文件的权限 | |||
iBaud | 速率 | 值:9600,38400,115200,默认9600 |
2.2.3 设置通讯的ip地址函数
函数体:int *com_IPset(int iPort, char iIpaddr);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | iPort | 端口号 | |
iIpaddr | Ip地址 |
2.2.4 签到
函数体: **int checkin_trans(char app_name, char rspdata);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20211113]
[交易时间][093921]
[商户名称][中国银联测试]
[商户号][831290053110001]
[发卡组织CUP:内卡][CUP]
[批次号][000001]
[POS流水号][000131]
[交易应答码][00]
[终端号][30000666]
[系统参考号][000000368161]
2.2.5 银行卡余额查询
函数体: **int balance_trans(char *** *app_name , char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20211113]
[交易时间][093827]
[商户名称][中国银联测试]
[商户号][831290053110001]
[发卡行代码][01030000]
[交易金额][000000000000]
[银行卡号][622575xxxxxx2932]
[发卡行名称][农业银行]
[发卡组织CUP:内卡][CUP]
[批次号][000001]
[POS流水号][000129]
[交易应答码][00]
[终端号][30000666]
[系统参考号][000523850090]
2.2.6 消费(为银行卡交易)--反向仅支持当日撤销隔日退款
**函数体: int sale_trans(char *** **app_name , char amount,char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20211113]
[授权码][114869]
[交易时间][083815]
[商户名称][中国银联测试]
[商户号][831290053110001]
[发卡行代码][01030000]
[交易金额][000000001000]
[银行卡号][622575xxxxxx2932]
[发卡行名称][农业银行]
[发卡组织CUP:内卡][CUP]
[批次号][000001]
[POS流水号][000128]
[交易应答码][00]
[终端号][30000666]
[系统参考号][000523850089]
2.2.7 消费撤销(当日使用撤销全额退款)
函数体: **int void_trans(char *** **app_name , char *org_traceno,char amount, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
org_traceno | 原交易凭证号 | 6位字节,默认‘000000’(最近一笔)其他传消费返回的POS流水号,则pos机终端输入。(交易返回的POS流水号) | |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20220113]
[授权码][116724]
[交易时间][100338]
[商户名称][中国银联测试]
[商户号][831290053110001]
[发卡行代码][01030000]
[交易金额][000000001000]
[银行卡号][622662xxxxxx0484]
[发卡行名称][农业银行]
[发卡组织CUP:内卡][CUP]
[批次号][000002]
[POS流水号][000239]
[交易应答码][00]
[终端号][30000666]
[系统参考号][000523851945]
2.2.8 预授权
函数体: **int pre_trans(char *** **app_name , char amount, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.9 预授权撤销
函数体: **int preVoid_trans(char *** **app_name , char *amount,char *auno,char *oldtransdate, char org_traceno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
auno | 原预授权码 | 6位字节 | |
oldtransdate | 原交易日期 | 格式:MMDD,默认‘0000’,则由pos机上输入 | |
org_traceno | 原交易凭证号 | 6位字节,默认‘000000’,则pos机终端输入 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.10 预授权完成
函数体: **int preCom_trans(char *** **app_name , char *amount,char *auno,char oldtransdate, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
auno | 原预授权码 | 6位字节 | |
oldtransdate | 原交易日期 | 格式:MMDD,默认‘0000’,则由pos机上输入 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.11 预授权完成撤销
函数体: **int preComVoid_trans(char *** *app_name, char amount, charorg_traceno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
org_traceno | 原交易凭证号 | 6位字节,默认‘000000’,则pos机终端输入 | |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.12 实名支付
函数体: **int payRname_trans(char *** **app_name, char *amount, char *person_name, char pay_code, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
person_name | 持卡人姓名 | 如果传入为空,则pos机终端输入 | |
pay_code | 持卡人业务代码 | 业务代码,可能为身份证号或者手机号 | |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.13 结算
函数体: **int settle_trans(char *** **app_name,char settle_flag, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输出参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
settle_flag | 结算结果 | ‘1’:结算平;‘0’:结算不平 | |
rsp_data | 响应数据 | 格式如2.1.3章节 |
[线上贷记总笔数][0]
[交易日期][20211114]
[线上借记总金额][000000000005]
[借记总笔数][21]
[交易时间][201225]
[商户名称][中国银联测试]
[商户号][831290053110001]
[发卡行代码][ ]
[贷记总笔数][2]
[发卡组织CUP:内卡][CUP]
[批次号][000001]
[线上贷记总金额][000000000000]
[POS流水号][000154]
[贷记总金额][000000000012]
[交易应答码][00]
[终端号][30000666]
[系统参考号][000154000000]
[线上借记总笔数][5]
[借记总金额][000000005037]
2.2.14 签购单重打印
函数体: **int print_reply_trans(char *** *app_name,char * org_traceno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
org_traceno | 原交易凭证号 | 6位字节,默认‘000000’,则打印上一笔成功交易 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.15 结算单重打印
函数体: **int print_reply_settle(char *** *app_name,char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.16 交易结果查询
函数体: **int qry_trans(char *** *app_name,char * org_traceno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
org_traceno | 原交易凭证号 | 6位字节,默认‘000000’,则查询上一笔成功交易 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.17 退货(隔日使用退款,可部分退)
函数体: **int refund_trans(char *app_name, char *amount, char *sys_eqno, char sdate, char rspdata);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
sys_eqno | 原系统参考号 | 12位字节,对应“#5”标签 | |
sdate | 原交易日期 | 格式:MMDD,默认‘0000’,则由pos机上输入 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
2.2.18微信支付宝扫码付
函数体:
**int zw_trans(char *app_name, char *amount, char zwno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
zwno | 微信支付宝条码 | 以客户端生成的为准,当此变量长度小于10字节则表示调用pos的扫码枪获取条码。 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
[null][oIcV7wwvKsNAxdnTNhg2ylI4Oibo]
[交易日期][20211114]
[交易时间][201723]
[商户名称][中国银联测试]
[商户号][831290053110001]
[交易金额][000000000001]
[发卡行名称][微信-条码收款]
[发卡组织CUP:内卡][CUP]
[批次号][000002]
[订单编号][1420171913211114]
[POS流水号][000159]
[交易应答码][00]
[终端号][30000666]
[系统参考号][368331201740]
2.2.19微信支付宝交易查询
函数体:
**int zw_balance_trans(char *app_name, char zwno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
zwno | 订单编号 | 以小票上的商户订单号为准,当此变量长度小于10字节则表示调用pos的扫码枪获取条码。 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20211114]
[交易时间][201723]
[商户名称][中国银联测试]
[商户号][831290053110001]
[交易金额][000000000001]
[发卡行名称][微信-条码收款]
[发卡组织CUP:内卡][CUP]
[批次号][000002]
[订单编号][1420171913211114]
[POS流水号][000159]
[交易应答码][00]
[终端号][30000666]
[系统参考号][368331201740]
2.2.20微信支付宝退款(微信支付宝退款随意)
函数体:
**int zw_refund_trans( char *app_name, char *amount, char zwno, char rsp_data);
参数类型 | 参数名 | 说明 | 备注 |
---|---|---|---|
输入参数 | app_name | 应用渠道名 | 用于区分多应用版本 |
amount | 交易金额 | 12位ASCII,以分为单位,没有小数点 | |
zwno | 订单编号 | 以小票上的商户订单号为准,当此变量长度小于10字节则表示调用pos的扫码枪获取条码。 | |
输出参数 | rsp_data | 响应数据 | 格式如2.1.3章节 |
[交易日期][20211114]
[交易时间][202400]mM-1qgx2
[商户名称][中国银联测试]
[商户号][831290053110001]
[交易金额][000000000001]
[发卡行名称][微信-条码退款]
[发卡组织CUP:内卡][CUP]
[批次号][000002]
[订单编号][1420171913211114]
[POS流水号][000162]
[交易应答码][00]
[终端号][30000666]
[系统参考号][368334202400]
2.2 打印模板说明
通过设置配置文件中的打印模板来打印凭条,模板中的数据格式以“[”开始,“]”为结束,包裹的数据为POS 定义的TAG 值,如“[9F03]”,以下是交易模板举例:
l 模板 TAG值:
TAG | Value |
---|---|
9F0000 | 打印LOGO(目前未使用) |
9F0001 | 交易类型 |
9F0002 | 重打印字符(有重打印交易,该TAG必须有标识) |
9F00 | POS 应用名称 |
9F01 | 交易类型 |
9F02 | 交易金额 |
9F03 | 商户名称 |
9F04 | 商户号 |
9F05 | 终端号 |
9F06 | 操作员号 |
9F07 | 收单行号 |
9F08 | 发卡行号 |
9F09 | 发卡行名 |
9F0A | POS 中心号 |
9F0B | 卡号 |
9F0C | 刷卡类型(S、M、I) |
9F0D | 批次号 |
9F0E | 凭证号 |
9F0F | 授权码 |
9F10 | 参考号,退货交易传入参考号使用该字段 |
9F11 | 交易日期,退货交易传入该字段(MMDD) |
9F12 | 交易时间 |
---|---|
9F13 | 备注信息(reference) |
9F14 | 返回码 |
9F15 | 需要转发的内容 |
9F16 | 转发目的地址 |
9F17 | 转发的目的端口 |
9F18 | 转发超时时间 |
9F19 | 返回码中文解释 |
9F1A | 交易索引号(该笔交易的唯一标识号,由收银软件传入) |
9F1B | 卡片有效期 |
9F1C | 小费金额 |
9F1D | 总计金额 |
9F1E | 门店号 |
9F1F | POS 机号 |
9F20 | 原始凭证号,撤销交易传入原凭证号使用该字段 |
9F21 | 卡BIN |
9F22 | 卡BIN 名称 |
9F23 | 余额 |
9F24 | PBOCTVR终端验证结果 |
9F25 | PBOCTSI |
9F26 | PBOCAID |
9F27 | PBOCATC 交易计数器 |
9F28 | PBOCAppLabelName 应用标签 |
9F29 | PBOCPreferredName 应用首选名称 |
9F2A | PBOCTC 应用密文 |
9F2B | 本地时间(YYYYMMDDhhmmss) |
9F2C | 报文头上送TAG(9F009F0A9F0B...) |
9F40 | 清算日期 |
9F50 | 免密标识 |
9F51 | 脱机标识 |
9F60 | 卡组织 |
5F1A | 原交易索引号(提取末笔交易、重打印等原交易的9F1A) |