签订支付协议(生成PC页面签约二维码)
1. 接口介绍
功能简述:
商户调用接口生成PC网页端的签约二维码
应用场景:
1、 客户在招行侧未签订免密支付协议,商户调用该接口发起PC端的签约请求。
2、 调用该接口成功后,客户进入招行PC端免密签约页面,使用手机扫码进入签约流程,签约成功后商户侧收到“支付协议签订回调通知”。
约束条件:
1、秘钥及表单提交地址,商户需通过配置管理,方便后续调整。
正常流程:
1、用户在商户PC网页点击按钮,跳转到招行免密签约页面
2、用户使用招行APP,或微信/支付宝/手机浏览器扫码网页中的二维码,进入相应的手机端签约流程
3、用户信息校验通过后,正常签约成功
异常流程:
1、商户请求参数信息校验不通过,PC前端界面报错,签约流程停止
2、用户在二维码有效期内(20分钟),未使用手机扫码进入签约流程
3、30分钟后,招行仍未接收到用户提交签约,则该笔签约请求失效
2. 请求地址
测试环境URL:
http://netpay.netpay.bas.cmburl.cn:801/netpayment/BaseHttp.dll?PC_NPSign
生产环境URL:
https://netpay.cmbchina.com/netpayment/BaseHttp.dll?PC_NPSign
3. 请求报文
请求报文参数 | 类型(长度) | 必填 | 描述 | 示例 |
---|---|---|---|---|
charset | String(8) | M | 编码格式,固定为UTF-8(默认) | UTF-8 |
jsonRequestData | String | M | json格式的请求参数,详见jsonRequestData定义 |
jsonRequestData参数定义
参数名 | 类型(长度) | 必填 | 描述 | 示例 |
---|---|---|---|---|
version | String(3) | M | 固定为1.0 | 1.0 |
sign | String | M | 使用商户支付密钥对reqData内的数据进行签名 | |
signType | String | M | 固定为SHA-256 | SHA-256 |
reqData | 请求数据 | |||
dateTime | String(14) | M | 请求时间,商户发起该请求的时间,精确到秒。 格式: yyyyMMddHHmmss | 20160623101430 |
merchantSerialNo | String(32) | M | 协议开通请求流水号,商户生成。 同一交易日期唯一,长度不超过30位,数字字母都可以,建议纯数字 | 2016062310143088 |
agrNo | String(32) | M | 客户协议号,不超过32位的数字字母组合。 未签约(首次支付)客户,填写新协议号,用于协议开通;已签约(再次支付)客户,填写该客户已有的协议号。商户必须对协议号进行管理,确保客户与协议号一一对应。 | 201606238888888 |
branchNo | String(4) | M | 商户分行号,4位数字 | 0755 |
merchantNo | String(6) | M | 商户号,6位数字 | 123456 |
mobile | String(11) | O | 商户用户的手机号 | 13888888888 |
userID | String(20) | O | 用于标识商户用户的唯一ID。 商户系统内用户唯一标识,不超过20位,数字字母都可以,建议纯数字 | 123abc |
lon | String(20) | O | 经度,商户app获取的手机定位数据 | 30.949505 |
lat | String(20) | O | 纬度,商户app获取的手机定位数据 | 50.949506 |
riskLevel | String(3) | O | 用户在商户系统内风险等级标识 | |
noticeUrl | String(100) | M | 商户接收成功签约结果通知的地址 | http://www.xxx.com/xxx |
noticePara | String(256) | O | 成功签约结果通知附加参数,该参数在发送成功签约结果通知时,将原样返回商户。注意:该参数可为空,商户如果需要不止一个参数,可以自行把参数组合、拼装,但组合后的结果不能带有& 字符。 | |
returnUrl | String | O | 返回商户地址,签约成功页面上返回商户 按钮跳转地址,默认值:http://CMBNPRM ,采用默认值的需要商户app拦截该请求,自行决定跳转交互。注意:不能带有& 等特殊字符 | http://www.xxx.com/yyy |
开通用户身份验证或银行卡校验功能时,需上送以下信息: | ||||
merchantUserIdType | String | O | 商户上送用户的证件类型,若商户端用户未实名,不需要传该字段。01 身份证 02 护照 03 其他 | 01 |
merchantUserIdNo | String | O | 商户上送用户的证件编号,需要使用商户秘钥进行AES-256 加密(秘钥需32位,不足则右侧补0),若商户端用户未实名,不需要传该字段。生成签名串时,是直接对密文进行签名 | |
merchantUserName | String | O | 商户上送用户的姓名,需要使用商户秘钥进行AES-256 加密(秘钥需32位,不足则右侧补0),若商户端用户未实名,不需要传该字段。生成签名串时,是直接对密文进行签名 | |
merchantCardType | String | O | 商户上送用户的银行卡类型,若商户端用户未实名,或不需要限制签约银行卡,则不需要传该字段。02 本行借记卡03 本行信用卡08 他行借记卡09 他行信用卡 | 02 |
merchantCardNo | String | O | 商户上送用户的银行卡号,需要使用商户秘钥进行AES-256 加密(秘钥需32位,不足则右侧补0),若商户端用户未实名,或不需要限制签约银行卡,不需要传该字段。(生成签名串时,是直接对密文进行签名) |
请求示例:
json报文组织:
{ "version":"1.0", "charset":"UTF-8", "sign":"见签名处理章节", "signType":"SHA-256", "reqData":{ "agrNo":"201606238888888", "branchNo":"0755", "dateTime":"20160623101430", "lat":"30.949505", "lon":"50.949506", "merchantNo":"123456", "merchantSerialNo":"2016062310143088", "mobile":"13888888888", "noticePara":"", "noticeUrl":"http://www.xxx.com/xxx", "returnUrl":"http://www.xxx.com/yyy", "riskLevel":"3", "userID":"2016062388888" } }
表单组织:
<form action="请求地址" method="post" > <input type="hidden" name="jsonRequestData" value='以上json字符串' /> </form>
待签名字符串(未包含支付密钥):
agrNo=201606238888888&branchNo=0755&dateTime=20160623101430&lat=30.949505&lon=50.949506&merchantNo=123456&merchantSerialNo=2016062310143088&mobile=13888888888¬icePara=¬iceUrl=http://www.xxx.com/xxx&returnUrl=http://www.xxx.com/yyy&riskLevel=3&userID=2016062388888
4. 响应报文
1、前端直接展示请求参数和环境类的错误码,此时无响应报文和异步回调通知。商户可调用查询协议接口确认结果。
2、客户签约失败,商户后端收到签订协议失败的异步通知。
3、客户签约成功,PC网页端跳转成签约成功页面,商户后端收到签订协议成功的异步通知。
5. 错误码
以下错误码为前端的报错:
错误码 | 错误描述 | 解决方案 |
---|---|---|
NP1014 | 分行号格式错误 | 参数branchNo错误。商户开户分行号,4位数字,请咨询开户的招商银行分支机构 |
NP1015 | 商户号格式错误 | 参数merchantNo错误。商户号,6位数字,由银行在商户开户时确定 |
NP1020 | 日期格式错误 | 参数dateTime格式错误 |
NP1026 | 订单已过期:请回到商户网站,重新生成订单 | 参数dateTime错误。订单已过期,请求时间和当前系统时间间隔超过30分钟 |
NP1014 | 分行号格式错误 | 已实名的商户上传了实名信息,并且实名信息与银行端不一致 |
NP1031 | 商户通知URL地址格式错误 | 参数payNoticeUrl错误。格式要求:“https://”或“http://”开头 |
NP1032 | 商户通知参数超长 | 参数NoticePara错误。参数长度超过128个字节 |
NP1059 | 商户附加信息中,包含不允许的内容 | 参数NoticePara错误。参数值不允许有脚本 |
NP1107 | 非法一网通支付协议号 | 已参数agrNo错误。客户协议号。支持的字符集: 数字、字母(大小字母)、-_ 两个特殊字符,-_ 注意是英文半角的。未签约客户,填写新增的协议号,用于协议开通;签约客户,填写客户协议号。非空 |
NP1108 | 非法一网通支付协议开通流水号 | 参数merchantSerialNo错误。字符串,不超过32位。协议开通时非空 |
NP1109 | 非法协议商户号 | 参数merchantNo错误。由银行在商户开户时确定。非空 |
NP1110 | 非法协议用户ID | 参数userID错误。字符串,不超过20位。可为空 |
NP1111 | 非法协议手机号 | 参数Mobile错误。11位数字。可为空 |
NP1124 | 商户URL返回地址格式错误 | 参数returnUrl错误。格式要求:“https://”或“http://”开头 |
6. FAQ
Q1. 招商银行PC页面签约二维码的有效期有多久?
用户进入招行PC签约页面,二维码有效期开始倒计时,剩余有效时间为“商户发起该请求的时间(datetime)”+ 20分钟 -“招行接收商户请求时的系统时间”。
Q2. 商户如果一直没有接收到回调通知,应该怎么处理?
如果用户一直未扫码,或未确认提交签约请求给招行,即招行签约系统未处理该签约,则不会主动给商户发送回调通知。商户从datetime开始,可通过定时任务调用“查询协议API”确认协议状态,如果超过30分钟后仍未查询到协议成功,则可认为该笔签约失败。之后请使用相同的协议号重新发起签约。
Q3. 开通用户身份验证和银行卡校验是什么功能?
商户侧已收集客户的实名信息和银行卡号,如果需要校验招行侧签约客户与商户侧为同一个人,则需联系招行业务人员,在商户管理系统开通“实名认证”,并在请求报文中上送“merchantUserIdType、merchantUserIdNo、merchantUserName”;如果需要校验校验招行侧签约客户与商户侧为同一个人,且只能使用商户侧预留银行卡进行签约,则需联系招行业务人员,在商户管理系统开通“实名认证”,并在请求报文中上送“merchantUserIdType、merchantUserIdNo、merchantUserName、merchantCardType、merchantCardNo”。