接口说明

调用方法

内容 说明
通讯方式 采用 HTTPS 方式访问
提交方法 POST (application/json)
交互数据格式 JSON
字符编码 UTF-8
签名算法 MD5
签名验证 提交和返回数据都需要验证签名

报文结构

请求报文和返回报文都采用如下的报文结构

序号 参数 类型 参考数据 参数说明 备注
1 action String inquiry 交易类型 具体接口有详细说明
2 deviceNo String(8) POS01 收银机编号 用于区别本次交易请求的收银机
3 shopNo String(15) CN123456 门店编号 用于区别本次交易请求的门店
4 brand String 663 品牌编号 用于区别本次交易请求的品牌,易百分配
5 body String BASE64 报文内容 具体接口有详细说明,本域需要采用BASE64编码
6 mwVersion String 20161010 中间件版本号 用于兼容不同的中间件对应后台不同的处理方式
7 ptlVersion String 20161010 协议版本号 用于兼容不同的报文协议对应后台不同的处理方式
8 posVersion String 20161010 易百POS版本号 用于兼容不同的易百POS对应后台不同的处理方式
9 timestamp String 1483372334 Unix时间戳 单位:秒,中间件需要在收到返回时同步该时间
10 sign String 7E65B60DCFA42B04 数据签名 详见:签名算法

报文举例

 {
     "action" : "inquiry",
     "deviceNo" : "POS01",
     "shopNo" : "CN123456",
     "brand" : "663",
     "body" : "ewogICAgICAgICAidHJhY2VObyI6ICI5OTAwMDAwOTEwMDAxMDEwMTczMjEyMyIsCiAgICAgICAgICJvcmlnaW5hbFRyYWNlTm8iOiAiOTkwMDAwMDkxMDAwMTAxMDE3MzIxMjQiCiAgICAgfQ==",
     "mwVersion" : "20161010",
     "ptlVersion" : "20161010",
     "posVersion" : "20161010",
     "timestamp" : "1483372334",
     "sign" : "7E65B60DCFA42B04"
 }

签名算法

签名过程

示例报文

 {
     "action" : "inquiry",
     "deviceNo" : "POS01",
     "shopNo" : "CN123456",
     "brand" : "663",
     "body" : "ewogICAgICAgICAidHJhY2VObyI6ICI5OTAwMDAwOTEwMDAxMDEwMTczMjEyMyIsCiAgICAgICAgICJvcmlnaW5hbFRyYWNlTm8iOiAiOTkwMDAwMDkxMDAwMTAxMDE3MzIxMjQiCiAgICAgfQ==",
     "mwVersion" : "20161010",
     "ptlVersion" : "20161010",
     "posVersion" : "20161010",
     "timestamp" : "1483372334",
     "sign" : "F38545F4D74B5C10A9EBBC053ED9D1CF"
 }

签名mwMacKey密钥

94365019BBF9CEEAB0DF658E67754A70

拼接报文参数

action=inquiry&body=ewogICAgICAgICAidHJhY2VObyI6ICI5OTAwMDAwOTEwMDAxMDEwMTczMjEyMyIsCiAgICAgICAgICJvcmlnaW5hbFRyYWNlTm8iOiAiOTkwMDAwMDkxMDAwMTAxMDE3MzIxMjQiCiAgICAgfQ==&brand=663&deviceNo=POS01&mwVersion=20161010&posVersion=20161010&ptlVersion=20161010&shopNo=CN123456&timestamp=1483372334

拼接签名KEY

action=inquiry&body=ewogICAgICAgICAidHJhY2VObyI6ICI5OTAwMDAwOTEwMDAxMDEwMTczMjEyMyIsCiAgICAgICAgICJvcmlnaW5hbFRyYWNlTm8iOiAiOTkwMDAwMDkxMDAwMTAxMDE3MzIxMjQiCiAgICAgfQ==&brand=663&deviceNo=POS01&mwVersion=20161010&posVersion=20161010&ptlVersion=20161010&shopNo=CN123456&timestamp=1483372334&KEY=94365019BBF9CEEAB0DF658E67754A70

签名值计算
F38545F4D74B5C10A9EBBC053ED9D1CF

Java代码示例


Map<String, String> map = new TreeMap<>();
map.put("action", "downloadKey");
map.put("deviceNo", "CN999999");
map.put("shopNo", "CN999999");
map.put("brand", "1458");
map.put("body", "JXU2RDRCJXU4QkQ1JXU1MTg1JXU1QkI5JTIwJXU2RDRCJXU4QkQ1JXU1MTg1JXU1QkI5");
map.put("mwVersion", "20170214");
map.put("ptlVersion", "20170214");
map.put("posVersion", "20170214");
map.put("timestamp", "1483372334");

StringBuilder buffer = new StringBuilder();
for (Map.Entry<String, String> item : map.entrySet()) {
    buffer.append(item.getKey()).append("=").append(item.getValue()).append("&");
}
buffer.append("KEY=").append("F42616614BDC0000161EF06C04061484");
String checkSign = DESCoder.getInstance().encryptMD5(buffer.toString(), "UTF-8").toUpperCase();
System.out.println(buffer.toString());
System.out.println(checkSign);

输出:
action=downloadKey&body=JXU2RDRCJXU4QkQ1JXU1MTg1JXU1QkI5JTIwJXU2RDRCJXU4QkQ1JXU1MTg1JXU1QkI5&brand=1458&deviceNo=CN999999&mwVersion=20170214&posVersion=20170214&ptlVersion=20170214&shopNo=CN999999&timestamp=1483372334&KEY=F42616614BDC0000161EF06C04061484

824AE098F6135CF50A824BAE220379C6

数据加密算法

3DES介绍

加解密过程

加密举例

设pinKey为: 9D93D15D6A3913AB4151C456A80841EF,则:

K1 = 9D93D15D6A3913AB
K2 = 4151C456A80841EF
K3 = 9D93D15D6A3913AB

原始数据M表示HEX为:3132333435363738,加密如下:

DES1_RESULT = Ek(M,K1)
DES2_RESULT = Dk(DES1_RESULT,K2)
C = Ek(DES2_RESULT,K3)

最终加密结果C为:C63AABF759BDE968

解密举例

设pinKey为: 9D93D15D6A3913AB4151C456A80841EF,则:

K1 = 9D93D15D6A3913AB
K2 = 4151C456A80841EF
K3 = 9D93D15D6A3913AB

密文数据C表示HEX为:C63AABF759BDE968,解密如下:

DES1_RESULT = Dk(C,K3)
DES2_RESULT = Ek(DES1_RESULT,K2)
M = Dk(DES2_RESULT,K1)

最终解密结果M为:3132333435363738

密码加密算法

ANSI X9.8 Format(带主帐号信息)

加密举例

密钥使用流程

一般调用流程: