手机pos接口¶
156 申请商户接口¶
功能说明¶
申请商户接口,用于后续交易
调用方式:系统调用
特别提醒:手机APP在银联发起交易时,订单号必须按此规则:CMP+16位数字+NPAY,eg:CMP2021012020210120NPAY,否则后续无法正常分账
请求参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
版本号 | version | 定长2位String | 必须 | 固定为10,如版本升级,能向前兼容 |
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为156。 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位的String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位的String | 必须 | 格式为YYYYMMDD,例如:20210120 |
行业 | tm_type | 定长4位String | 必须 | 0100:住宿;0200:餐饮;0300:电器;0400:服饰;0500:旅游;0600:珠宝;0700:汽车服务;0800:美容养生;0900:酒吧,夜总会;1000:数码电脑;1100:美妆护肤;1200:百货;1300:家装建材; |
用户省份 | cust_prov | 定长2位String | 必须 | |
用户地区 | cust_area | 定长6位String | 必须 | |
分账账户串 | div_detail | 变长1024位String | 必须 | 数据格式:[{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’}],可分给多个对象,每个对象大括号{}用逗号隔开 该参数表示分账对象,将金额分给虚拟用户的账户中,divCustId和divAcctId即为开户接口返回的usercustid和acct_id , 若分给平台自己,可通过上线邮件中查找商户客户号和子账号信息 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户交易分账结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
设备静态信息 | dev_info_json | 变长1024位的String | 必须 | Json格式,如下 |
分账账户串(div_detail)内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 定长16位的String | 必须 | |
分账账户号 | divAcctId | 变长9位String | 必须 | |
分账金额 | divAmt | 变长14位String | 必须 | 分账金额,保留两位小数 |
设备静态信息(dev_info_json)内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
设备类型 | devType | 定长1位 String | 必须 | 交易时的,1-电脑;2-手机 |
IP地址 | ipAddr | 变长45位 String | 必须 | 交易时的ip地址 目前暂传IPv4格式 |
定位(经度) | cenX | 变长 String | 必须 | |
定位(纬度) | cenY | 变长 String | 必须 | |
商户APP ID | merAppId | 变长 String | 必须 | Android 取 客户端包名 iOS 取 bundleID |
APP名称 | appName | 变长 String | 必须 | |
APP版本号 | appVersion | 变长 String | 必须 | |
注册账号 | registerAccount | 变长 String | 必须 | 指商户APP侧登录用户名 |
注册时间 | registerTime | 变长 String | 必须 | 指商户APP侧用户注册时间 |
注册IP地址 | registerIpArr | 变长 String | 必须 | 指商户APP侧用户注册时所用IP |
注册时使用的设备号 | registerDevNo | 变长 String | 必须 | 指手机ICCID |
注册设备类型 | registerType | 变长 String | 必须 | 1.电脑;2.手机 |
设备GPS位置 | registerGpsLocation | 变长 String | 必须 | 指该笔交易发生的IP |
设备SIM卡号码 | registerSimCardNo | 变长 String | 必须 | 指手机SIM卡号码 |
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为156 |
返回码 | resp_code | 定长6位String | 必须 | 156000–调用成功,其他见返回码表 |
结果描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位的String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
订单号 | order_id | 变长20位的String | 必须 | 由商户生成,必须保证唯一, 20位内的字母或数字组合 |
订单日期 | order_date | 定长8位的String | 必须 | 格式为YYYYMMDD,例如:20200513 |
行业 | tm_type | 定长4位String | 必须 | 根据实际获取的行业 |
用户省份 | cust_prov | 定长2位String | 必须 | 根据实际获取的省份 |
用户地区 | cust_area | 定长6位String | 必须 | 根据实际获取的地区 |
分账账户串 | div_detail | 变长1024位String | 必须 | 数据格式:[{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’}],可分给多个对象,每个对象大括号{}用逗号隔开 该参数表示分账对象,将金额分给虚拟用户的账户中,divCustId和divAcctId即为开户接口返回的usercustid和acct_id,若分给平台自己,可通过上线邮件中查找商户客户号和子账号信息 |
商户后台应答地址 | bg_ret_url | 变长128位String | 必须 | 通过后台异步通知商户交易分账结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
银联商户号 | union_pay_mer_id | 变长32位String | 可选 | 银联商户号 |
银联商户名 | union_pay_mer_name | 变长256位String | 可选 | 银联商户名 |
返回码¶
返回码 | 返回描述 |
156104 | 用户状态异常 |
156334 | 分账信息格式不正确 |
156333 | 分账信息不存在 |
156721 | 分账串内容不能超过五个 |
156722 | 分账串部分字段为空 |
156732 | 分账串客户号信息格式错误 |
156202 | 交易订单号重复 |
156728 | 分账串账户信息格式错误 |
156723 | 分账串金额格式错误 |
156112 | 账号不存在 |
156741 | 分账串内容重复 |
代码示例¶
java
String valueObj = {
"version":"10",
"cmd_id":"156",
"mer_cust_id":
"6666000000026086",
"user_cust_id":"6666000000026186",
"order_id":"2021012011111",
"order_date":"20210120",
"tm_type":"0100",
"cust_prov":"15",
"cust_area":"150700",
"div_detail":"[{'divCustId':'6666000000028715','divAcctId':'82524','divAmt':'5.03'},{'divCustId':'6666000000026190','divAcctId':'79714','divAmt':'6.03'}]",
"bg_ret_url":"http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
"dev_info_json":"{\"devType\":\"1\",\"iMEI\":\"355320084666603\",\"ipAddr\":\"172.31.30.188\",\"cenX\":\"172\",\"cenY\":\"173\",\"merAppId\":\"name2\",\"appName\":\"app名称\",\"appVersion\":\"1.0\",\"registerAccount\":\"1.0\",\"registerTime\":\"20210126\",\"registerIpArr\":\"1.0\"}"
};
String testUrl = "http://192.168.3.170:8083/api/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "156";
String merCustId = "6666000000026086";
String version = "10";
httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
out.println(" <BODY style=\"display: none\">");
out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
out.println("</from>");
out.println("<script>window.document.submitForm.submit();</script>");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
成功响应:
200
{
"cmd_id": "156",
"resp_code": "156000",
"resp_desc": "交易成功",
"mer_cust_id" : "6666000000026086",
"order_date": "20210120",
"order_id": "2021012011111",
.......
}
失败响应:
200
{
"cmd_id": "156",
"resp_code": "156099",
"resp_desc": "交易失败",
"mer_cust_id" : "6666000000026086",
"order_date": "20210120",
"order_id": "2021012011111",
.......
}
155 手机pos交易结果通知¶
返回参数¶
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
消息类型 | cmd_id | 定长3位String | 必须 | 每一种消息类型代表一种交易,此处为155 |
应答返回码 | resp_code | 定长6位String | 必须 | 155000—交易成功,其他见返回码附件表 |
应答返回描述 | resp_desc | 变长String | 必须 | 返回码的对应中文描述 |
商户客户号 | mer_cust_id | 定长16位String | 必须 | 由汇付生成,商户的唯一性标识 |
用户客户号 | user_cust_id | 定长16位String | 必须 | 由汇付生成,用户的唯一性标识 |
全局流水号 | trace_id | 变长40位String | 必须 | 全局流水号 |
请求流水号 | product_seq_id | 变长64位String | 必须 | 请求流水号 |
请求日期 | product_seq_date | 定长8位String | 必须 | yyyyMMdd |
银联商户号 | union_pay_mer_id | 变长32位String | 必须 | |
银联商户名 | union_pay_mer_name | 变长256位String | 可选 | |
银联流水号 | out_transaction_id | 变长64位String | 可选 | |
商户订单号 | order_id | 变长128位String | 可选 | |
商户订单日期 | order_date | 定长8位String | 可选 | yyyymmdd |
交易类型 | business_type | 定长2位String | 可选 | 交易类型(01:消费 00:查询 31:消费撤销 04:消费退款) |
交易方法 | business_method | 定长2位String | 可选 | 交易方法(00:有卡 01:二维码主扫 02:二维码被扫) |
终端号 | term_id | 变长128位String | 可选 | 终端号, uMP开头 |
订单发送时间 | order_send_time | 变长14位String | 可选 | yyyyMMddHHmmss |
银行卡号 | acc_no | 变长32位String | 可选 | 根据商户配置返回 |
交易金额 | trans_amt | 变长14位String | 必须 | 交易金额(单元:元) |
交易币种 | currency_code | 定长3位String | 可选 | 交易币种(默认为156-CNY) |
交易传输时间 | trace_time | 变长14位String | 可选 | yyyyMMddHHmmss |
刷卡方式 | card_mode | 定长2位String | 可选 | 刷卡方式(00:银行卡 01:手机pay 02:可穿戴) |
借贷标记 | dc_flag | 定长1位String | 必须 | 0–借记,储蓄卡;1–贷记,信用卡;2-借贷不分离 |
支付通道类型 | pay_channel_type | 定长1位String | 可选 | W微信、A支付宝、U银联 |
兑换日期 | exchange_date | 变长String | 可选 | 兑换日期(交易成功,交易币种和清算币种不一致的时候返回) yyyyMMdd |
汇率 | exchange_rate | 变长String | 可选 | 汇率(交易成功,交易币种和清算币种不一致的时候返回) |
商户后台应答地址 | bg_ret_url | 变长128位的String | 必须 | 通过后台异步通知商户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址 |
优惠信息 | coupon_info | 定长String | 可选 | |
手续费金额 | fee_amt | 变长14位String | 可选 | 手续费金额,格式为###.00 |
手续费扣款客户号 | fee_cust_id | 定长16位String | 可选 | 手续费扣款客户号 |
手续费子账户号 | fee_acct_id | 变长9位String | 可选 | 手续费扣款子账户号 |
分账账户串 | div_detail | 变长1024位String | 可选 | 数据格式:[{“divCustId “:”6000060000009547”,” divAcctId”:”MDT000001”,” divAmt”:”1.00”}] |
分账账户串(div_detail)内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
分账客户号 | divCustId | 定长16位的String | 必须 | |
分账账户号 | divAcctId | 变长9位String | 必须 | |
分账金额 | divAmt | 变长14位String | 必须 | 分账金额,保留两位小数 |
优惠信息(coupon_info)内容:
参数中文名称 | 参数名称 | 数据格式 | 是否必须 | 说明 |
---|---|---|---|---|
项目类型 | type | 定长4位的String | 必须 | |
出资方 | spnsrId | 变长20位String | 必须 | 出资方(目前取值只允许为00010000,即仅支持银联作为出资方,未来将增加付款方等出资方) |
金额 | offstAmt | 变长14位String | 必须 | 单位是元,不能为0,币种同上层currencyCode字段 |
项目编号 | id | 变长40位String | 可选 | 项目编号,用于票券编号等,格式自定义 |
项目简称 | desc | 变长40位String | 可选 | 项目简称,优惠活动简称,可用于展示,打单等 |
附加信息 | addnInfo | 变长100位String | 可选 |
返回码¶
返回码 | 返回描述 |
156000 | 交易成功 |
156003 | 交易失败 |