业务说明
应用场景
本接口用于快捷支付流程中,商户系统调用该接口发起快捷支付申请,翼码平台会向持卡人在银行预留的手机号发送短信验证码。
商户需要开通快捷支付业务,并且完成绑卡,商户系统已获取到了持卡人用户号(user_yima_id)和绑卡序列号(card_token_no)。
交易请求报文
JSON:
{
"request_type": "online_quickpay_apply_request",
"isspid": "39493002",
"pos_id": "0001",
"store_id": "0001",
"pos_seq": "qpa_20240301235959000001",
"user_id": "user01",
"system_id": "8888",
"memo": "订单备注",
"device_ip": "127.0.0.1",
"device_type": "4",
"device_mac": "0C-96-E6-84-1E-11",
"device_imei": "460030912121001",
"device_imsi": "460030912121001",
"device_icc_id": "898600680113F0123014",
"device_wifi_mac": "96-87-78-69-5A-4B",
"latitude": "+37.12",
"longitude": "-121.213",
"online_quickpay_apply_request": {
"user_yima_id": "6666000103803532",
"card_token_no": "10000093623",
"tx_amt": "1",
"order_type": "P",
"time_expire": "20240301235959",
"biz_tp": "100099",
"goods_short_name": "个人电脑",
"gw_chnnl_tp": "01",
"notify_url": "https://www.baidu.com/",
"extend_params": {
"split_flag": "R",
"plan_split_date": "20230418",
"split_info": {
"keep_amt": "800",
"split_list": [
{
"merchant_id": "10000000000001",
"div_amt": "150"
},
{
"merchant_id": "10000000000002",
"div_amt": "50"
}
]
}
}
},
"sign": "314DA43E7E244105ECBD45F797264854"
}
XML:
<?xml version="1.0" encoding="GBK"?>
<business_trans>
<request_type>online_quickpay_apply_request</request_type>
<isspid>39493002</isspid>
<pos_id>0001</pos_id>
<store_id>0001</store_id>
<pos_seq>qpa_20240301235959000001</pos_seq>
<user_id>user01</user_id>
<system_id>8888</system_id>
<memo>订单备注</memo>
<device_ip>127.0.0.1</device_ip>
<device_type>4</device_type>
<device_mac>0C-96-E6-84-1E-11</device_mac>
<device_imei>460030912121001</device_imei>
<device_imsi>460030912121001</device_imsi>
<device_icc_id>898600680113F0123014</device_icc_id>
<device_wifi_mac>96-87-78-69-5A-4B</device_wifi_mac>
<latitude>+37.12</latitude>
<longitude>-121.213</longitude>
<online_quickpay_apply_request>
<user_yima_id>6666000103803532</user_yima_id>
<card_token_no>10000093623</card_token_no>
<tx_amt>1</tx_amt>
<order_type>P</order_type>
<time_expire>20240301235959</time_expire>
<biz_tp>100099</biz_tp>
<goods_short_name>个人电脑</goods_short_name>
<gw_chnnl_tp>01</gw_chnnl_tp>
<notify_url><![CDATA[https://www.baidu.com/]]></notify_url>
<extend_params><![CDATA[扩展参数(JSONObject)]]></extend_params>
</online_quickpay_apply_request>
</business_trans>
交易请求报文说明
节点名称 | 中文名称 | 类型 | 说明 | 是否必填 |
---|---|---|---|---|
sign | 报文签名 | String(32) | 请求报文格式为JSON时必填 计算签名方式请看2.1章节 | 可空 |
request_type | 请求类型 | String(32) | 固定值:online_quickpay_apply_request | 必填 |
isspid | 商户号 | String(8) | 翼码商户号,由翼码提供 | 必填 |
pos_id | 终端号 | String(20) | 商户自定义终端号 | 必填 |
store_id | 门店号 | String(20) | 商户自定义门店号 | 必填 |
pos_seq | 支付请求流水号 | String(32) | 同一个翼码商户号下唯一,不可重复使用,且大于12位 | 必填 |
user_id | 操作员标识 | String(20) | 操作员号 | 可空 |
system_id | 系统平台号 | String(4) | 由翼码提供 | 必填 |
memo | 订单备注 | String(128) | 可空 | |
device_ip | 设备IP | String(15) | 设备所在的公网IP,可用于定位所属地区 不是wifi连接时的局域网IP IPV4格式 | 必填 |
device_type | 设备类型 | String(1) | 1:手机 2:平板 3:手表 4:PC | 必填 |
device_mac | 设备终端的物理地址 | String(64) | 必填 | |
device_imei | 交易设备IMEI | String(64) | 移动终端设备的唯一标识 | 必填 |
device_imsi | 交易设备IMSI | String(64) | 必填 | |
device_icc_id | 交易设备ICCID | String(64) | 必填 | |
device_wifi_mac | 交易设备WIFIMAC | String(64) | 必填 | |
latitude | 纬度 | String(9) | 交易设备的经纬度信息 纬度格式:+表示北纬,-表示南纬;纬度整数位不超过2位,小数位不超过6位。 | 必填 |
longitude | 经度 | String(9) | 交易设备的经纬度信息 经度格式:+表示东经,-表示西经;经度整数位不超过3位,小数位不超过5位。 | 必填 |
online_quickpay_apply_request ->user_yima_id | 持卡人用户号 | String(32) | 翼码系统的用户号 对应【快捷绑卡确认】返回节点中的user_yima_id | 必填 |
online_quickpay_apply_request ->card_token_no | 绑卡序列号 | String(64) | 绑卡序列号 对应【快捷绑卡确认】返回节点中的card_token_no | 必填 |
online_quickpay_apply_request ->tx_amt | 交易金额 | Number(9) | 支付金额,单位为分,不支持小数点 | 必填 |
online_quickpay_apply_request ->order_type | 订单类型 | String(1) | P:支付 R:充值 | 必填 |
online_quickpay_apply_request ->time_expire | 订单失效时间 | String(14) | 格式yyyyMMddHHmmss 注:工商银行系统针订单失效时间处理比较特殊,订单失效时间有效期时间要大于1.5小时。 | 必填 |
online_quickpay_apply_request ->biz_tp | 业务种类 | String(6) | 取值详见【7.1 业务种类】 | 必填 |
online_quickpay_apply_request ->goods_short_name | 商品简称 | String(40) | 不能包含特殊字符 详细字符见下文 | 必填 |
online_quickpay_apply_request ->gw_chnnl_tp | 网关支付受理渠道 | String(2) | 01:电脑浏览器 02:手机浏览器 03:手机应用程序 99:其他 | 必填 |
online_quickpay_apply_request ->notify_url | 异步通知地址 | String(256) | 异步通知文档见4.20 使用XML格式报文时,建议使用CDATA标签包裹内容 | 可空 |
online_quickpay_apply_request ->extend_params | 扩展参数 | JSONObject | 用于扩展一些特殊的支付参数字段,详细参数见下表 使用XML格式报文时,建议使用CDATA标签包裹内容 | 可空 |
自定义门店号(store_id)和自定义终端号(pos_id)需经过4.1终端绑定交易接口绑定成功过的值才可以调用,绑定一次即可不需要重复绑定。
goods_short_name 商品简称
不能包含的特殊字符如下:<、>、&、'、"、|、%、#、^、-
extend_params 扩展参数
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
split_flag | String | 分账标识 N:不分账 R:实时分账 D:延时分账 不传该节点时,将按控制台配置处理 该节点与分账功能相关具体联系业务确认开通功能 | 可空 | R |
plan_split_date | String | 预分账日期,格式:yyyymmdd 仅延时分账类型(split_flag=D)时支持传入 | 可空 | 20230418 |
split_info | JSONObject | 分账信息 仅支持请求实时分账split_flag=R 该节点与分账功能相关具体联系业务确认开通功能 | 可空 |
分账业务相关的特别说明:
1. split_flag=N 不分账时,split_info不允许传入;
2. split_flag=R 实时分账时,split_info必传,其中keep_amt与div_amt叠加必须全额分完整笔订单;
3. split_flag=D 延时分账时,split_info不允许传入,在后续流程中调用延迟交易确认接口完成分账,或使用翼码分账系统界面进行分账。
split_info 分账信息
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
is_clean_split | String | N:不使用净值分账 Y:使用净值分账 不传默认为N,即不使用净值分账 净值分账目前仅对部分通道开放,使用此能力前请先与技术支持确认 净值分账仅在交易手续费内扣时才起作用 当使用净值分账时,分账信息和分账明细必须要传分账比例,且分账方自留比例(keep_percentage)与所有分账比例(div_percentage)之和必须要为100% | 可空 | Y |
keep_amt | String | 分账方自留金额,单位为分,可传0表示不自留 不使用净值分账(is_clean_split=N)时,该节点必填,分账方自留比例(keep_percentage)节点无效 | 可空 | 1000 |
keep_percentage | String | 分账方自留比例,单位为%,最多支持小数点后两位,可传0表示不自留 使用净值分账(is_clean_split=Y)时,该节点必填,分账方自留金额(keep_amt)节点无效 | 可空 | 50.26 |
split_list | Array | 分账明细 | 必填 |
split_list 分账明细
JSON节点 | 类型 | 说明 | 是否必填 | 范例 |
---|---|---|---|---|
merchant_id | String | 分账接收方的分账商户号 | 必填 | 10000000000001 |
div_amt | String | 分账金额,单位为分,必须大于0 不使用净值分账(is_clean_split=N)时,该节点必填,分账比例(div_percentage)节点无效 | 可空 | 1000 |
div_percentage | String | 分账比例,单位为%,最多支持小数点后两位,必须大于0 使用净值分账(is_clean_split=Y)时,该节点必填,分账金额(div_amt)节点无效 | 可空 | 23.55 |
若业务涉及100%分账给接收方,请于业务对接人联系申请使用净值分账功能。
extend_params 样例:
{
"split_flag": "R",
"plan_split_date": "20230418",
"split_info": {
"keep_amt": "800",
"split_list": [
{
"merchant_id": "10000000000001",
"div_amt": "150"
},
{
"merchant_id": "10000000000002",
"div_amt": "50"
}
]
}
}
交易返回报文
JSON:
{
"response_type": "online_quickpay_apply_response",
"isspid": "39493002",
"pos_id": "0001",
"pos_seq": "qpa_20240301235959000001",
"trans_time": "20240301151515",
"sys_seq": "0741136885a748c1",
"avoid_sms_flag": "0",
"result": {
"id": "0000",
"comment": "申请成功"
},
"sign": "F6106656C20AB23B547B0C30DD819793"
}
XML:
<?xml version="1.0" encoding="GBK"?>
<business_trans>
<response_type>online_quickpay_apply_response</response_type>
<isspid>39493002</isspid>
<pos_id>0001</pos_id>
<pos_seq>qpa_20240301235959000001</pos_seq>
<sys_seq>0741136885a748c1</sys_seq>
<trans_time>20240301151515</trans_time>
<avoid_sms_flag>0</avoid_sms_flag>
<result>
<id>0000</id>
<comment>申请成功</comment>
</result>
</business_trans>
交易返回报文说明
标准接口会因业务升级需要而新增节点,请在解析返回报文时避免新增未知节点产生的程序出错!
节点名称 | 中文名称 | 类型 | 说明 | 是否必填 |
---|---|---|---|---|
sign | 报文签名 | String(32) | 返回报文格式为JSON时必填 计算签名方式请看2.1章节 | 可选 |
response_type | 返回类型 | String(32) | 固定值:online_quickpay_apply_response | 必填 |
isspid | 商户号 | String(8) | 翼码商户号,由翼码提供 | 必填 |
pos_id | 终端号 | String(20) | 商户自定义终端号 | 必填 |
pos_seq | 支付请求流水号 | String(32) | 支付请求流水号,和请求报文相同 | 必填 |
sys_seq | 随机串号 | String(16) | 随机生成串号,仅用于日志跟踪用,不保存 | 必填 |
trans_time | 接口返回时间 | String(14) | 接口返回时间,格式:yyyyMMddHHmmss | 必填 |
avoid_sms_flag | 免短标签 | String(1) | 1:免短信验证码 0:需要短信验证码 后续调用流程详见下文 | 可空 |
result ->id | 响应码 | String(4) | 0000:申请成功 其它表示失败,错误信息说明见“响应码解释”字段 | 必填 |
result ->comment | 响应码解释 | String(64) | 响应码对应中文注解,用于显示提示 | 必填 |
标准接口会因业务升级需要而新增节点,请在解析返回报文时避免新增未知节点产生的程序出错!
判断响应码与免短标签进行后续调用流程说明
返回响应码(result->id)为“0000”时,表示该笔快捷支付申请成功,此时需进一步判断返回免短标签(avoid_sms_flag)是否为“1”:
1.当avoid_sms_flag=1时,表示该笔交易无需进行短信验证码验证直接会完成扣款,此时不需要调用【快捷支付确认】,进入等待【4.20 支付交易支付结果通知】通知支付结果或主动调用【线上交易查询】查询支付结果的流程;
2.当avoid_sms_flag!=1时,表示该笔交易需要短信验证码验证,此时下一步需要调用【快捷支付确认】上送持卡人手机收到的短信验证码进行验证,验证成功后才会完成扣款,之后再进入等待【4.20 支付交易支付结果通知】通知支付结果或主动调用【线上交易查询】查询支付结果的流程。