一、接口说明
方案为商户使用的用户提供“通用缴款支撑服务”,提供POS缴款方式,为缴款人提供更丰富、更灵活的缴款选择,让缴款更方便。
二、 缴款流程
2.1 挂件展现
2.1.1 说明
用户访问商户页面时,商户页面通过加载缴款服务挂件提供thirdpay_widget.js接口,调用thirdpay_widget.init()方法。将要显示挂件位置的“Div”的id、商户号、金额、挂件类型、商户后端生成charge对象的URL等参数传递给缴款服务挂件,缴款服务挂件通过页面渲染展现对应的可视化挂件。
thirdpay_widget.js为我方提供的挂件地址:
测试环境为:
http://debug.epayservice.cn/thirdpay/resources/widget/js/thirdpay_widget.js
2.1.2 缴款挂件接口
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
container | 显示挂件位置div的id | String | 是 | |
merchant_no | 商户号 | String | 是 | |
merchant_order_no | 商户订单号 | String | 是 | |
amount | 订单金额 | Integer | 是 | 单位 分 |
widget_param | 控件参数 | String | 否 | 见业务参数文档 |
subject | 商品标题 | String | 否 | |
body | 商品描述 | String | 否 | |
charge_url | 创建Charge对象的 URL | String | 是 | |
charge_param | 透传参数 | String | 否 | |
device_type | 设备类型 | String | 是 | pos |
effective_time | 有效时间 | String | 否 | 1m~15d,m-分钟,h-小时,d-天 默认当天1c,24点失效 |
version_no | 版本编码 | String | 是 | 1.1新接口 |
2.1.3 Demo
2.2 调用商户后端
2.2.1 说明
用户选择相应的支付方式,点击“确认支付”时缴款服务挂件会发起请求,调用商户页面传到js接口中的charge_url地址,并将商户号、控件类型参数等通过POST请求到商户后端服务商户后端需要接收相关参数,调用SDK中生成create的方法,通过商户后端对参数进行加密请求到我方后端。
统一接口为
com.bosssoft.sdk.model.Charge.create(chargeMap,serviceUrl,privateKey);
其中chargeMap为接口参数,见下方接口参数章节。
serviceUrl为我方提供的接口地址,在挂件js中已指定。
privateKey为数据传输时签名加密所需使用的商户私钥。
2.2.2 接口参数
chargeMap参数内容:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
merchant_no | 商户号 | String | 是 | |
widget_content | 订单内容 | String | 是 | 转出时需使用私钥签名 |
front_url | 前端通知地址 | String | 否 | |
back_url | 后端通知地址 | String | 是 | |
extra | 扩展参数 | String | 否 |
2.2.3 接口响应
接口返回值统一使用String类型接收,再转为相应的值集类型进行后续处理。
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
success | 返回状态 | Boolean | 是 | true:成功 false:失败 |
extraInfo | 返回跳转的信息 | String | 否 | 发生异常时字段为空 |
msg | 返回的描述信息 | String | 是 |
2.2.4 Demo
2.3 跳转支付
缴款服务后端返回跳转支付所需的订单信息到商户后端,商户后端将信息返回到js接口,js接口自动进行跳转支付。
2.4 前台结果通知
2.5 后台结果通知
2.5.1 说明
支付后会异步给商户后端返回通知,作为缴款的记账依据;
通过HttpClient发送POST请求。
2.5.2 接口参数
解析request请求,将输入流转换成StringBuffer类型的字符串,然后用私钥进行解密,调用SDK封装的统一解密方法,转成json对象,根据接口字段来获取商户对账需要的字段,如下表:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
merchant_no | 商户号 | String | 是 | |
merchant_order_no | 商户订单号 | String | 是 | |
amount | 支付金额 | Integer | 是 | 单位 分 |
confirm_time | 缴款时间 | String | 是 | yyyy-MM-dd hh:mm:ss |
result | 支付结果 | String | 是 | 200 成功 500 失败 |
result_des | 支付结果描述 | String | 否 | 失败时填写失败原因 |
extra | 扩展参数 | String | 是 |
extra参数说明:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
channel | 缴款渠道 | String | 否 | |
channel_name | 缴款渠道名称 | String | 否 | |
channel_trade_no | 渠道订单号 | String | 否 | |
third_trade_no | 第三方订单号 | String | 否 | |
payer_id | 付款人id | String | 否 | |
bill_batch_code | 票据代码 | String | 否 | |
bill_no | 票据号码 | String | 否 | |
bill_random | 票据校验码 | String | 否 | |
einvoice_url | 电子票查看地址 | String | 否 | |
einvoice_data | 电子票数据 | String | 否 |
2.5.3 接口响应
统一解密的方法
com.bosssoft.sdk.model.Message.decryptByPrivateKey(RsaStr,
privateKey);
RsaStr为1中解析出加密后的字符串;
privateKey为数据传输时签名加密所需使用的商户私钥。
商户后端须给我方响应成功或失败,具体响应字段如下:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
result | 响应结果 | String | 是 | 200 成功 500 失败 |
result_des | 响应结果描述 | String | 否 | 失败时填写失败原因 |
extra | 扩展参数 | String | 否 |
2.5.4 Demo
三、附录
3.1、Demo
引入js
调用js接口