1.文档说明
1.1文档目的
本文档的目的是为宝付互联网支付网关平台定义一个接口规范,以帮助商户技术人员快 速接入宝付互联网支付网关和查询订单,并快速掌握互联网支付网关的相关功能,便于尽快 的投入使用。
1.2阅读对象
- 商户开发人员、维护人员和管理人员
- 宝付互联网支付产品相关的技术人员
1.3技术支持
在开发或使用宝付互联网支付接口时,如果您有任何技术上的疑问,请按如下方式寻求帮助,宝付技术支持人员会及时处理,给予您答复:
技术支持热线:021-68819999-8005
技术支持Email:support@baofoo.com
技术支持QQ:800066689
2.接口须知
2.1术语含义
- 互联网支付:是指持卡人通过 PC 端(电脑)通过浏览器进行支付的方式。
- 会员:在宝付注册并使用宝付提供的互联网产品的企业或者个人。
- 签约:与宝付签订商业合作协议,使用宝付提供的代收,代付代扣等互联网金融服 务功能。
- 商户:与宝付签订商户合约的宝付会员。
- 终端:商户在与宝付签订某项具体互联网金融功能合作协议自动分配的会员属性, 终端将用于进行具体的金融交易必要参数。
- 订单:是指商户在使用宝付金融功能时产生的交易记录,商户和宝付之间采用订单 作为结算的唯一依据。
- 密钥:是指宝付分配给商户用于进行安全通讯验证的随机字符串或者是数字证书。
- 用户:是指在商户平台注册的企业或个人。
2.2接口准备
- 仔细阅读本文档相关申明和注意事项
- 商户调试接口相关的文档
- 商户的支付网关商户号、终端、密钥
2.3互联网支付流程
支付流程步骤说明
1.持卡人登录商户网站,选择支付内容并下单,商户网站产生预订单信息,商户提供商户订单号、订单时间、订单金额等信息;
2.持卡人提交订单后,商户将产生的订单信息服务发送给宝付,跳转至宝付支付网关,完成支付请求;
3.持卡人在宝付支付网关选择付款银行;
4.宝付网关跳转至相对应的银行网银支付页面,持卡人在银行支付页面填写网银登录名、密码等信息进行在线支付;
5.银行直接将支付结果反馈给持卡人;
6.银行网银支付系统通知宝付订单支付结果(服务器通知方式);
7.宝付系统异步将支付结果通知给商户(服务器通知方式);
2.4编码方式
报文采用UTF-8编码方式
3.互联网支付网关接口
3.1 支付接口
宝付支付网关支付是指用户从商户应用先经过宝付收银台,进行相关信息的填写,再由宝付提交至银行处理的支付方式。
注:
请勿在测试环境使用大额支付,测试金额不予返还,建议使用1分钱进行测试;
上线时,请及时更换正式商户号、终端号和密钥,并提交至正式环境。
3.1.1 支付请求报文
支付请求报文,是指商户通过HTTPS请求,采用POST方式提交并经过证书对敏感信息加密然后签名提交订单信息至宝付接收地址,宝付将获取参数进行验签,对敏感信息解密,校验一致则把订单信息及结果通知给商户。
请求报文
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 签名数据 | data_content | M | json字符串,具体参数如下签名数据 |
02 | 交易签名 | signature | M | 交易签名串 注意:签名之前,先将组装数据(请参照签名数据模板组装数据)然后使用发送方SM2私钥证书签名然后再进行16进制转码转大写。 |
签名数据
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 商户ID | member_id | M | 平台或商户号,例:100000178 |
02 | 终端 ID | terminal_id | M | 商户签约后通过邮件或者其他方式给予商户,例:10000001 |
03 | 功能 ID | pay_id | O | 参考《附录:产品功能》 注:若选择全部银行则为空字符串,选择全部银行即跳转宝付收银台选择银行 |
04 | 订单日期 | trade_date | M | 14 位定长。格式:yyyyMMddHHmmss |
05 | 订单号 | trans_id | M | 唯一订单号 格式:8位日期+12位序列号 日期格式:yyyyMMdd 宝付将以此作为结算的唯一凭证 |
06 | 订单金额 | order_money | M | 单位:分 例:1元则提交100 |
07 | 商品名称 | product_name | O | 长度不超过 64 位 |
08 | 商品数量 | amount | O | 无特殊需求则设置为 1 |
09 | 用户名称 | user_name | O | 长度不超过 64 位 |
10 | 附加字段 | additional_info | O | 长度不超过 128 位 |
11 | 通知类型 | notice_type | M | 固定数字:1 |
12 | 页面返回地址 | page_url | M | 该地址通知服务不可以用作交易处理 |
13 | 交易通知地址 | return_url | M | 长度不超过 255 位 宝付后台异步通知,在此交易结果处理 不可使用页面通知地址作为交易通知地址 |
14 | 交易模式 | model | O | 用来控制宝付收银台界面展示的产品。 可选填:b2b,b2c b2b:宝付收银台只展示b2b产品 b2c:宝付收银台只展示b2c相关产品 |
15 | 付款方户名 | payer_name | O | 付款方户名 加密方式:使用数字信封指定的方式和密钥加密再进行16进制转码 |
16 | 付款方账户 | payer_acct | O | 付款方账户 加密方式:使用数字信封指定的方式和密钥加密再进行16进制转码 |
17 | 订单有效时长 | order_eff_time | O | 有效时长单位为分钟 b2b模式:最大值为7天 b2c模式:最大值为3小时 为空或者超过最大值以最大值为准 |
18 | 接口版本 | version | M | 固定值:4.11 |
19 | 数字信封 | dgtl_envlp | O | 付款方户名或付款方账号传值时该字段不能为空 格式:02 |
20 | 验签方式 | verify_type | M | 固定值:10 |
21 | 加密证书序列号 | ncrptn_sn | M | 宝付公钥证书序列号,用于选择解密证书 |
22 | 签名证书序列号 | sign_sn | M | 商户公钥证书序列号,用于选择验签证书 |
加密数据模板:
- JSON
{ "member_id": "XXXX", "page_url": "http://localhost:8080/PayGateRSA2048/PageUrl.html", "amount": "1", "user_name": "用户名称", "order_money": "100", "trans_id": "PAGATID1551150255542", "trade_date": "20190226110415", "product_name": "商品名称", "notice_type": "1", "additional_info": "附加字段", "return_url": "http://10.1.60.129:8080/PayGateRSA2048/ReturnUrl.action", "pay_id": "3001", "verify_type": "10", "ncrptn_sn": "XXXXX", "sign_sn": "XXXXX", "version": "4.11" }
3.1.2 支付返回报文
应答报文(宝付返回报文)
支付返回报文是指宝付在用户交易结束后,会将支付结果以页面返回和交易通知两种方 式同时分别请求商户的页面返回地址和交易通知地址。
支付响应结果都是宝付通过SM2私钥签名发送给商户。商户接收到宝付的响应报文,将接收到的signature内容,用宝付发给商户且后缀为(*.cer)的公钥证书进行验签然后使用。
注:
发送至商户页面返回地址的支付返回报文仅用于在页面上以一种友好的方式通知用户支付结果,代表支付成功或受理成功,并不代表交易成功,请切记不可使用该地址的服务进行交易结果处理。
返回请求地址:商户在订单请求时的页面通知地址和交易通知地址
返回报文实例:
{
"data_content": {
"member_id": "100000178",
"pay_result": "N",
"succ_money": "0",
"terminal_id": "100003742",
"trade_date": "20220727153127",
"trans_id": "5004240571",
"ncrptn_sn": "1387287849",
"sign_sn": "4026178988"
},
"signature": "3045022100E9A3AA1D4E6D5A59814975206FC0817FC7704C5E30A8DF2091F19D564D26768502203B4220300E0902F3EC65666DFCF300945904F95D2D37178B33BAB042821CCBA9"
}
返回参数
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 签名数据 | data_content | M | 具体参数如下 |
02 | 签名串 | signature | M | 签名串 验签流程:签名数据组装为data_content={“member_id”: “100000178”…},然后与签名串使用宝付公钥做SM2验签 |
签名数据
参数名称 | 参数含义 | 约束 | 参数备注 |
---|---|---|---|
member_id | 商户 ID | 保留 | 等同于商户提交的商户号 |
terminal_id | 终端 ID | 保留 | 等同于商户提交的终端号 |
trans_id | 订单 ID | 保留 | 等同于商户提交的订单 宝付不支持商户提交重复订单号,对重复订单号将 直接提示订单已经提交 |
result | 支付结果 | 文档提供 | 代表与宝付的交易是否成功 1:成功 0:失败 可查看《附录:支付结果》 |
result_desc | 订单结果 | 文档提供 | 代表该订单处理的结果成功与否 跟交易结果一起判断该笔订单的最终状态 查看附录:《附录:支付结果描述》 |
fact_money | 成功金额 | 数值 | 单位:分 银行订单时验证成功金额和订单金额的一致 卡类订单时验证成功金额不可超过订单金额 |
additional_info | 订单附加信息 | 保留 | 等同于商户提交的附加字段 |
succ_time | 交易成功时间 | 字符串 | 交易成功,订单完成的时间 格式:年年年年月月日日时时分分秒秒 |
reserved | 预留字段 | 字符串 | 预留 |
ncrptn_sn | 加密证书序列号 | 字符串 | 商户公钥证书序列号,用于选择解密证书 |
sign_sn | 签名证书序列号 | 字符串 | 宝付公钥证书序列号,用于选择验签证书 |
3.1.3 商户接收通知后通知页面内容
商户提交订单支付请求后,用户通过正常的支付流程支付成功或者支付失败后,支付接 口将支付结果通知给商户。
支付结果通知由宝付系统确保一定成功发送给商户。成功发送是指由宝付发出结果通知 到商户后,能够成功获取商户的返回确认(商户接收通知的ReturnUrl在页面上输出OK表 示接收成功<除了OK无任何其他内容>),宝付系统在未确认商户接收通知成功后将会通过 重发机制通知商户(重发次数2~10次,请以第一次收到的支付成功的消息为准,避免进行 多次充值),同时会定时将那些已支付成功但商户未收到通知的交易取出,再次将支付成功 通知发给商户,直到商户接收成功或达到最大重发次数为止。
返回值 | 参数说明 |
---|---|
OK | 成功接收到宝付支付结果时返回OK 注:宝付将接受返回的字符自动去除前空格,为兼容文件格式差异, 宝付会匹配前5个字符,包含OK的,则认为商户接受OK,否则按 照规则补发通知。 |
3.2 查询接口
3.2.1 接口请求参数
接口请求参数是指商户通过HTTPS 请求,采用POST的方式请求宝付的接口地址,并按 照接口参数定义传送数据。宝付支付网关将以纯文本方式返回查询结果。
注:
通过订单查询接口对账及时发现和处理异常的交易,此接口没有查询页面,商户如果无法使用查询接口,也可登录商户前台直接查询。
如果参数传入有误将直接返回提示,该接口将不受理频繁的查询请求,最好每次查询时间间隔 1 分钟。
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 签名数据 | data_content | M | json字符串,具体参数如下签名数据 |
02 | 交易签名 | signature | M | 交易签名串 注意:签名之前,先将组装数据(请参照签名数据模板组装数据)然后使用发送方SM2私钥证书签名然后再进行16进制转码转大写。 |
签名数据
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 商户ID | member_id | M | 平台或商户号 测试商户号:100000178 |
02 | 终端 ID | terminal_id | M | 商户签约后通过邮件或者其他方式给予商户 测试终端号:10000001 |
03 | 订单日期 | trade_date | M | 14 位定长。 格式:年年年年月月日日时时分分秒秒 |
04 | 订单号 | trans_id | M | 支付时的订单号 |
05 | 验签方式 | verify_type | M | 固定值:10 |
06 | 加密证书序列号 | ncrptn_sn | M | 宝付公钥证书序列号,用于选择解密证书 |
07 | 签名证书序列号 | sign_sn | M | 商户公钥证书序列号,用于选择验签证书 |
应答报文
序号 | 域名 | 变量名 | 必填 | 备注 |
---|---|---|---|---|
01 | 签名数据 | data_content | M | 具体参数如下 |
02 | 签名串 | signature | M | 签名串 验签流程:签名数据组装为data_content={“member_id”: “100000178”…},然后与签名串使用宝付公钥做SM2验签 |
签名数据
参数名称 | 参数含义 | 约束 | 参数备注 |
---|---|---|---|
01 | 商户ID | member_id | M |
02 | 终端 ID | terminal_id | M |
03 | 订单日期 | trade_date | M |
04 | 订单号 | trans_id | M |
05 | 应答信息 | pay_result | M |
06 | 实际成功金额 | succ_money | O |
07 | 支付完成时间 | succ_time | O |
08 | ncrptn_sn | 加密证书序列号 | 字符串 |
09 | sign_sn | 签名证书序列号 | 字符串 |
示例
{
"data_content": {
"member_id": "100000178",
"pay_result": "N",
"succ_money": "0",
"terminal_id": "100003742",
"trade_date": "20220727153127",
"trans_id": "5004240571",
"ncrptn_sn": "1387287849",
"sign_sn": "4026178988"
},
"signature": "3045022100E9A3AA1D4E6D5A59814975206FC0817FC7704C5E30A8DF2091F19D564D26768502203B4220300E0902F3EC65666DFCF300945904F95D2D37178B33BAB042821CCBA9"
}
3.3 安全要点
如果说功能是业务的基础,那么后期的运营管理就是业务得以进展的源泉,这里的运营 管理包括了安全方面的要点。以下列举了宝付为了提高安全性,保障商户权益提供的几项安 全保障功能。
3.3.1 安全连接访问
宝付提供HTTPS安全连接方式。 HTTPS是HTTP的一种扩展,这种方式可以把数据先在本地加密然后通过网络传输,宝付接受后解密处理,这个可以避免数据被非定向包劫持后泄漏交易敏感数据。
3.3.2 密钥管理(非常重要)
密钥的目的是为了防止在交易数据被定向劫持后被篡改,导致经济损失。 密钥虽然可以防止数据被篡改的危险,但是如果密钥因为某种原因被泄露了,比如人事变动,计算机病毒,开发人员安全意识不足,注册邮箱管理不善被盗等。所以需要妥善保管 密钥,如果保留邮箱的务必也要保证邮箱的安全。密钥被泄漏了,那么熟悉宝付支付业务的 犯罪分子就可以利用你的密钥进行违法犯罪活动,造成商户的经济损失。
密钥一定要保存在安全的文件服务系统或者数据库之上,并且必须需要加密保存,防止黑客浸入等可能的威胁。
3.3.3 保密通知地址(重要)
通知地址保密的好的话,那么基本上犯罪分子是很难进行破坏性行为的,因为没有破坏目标。
通知地址切记与页面通知地址一致,这也违背了保密通知地址的原则,请切记。
3.3.4 数据校验(重要)
数据校验包含签名校验和参数校验。 数据校验一定要进行,要保证数据的完整性和正确性,防止被篡改的可能。 数据校验的精确度一定要高,一定要严格按照文档所描述的校验规则进行校验,特别是标记成功和代表金额的参数,金额等关键参数还要进行双向匹配校验,多一层校验就多一份 保障,这在金融行业尤为重要。
3.3.5 商户域名绑定
宝付支持进行商户域名绑定,目的是宝付将校验商户的订单来源以及订单的返回和通知 地址,绑定了域名,可以极大的保障商户的安全性,当然,域名保管也很重要。
3.3.6 宝付IP 来源绑定
为了提高商户的安全级别,保障商户的交易安全,宝付将无偿给合作商户提供宝付的IP,以便商户进行通知来源校验,防止虚假通知和伪造通知。
3.3.7 订单重复性校验
宝付为了确保交易能够准确的通知到商户,有可能会重复发送通知消息,为此宝付提醒商户,采取正确的防重复校验。
大多数校验通知都采取先查询后更新的方式,这种方式存在一个很大的漏洞,当多个通 知请求在很短的一个时间内达到时,查询数据有可能是脏数据,导致订单重复更新,后续工 作重复执行。
对于此种情况,宝付结合自身校验情况,分享两个校验方式。
1) 如果是单线程或者订单资源在一个共享区域,那么可以采取锁定资源的方式,每次 调用加锁,每次调用完毕解锁。
2) 大部分数据都存在数据库,宝付绝大多数都是这种情况,利用数据库的特性来控制, 在我们调用数据库更新信息时,数据库会返回给我们更新条目数,我们利用这个特性,这样 操作,当我们更新订单时,把这个订单的原始状态作为条件进行更新,当我们短时间内操作 更新时,第二次更新必然不成功,因为条件不满足了,状态变了,那么数据库在第二次就会 返回更新数量为0,这样我们就发现问题了,这就是熟称的“乐观锁”。
4.附录
4.1 支付结果
交易成功标志(Result)说明
返回值 | 说明 |
---|---|
1 | 支付成功 |
0 | 失败 |
4.2 支付结果描述
错误代码 | 错误描述 |
---|---|
01 | 支付成功 |
0000 | 支付失败 |
0001 | 系统错误 |
0002 | 订单超时 |
0011 | 系统维护 |
0012 | 无效商户 |
0013 | 余额不足 |
0014 | 超过支付限额 |
0015 | 卡号和卡密错误 |
0016 | 不合法的IP地址 |
0017 | 重复订单金额不符 |
0018 | 卡密已被使用 |
0019 | 订单金额错误 |
0020 | 支付的类型错误 |
0021 | 卡类型有误 |
0022 | 卡信息不完整 |
0023 | 卡号、卡密、金额不正确 |
0024 | 不能用此卡继续做交易 |
0025 | 订单无效 |
4.3 产品功能
4.3.1 网银支付
功能ID | 银行名称储蓄卡 | 功能ID | 银行名称信用卡 | 功能ID | 银行名称B2B |
---|---|---|---|---|---|
3001 | 招商银行(借) | 4001 | 招商银行(贷) | 6001 | 招商银行(B2B) |
3002 | 工商银行(借) | 4002 | 工商银行(贷) | 6002 | 工商银行(B2B) |
3003 | 建设银行(借) | 4003 | 建设银行(贷) | 6003 | 建设银行(B2B) |
3004 | 浦发银行(借) | 4004 | 浦发银行(贷) | 6004 | 浦发银行(B2B) |
3005 | 农业银行(借) | 4005 | 农业银行(贷) | 6005 | 农业银行(B2B) |
3006 | 民生银行(借) | 4006 | 民生银行(贷) | 6006 | 民生银行(B2B) |
3009 | 兴业银行(借) | 4009 | 兴业银行(贷) | 6009 | 兴业银行(B2B) |
3020 | 交通银行(借) | 4020 | 交通银行(贷) | 6020 | 交通银行(B2B) |
3022 | 光大银行(借) | 4022 | 光大银行(贷) | 6022 | 光大银行(B2B) |
3026 | 中国银行(借) | 4026 | 中国银行(贷) | 6026 | 中国银行(B2B) |
3032 | 北京银行(借) | 4032 | 北京银行(贷) | 6032 | 北京银行(B2B) |
3033 | 东亚银行(借) | 4035 | 平安银行(贷) | 6033 | 东亚银行(B2B) |
3034 | 渤海银行(借) | 4036 | 广发银行(贷) | 6035 | 平安银行(B2B) |
3035 | 平安银行(借) | 4037 | 上海农商银行(贷) | 6036 | 广发银行(B2B) |
3036 | 广发银行(借) | 4038 | 邮政储蓄银行(贷) | 6037 | 上海农商银行(B2B) |
3037 | 上海农商银行(借) | 4039 | 中信银行(贷) | 6038 | 邮政储蓄银行(B2B) |
3038 | 邮政储蓄银行(借) | 4040 | 杭州银行(贷) | 6039 | 中信银行(B2B) |
3039 | 中信银行(借) | 4041 | 徽商银行(贷) | 6050 | 华夏银行(B2B) |
3040 | 杭州银行(借) | 4043 | 浙商银行(贷) | 6059 | 上海银行(B2B) |
3041 | 徽商银行(借) | 4046 | 宁波银行(贷) | 6060 | 天津银行(B2B) |
3042 | 南京银行(借) | 4047 | 日照银行(贷) | ||
3043 | 浙商银行(借) | 4048 | 河北银行(贷) | ||
3046 | 宁波银行(借) | 4050 | 华夏银行(贷) | ||
3047 | 日照银行(借) | 4053 | 广州银行(贷) | ||
3048 | 河北银行(借) | 4055 | 大连银行(贷) | ||
3050 | 华夏银行(借) | 4056 | 东莞银行(贷) | ||
3051 | 威海市商业银行(借) | 4057 | 富滇银行(贷) | ||
3053 | 广州银行(借) | 4059 | 上海银行(贷) | ||
3055 | 大连银行(借) | 4060 | 北京农商银行(贷) | ||
3056 | 东莞银行(借) | 4065 | 青岛银行B2C(贷) | ||
3057 | 富滇银行(借) | 4066 | 厦门银行B2C(贷) | ||
3059 | 上海银行(借) | 4067 | 张家港农商银行B2C(贷) | ||
3060 | 北京农商银行(借) | 4068 | 苏州银行B2C(贷) | ||
3065 | 青岛银行(借) | 4069 | 九江银行B2C(贷) | ||
3066 | 厦门银行(借) | 4070 | 齐商银行(贷) | ||
3067 | 张家港农商银行(借) | 4071 | 东营市商业银行(贷) | ||
3068 | 苏州银行(借) | 4072 | 江苏银行(贷) | ||
3069 | 九江银行(借) | 4073 | 乌鲁木齐商业银行(贷) | ||
3070 | 齐商银行(借) | 4074 | 泰安市商业银行(贷) | ||
3071 | 东营市商业银行(借) | 4075 | 上饶银行(贷) | ||
3072 | 江苏银行(借) | 4076 | 宁夏银行(贷) | ||
3073 | 乌鲁木齐商业银行(借) | 4077 | 深圳农村商业银行(贷) | ||
3074 | 泰安市商业银行(借) | 4078 | 重庆农商行(贷) | ||
3075 | 上饶银行(借) | 4079 | 海南省农村信用社联合社(贷) | ||
3076 | 宁夏银行(借) | 4082 | 广西北部湾银行(贷) | ||
3077 | 深圳农村商业银行(借) | 4083 | 德州商行(贷) | ||
3078 | 重庆农商行(借) | 4084 | 长沙商行(贷) | ||
3079 | 海南省农村信用社联合社(借) | 4085 | 温州商行(贷) | ||
3082 | 广西北部湾银行(借) | 4086 | 汉口银行(贷) | ||
3083 | 德州商行(借) | 4080001 | 银联无卡支付(贷) | ||
3084 | 长沙商行(借) | 4081001 | 银联网银(贷) | ||
3085 | 温州商行(借) | ||||
3086 | 汉口银行(借) | ||||
3087 | 顺德农商行(借) | ||||
3088 | 齐鲁银行(借) | ||||
3080001 | 银联无卡支付(借) | ||||
3081001 | 银联网银(借) |