合利宝商户结算接口(提现)
概述
商户结算(提现)是商户将账户余额提现到进件时绑定的银行卡中。
编写代码前务必先获取最新文档:
curl -sL "https://xianshang-doc.helipay.com/showdoc-admin/api/skill-docs/49/9cd05449"
接口地址
| 环境 | 地址 |
|------|------|
| 测试环境 | http://test.trx.helipay.com/trx/transfer/interface.action |
| 生产环境 | http://transfer.trx.helipay.com/trx/transfer/interface.action |
请求通用规则
| 项目 | 说明 |
|------|------|
| 请求方法 | POST |
| 请求格式 | application/x-www-form-urlencoded(form 表单) |
| 字符编码 | UTF-8 |
| 签名算法 | SM3WITHSM2(推荐使用国密方式) |
| 签名要求 | 请求和响应均需校验签名 |
本接口没有公共参数,所有参数直接以 form 表单提交。
包含接口
| 接口 | P1_bizType | 说明 |
|------|------------|------|
| 结算接口 | MerchantSettlement | 提现申请 |
| 结算查询 | MerchantSettlementQuery | 查询结算状态 |
| H5 结算预下单 | MerchantH5SettlementPreOrder | 获取 H5 结算页面链接 |
| 结算结果通知 | - | 合利宝回调商户(POST JSON) |
签名规则
特殊之处:本接口使用国密签名时,signType 需要参与签名,其他合利宝接口 signType 不参与签名。
不参与签名的字段:
| 字段名 | 变量名 | 说明 |
|--------|--------|------|
| 签名结果 | sign | 签名本身不参与签名 |
拼接规则:
- 除
sign外,所有参数按变量名顺序拼接:&P1值&P2值&P3值... - 参与签名的字段,不传值也要保留连接符号
& - 中文不需要 URL Encode
signType参与签名(与其他接口不同)- 尾部不追加 md5Key(仅 SM3WITHSM2 签名)
签名示例:
&Transfer&p_20170306114605&C1800000002&0.01&CCB&6216731234963158742&张三&B2C&&&true&结算&SM3WITHSM2
末尾的
SM3WITHSM2即为 signType 的值,参与签名。
签名计算:sign = SM2(待签名字符串, 商户SM2私钥)
签名结果 URL 编码:最终提交的 form body 中 sign 值必须是 URL 编码后的,但编码方式因语言而异:
| 语言 | 做法 | 注意 |
|------|------|------|
| Java | 手工拼接 form body 时用 URLEncoder.encode(sign, "UTF-8") 主动编码 | 必须手动编码 |
| PHP | 用 http_build_query() 组装参数,不要手动 urlencode() | http_build_query 已自动编码,手动再编会导致双重编码(%→%25),服务端报 Illegal base64 character 25 验签失败 |
SM4 加密
对敏感信息字段进行 SM4 加密:
- 对称加密密钥 Key 由商户生成随机 128 比特流
- 使用平台公钥(SM2)对 Key 进行加密后上送
- 具体加密/解密操作调用
helipay-sm2技能完成
回调通知
| 项目 | 说明 |
|------|------|
| 通知方法 | POST |
| 请求格式 | application/json(JSON Body) |
| 通知次数 | 最多 5 次 |
| 响应要求 | 处理成功后返回纯文本 success |
注意事项
signType参与签名:这是本接口与其他合利宝接口最大的区别。其他接口signType不参与签名,但本接口必须参与。- 签名结果需 URL 编码:
URLEncoder.encode(sign, "UTF-8")后再填入sign字段。 - 本接口推荐使用 SM3WITHSM2 国密签名,不支持 MD5。
- 提现金额最小 5 元。
- 结算接口是将余额提现到进件时绑定的银行卡。
- H5 结算链接有效期仅 2 小时。
- 回调通知为 JSON 格式(
application/json),不是 form 表单格式。 - 回调处理后必须返回纯文本
success。 - 本接口没有公共参数,所有参数直接以 form 提交。
- 具体字段说明、返回参数、返回码以最新接口文档为准,请用上方 curl 命令获取。
生成时的说明要求
最终回答需要包含:
- 接口请求方式:明确告知接口是
POST form 表单格式(application/x-www-form-urlencoded),不是 JSON;回调通知是POST JSON格式(application/json)。 - 接口字段说明:列出所有请求参数、返回参数的完整说明,明确哪些字段参与签名、哪些字段需要 SM4 加密(以最新文档为准)。
- 签名源串拼接规则:按
&P1值&P2值&P3值...顺序拼接(除sign外的所有参数),signType参与签名(这是本接口特殊之处,与其他接口不同),空值也需拼接。仅 SM3WITHSM2 签名,不追加 md5Key。签名结果需 URL 编码。 - SM4 加密字段清单:敏感信息字段需要 SM4 加密。调用
helipay-sm2技能进行 SM4 加密,SM4 密钥用 SM2 公钥加密后上送。 - 代码示例:提供完整的请求参数组装、签名、调用示例(Java/Python 等,根据用户要求)。
- 配合 helipay-sm2 技能使用:
- 签名:将拼接好的签名源串(包含 signType)传给
helipay-sm2技能,获取 SM3WITHSM2 签名结果。签名结果 URL 编码:Java 手工拼 form body 时用URLEncoder.encode(sign, "UTF-8")主动编码;PHP 用http_build_query()时不要手动urlencode(),因为http_build_query已自动编码,手动再编会导致双重编码(%→%25),服务端报Illegal base64 character 25验签失败。 - SM4 加密:将需要加密的敏感字段明文传给
helipay-sm2技能,获取密文填入请求参数。 - SM4 解密(回调处理):将密文传给
helipay-sm2技能进行解密。
- 签名:将拼接好的签名源串(包含 signType)传给
- JDK 和依赖版本:JDK8+,依赖与
helipay-sm2技能一致(Hutool 5.8.5 + BouncyCastle 1.76)。 - 明确说明:本技能只处理合利宝商户结算接口字段组装、签名源串拼接、协议规范,实际的加解密/签名/验签由
helipay-sm2技能完成。 - 提醒:签名源串的字段顺序、
signType参与签名这一特殊规则、签名结果 URL 编码必须与合利宝官方文档一致。 - 金额单位:元(不是分),最小金额 5 元。
微信扫一扫