免密支付

签订支付协议(生成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. 请求报文

请求报文参数类型(长度)必填描述示例
charsetString(8)M编码格式,固定为UTF-8(默认)UTF-8
jsonRequestDataStringMjson格式的请求参数,详见jsonRequestData定义

jsonRequestData参数定义

参数名类型(长度)必填描述示例
versionString(3)M固定为1.01.0
signStringM使用商户支付密钥对reqData内的数据进行签名
signTypeStringM固定为SHA-256SHA-256
reqData请求数据


dateTimeString(14)M请求时间,商户发起该请求的时间,精确到秒。
格式:yyyyMMddHHmmss
20160623101430
merchantSerialNoString(32)M协议开通请求流水号,商户生成。
同一交易日期唯一,长度不超过30位,数字字母都可以,建议纯数字
2016062310143088
agrNoString(32)M客户协议号,不超过32位的数字字母组合。
未签约(首次支付)客户,填写新协议号,用于协议开通;已签约(再次支付)客户,填写该客户已有的协议号。商户必须对协议号进行管理,确保客户与协议号一一对应。
201606238888888
branchNoString(4)M商户分行号,4位数字0755
merchantNoString(6)M商户号,6位数字123456
mobileString(11)O商户用户的手机号13888888888
userIDString(20)O用于标识商户用户的唯一ID。
商户系统内用户唯一标识,不超过20位,数字字母都可以,建议纯数字
123abc
lonString(20)O经度,商户app获取的手机定位数据30.949505
latString(20)O纬度,商户app获取的手机定位数据50.949506
riskLevelString(3)O用户在商户系统内风险等级标识
noticeUrlString(100)M商户接收成功签约结果通知的地址http://www.xxx.com/xxx
noticeParaString(256)O成功签约结果通知附加参数,该参数在发送成功签约结果通知时,将原样返回商户。注意:该参数可为空,商户如果需要不止一个参数,可以自行把参数组合、拼装,但组合后的结果不能带有&字符。
returnUrlStringO返回商户地址,签约成功页面上返回商户按钮跳转地址,默认值:http://CMBNPRM,采用默认值的需要商户app拦截该请求,自行决定跳转交互。注意:不能带有&等特殊字符http://www.xxx.com/yyy
开通用户身份验证或银行卡校验功能时,需上送以下信息:
merchantUserIdTypeStringO商户上送用户的证件类型,若商户端用户未实名,不需要传该字段。
01 身份证 
02 护照 
03 其他
01
merchantUserIdNoStringO商户上送用户的证件编号,需要使用商户秘钥进行AES-256加密(秘钥需32位,不足则右侧补0),若商户端用户未实名,不需要传该字段。生成签名串时,是直接对密文进行签名
merchantUserNameStringO商户上送用户的姓名,需要使用商户秘钥进行AES-256加密(秘钥需32位,不足则右侧补0),若商户端用户未实名,不需要传该字段。生成签名串时,是直接对密文进行签名
merchantCardTypeStringO商户上送用户的银行卡类型,若商户端用户未实名,或不需要限制签约银行卡,则不需要传该字段。
02 本行借记卡
03 本行信用卡
08 他行借记卡
09 他行信用卡
02
merchantCardNoStringO商户上送用户的银行卡号,需要使用商户秘钥进行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&noticePara=&noticeUrl=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”。