MD5 签名鉴权
请求参数按 key 升序拼接后 MD5,服务端 JeepayKit.getSign 同源算法,SDK 开箱即用。
| 环境 | 地址 | 说明 |
|---|---|---|
| 支付网关 | http://<服务器IP>:9216 | jeepay-payment 服务,所有对外支付/退款/转账/分账 API |
| 运营平台 | http://<服务器IP>:10900 | jeepay-ui-manager,商户/应用/API 密钥管理 |
| 商户平台 | http://<服务器IP>:10901 | jeepay-ui-merchant |
| 收银台 | http://<服务器IP>:10903 | jeepay-ui-cashier |
| 对接文档站 | http://<服务器IP>:10902 | 本站 |
生产环境建议通过 nginx 反向代理绑定域名并启用 HTTPS。
POST,请求体为 application/json(除特别说明外);{ "code": 0, "msg": "SUCCESS", "data": { ... }, "sign": "..." };code = 0 表示成功,其余为业务错误,见 错误码表;sign 时,商户侧应使用相同算法与密钥验签。| 密钥 | 用途 | 获取/重置入口 |
|---|---|---|
appSecret | 商户应用 API 密钥,用于支付/退款/转账/分账接口签名 | 运营平台-商户应用 POST /api/mchApps/{appId}/resetSecret,或商户平台-应用管理 |
apiPaySecret | 服务商平台商 API 代付密钥 | 服务商平台 POST /api/isvInfo/{isvNo}/resetApiSecret |
X-Api-Key | 投诉单查询专用密钥 | 服务商投诉 API 密钥(t_isv_info.complaint_api_key,请求头携带);投诉回复/完结走 appSecret 签名 |
所有支付类接口请求体必须包含 4 个公共字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| version | 是 | 版本号,固定 1.0 |
| signType | 是 | 签名类型,固定 MD5 |
| reqTime | 是 | 请求时间,yyyyMMddHHmmss 格式 |
| sign | 是 | 签名值(见下方算法) |
签名步骤(与服务端 JeepayKit.getSign 完全一致):
sign 字段本身,过滤掉值为 null 或空串 "" 的参数;key=value& 格式拼接;key=<你的密钥>(密钥即 appSecret);sign,放回请求体。示例:请求参数
{
"version": "1.0", "signType": "MD5", "reqTime": "20261105120000",
"mchNo": "M1690858842671", "appId": "appId-demo",
"mchOrderNo": "DEMO-20261105001", "wayCode": "qr_cashier",
"amount": 100, "currency": "CNY",
"subject": "Demo商品", "body": "demo test",
"notifyUrl": "https://your.domain/notify"
}密钥 your-app-secret,拼接排序后待签名串为:
appId=appId-demo&amount=100&body=demo test¤cy=CNY&mchNo=M1690858842671&mchOrderNo=DEMO-20261105001¬ifyUrl=https://your.domain/notify&reqTime=20261105120000&subject=Demo商品&signType=MD5&version=1.0&key=your-app-secretMD5 后得到(真实算法输出):
sign = BC6312FEE27C78491B1D11200925BD1Fcurl -X POST http://<服务器IP>:9216/api/pay/unifiedOrder \
-H 'Content-Type: application/json' \
-d '{
"version":"1.0",
"signType":"MD5",
"reqTime":"20261105120000",
"mchNo":"M1690858842671",
"appId":"appId-demo",
"mchOrderNo":"DEMO-20261105001",
"wayCode":"qr_cashier",
"amount":100,
"currency":"CNY",
"subject":"Demo商品",
"body":"demo test",
"notifyUrl":"https://your.domain/notify",
"sign":"BC6312FEE27C78491B1D11200925BD1F"
}'Java 用户直接使用 SDK
jeepay-java-sdk 的 SignUtils / JeepayClient 已封装上述全部步骤并自动验签,无需手写签名。
支付/退款/转账成功后,平台会向请求中传入的 notifyUrl 发送 application/x-www-form-urlencoded 表单参数(含 sign)。商户侧验签步骤:
sign 字段;sign 忽略大小写比对,一致方可确认订单,并响应 success 文本。完整演示见仓库 demos/java 的 Main.java 第三节。
仓库内 /www/wwwroot/jeepay/demos/java 提供可运行 Demo(统一下单、查单、回调验签),见 Java Demo。