开发文档

首页/开发文档

开放接口文档

收银台下单、API 下单、订单查询、退款、通知、签名和 WordPress 插件

内容与商户控制台保持同步。所有接口和签名都必须由商户服务端调用,不要在浏览器暴露商户 KEY。

notifyUrl 非必填;未配置回调时,商户必须通过查询订单接口主动确认支付结果。

当前支持:扫码支付、JSAPI 支付和支付宝 H5 支付;支付宝 H5 支付支持全部主体,暂不支持微信外浏览器 H5 支付。

主网关https://jpay.hzjianban.com
备用网关(支持 IPv6)https://api.jian-pay.com

关闭订单 / 支付截止时间

关闭未付款订单;已支付订单应使用退款接口。

商户关单接口POST /open/payment/pay/close
参数类型必填说明
商户号 clientNostring是当前订单所属商户号。
orderIdstring二选一简付平台订单号,即下单接口返回的 orderId。
merchantOrderNostring二选一商户下单时传入的 orderNo;与 orderId 至少填写一个。
timestampstring否请求时间戳,建议传。
signstring是MD5 签名结果,小写。
sign_typestring是固定传 MD5。

服务端签名请求

// Node.js 18+ 服务端 ES 模块(.mjs);KEY 仅通过环境变量读取
import crypto from 'node:crypto';
if (!process.env.JIANPAY_CLIENT_NO || !process.env.JIANPAY_KEY) throw new Error('请配置商户号和 KEY');
const data = {
  clientNo: process.env.JIANPAY_CLIENT_NO,
  merchantOrderNo: '原商户订单号',
  timestamp: Math.floor(Date.now() / 1000)
};
const content = Object.keys(data).sort().map(k => k + '=' + data[k]).join('&');
data.sign = crypto.createHash('md5').update(content + process.env.JIANPAY_KEY, 'utf8').digest('hex');
data.sign_type = 'MD5';
const result = await fetch('https://jpay.hzjianban.com/open/payment/pay/close', {
  method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data)
}).then(r => r.json());
// status=4 且 localClosed=true:汇付订单已在平台取消,业务需处理后续真实付款通知。
// status=4 且 closeConfirmed=true:已获得安全关单确认。
console.log(result);

响应参数(其余字段同查询订单)

字段类型必返说明
codenumber是1000 表示请求处理成功,关单结果以订单状态为准。
messagestring是返回消息。
data.orderIdstring是简付平台订单号。
data.merchantOrderNostring是商户下单时传入的 orderNo。
data.clientNostring是订单所属商户号。
data.amountnumber是订单金额,单位分。
data.statusnumber是订单状态:0-待发起,1-处理中,2-支付成功,3-支付失败,4-已关闭。
data.statusTextstring是订单状态说明。
data.serverTimenumber是服务端当前 Unix 秒级时间戳;倒计时应以此校时,不依赖浏览器时区或设备时钟。
data.payExpireAtnumber/null是保存的支付截止时间(Unix 秒);历史订单无可靠截止时间时返回 null。到期不等于关单已经确认。
data.closeStatusstring是NONE 未申请关单;PROCESSING 关单处理中;CLOSED 平台已关闭或关单已确认,结合 localClosed、closeConfirmed 区分;PAID 订单已付款。
data.closeConfirmedboolean是是否已获得安全关单确认,需同时检查 status=4。汇付仅本地关闭时为 false,不能据此保证上游已关闭。
data.localClosedboolean是是否为汇付平台本地关闭;true 时不再发起汇付关单,但后续真实支付成功仍会更新订单并通知商户。
data.errorMessagestring否支付失败或订单关闭的原因,无内容时为空字符串。

关闭成功示例

{
  "code": 1000,
  "message": "success",
  "data": {
    "orderId": "PAY202610170001",
    "merchantOrderNo": "ORDER001",
    "clientNo": "JP26070612345678",
    "amount": 100,
    "status": 4,
    "statusText": "已关闭",
    "errorMessage": "订单已由商户关闭",
    "payExpireAt": 1792209900,
    "serverTime": 1792209901,
    "closeStatus": "CLOSED",
    "closeConfirmed": true,
    "localClosed": false
  }
}

汇付本地关闭示例

{
  "code": 1000,
  "message": "success",
  "data": {
    "orderId": "PAY202610200001",
    "merchantOrderNo": "ORDER002",
    "clientNo": "JP26070612345678",
    "amount": 100,
    "status": 4,
    "statusText": "已关闭",
    "errorMessage": "订单已超时关闭",
    "closeStatus": "CLOSED",
    "closeConfirmed": false,
    "localClosed": true
  }
}
区分平台关闭与渠道确认
  • code=1000 仅表示请求处理成功。status=4 且 closeConfirmed=true 表示已获得安全关单确认。
  • 汇付订单采用平台本地关闭,不再调用汇付关单接口。status=4、localClosed=true 表示平台已停止该订单支付入口,closeConfirmed=false,不代表上游交易已经关闭。
  • 本地关闭后仍会接收真实支付结果;如随后付款成功,订单会更新为支付成功并通知商户。库存处理需覆盖迟到付款,按业务决定履约或退款。
  • closeStatus=PROCESSING 时仍可能付款成功,不要释放库存;稍后通过 /open/payment/pay/info 查询。
  • status=2 或 closeStatus=PAID 表示订单已付款,不能再取消支付,应按需走退款。
  • 关单不发送支付成功回调;重复关单安全,原订单号不可重新用于下单。
支付截止时间
  • 下单时可传 payExpireAt(Unix 秒级时间戳),范围为未来 1 分钟至 24 小时;不传默认 15 分钟,重试不能延长。
  • 5 分钟有效期:在服务端计算 Math.floor(Date.now() / 1000) + 300,并参与签名。
  • 倒计时使用 payExpireAt 和 serverTime,不需要按时区加减时间;到期后仍需查询并确认关单结果。