象盈收3.0-开放平台
    • 签名与验签说明
    • SDK使用说明
    • 支付类接口
      • 统一下单
        POST
      • 查询订单
        POST
      • 关闭订单
        POST
      • 支付通知
        POST
      • 统一退款
        POST
      • 查询退款
        POST
      • 退款通知
        POST

    签名与验签说明

    开放平台系统接口支持 MD5 与 RSA2 两种签名方式,商户通过请求参数 signType 指定签名方式。

    一、签名方式说明#

    signType算法商户签名密钥系统验签密钥系统响应签名密钥
    MD5MD5摘要 + 十六进制大写开发者机构密钥(devSecret)同左开发者机构密钥(devSecret)
    RSA2SHA256WithRSA商户 RSA 私钥(PKCS8格式)开发者机构配置的商户 RSA 公钥(X509格式)支付系统 RSA 私钥(PKCS8格式)

    二、待签名字符串构造规则(两种方式通用)#

    第一步: 设所有发送或者接收到的数据为集合M,将集合M内值为非null且非空字符串的参数按 key=value& 格式逐项拼接(每项末尾保留 & 分隔符),再对拼接后的 key=value& 字符串整体按忽略大小写的字典序从小到大排序(等价于 JDK String.CASE_INSENSITIVE_ORDER),排序后依次拼接得到字符串stringA。
    特别注意以下重要规则:
    ◆ 如果参数的值为空(null 或空字符串)不参与签名;
    ◆ 参数名按忽略大小写的字典序从小到大排序(字母比较不区分大小写,等价于 JDK String.CASE_INSENSITIVE_ORDER);
    ◆ 验证调用返回或支付中心主动通知签名时,传送的 sign 参数不参与签名,将生成的签名与该 sign 值作校验;
    ◆ 支付中心接口可能增加字段,验证签名时必须支持增加的扩展字段。
    第二步: 根据签名方式不同,在 stringA 基础上生成签名:
    MD5:在 stringA 最后拼接上密钥,即 stringA + "key=" + 密钥,对结果做 MD5 运算,并将得到的十六进制字符串所有字符转换为大写,得到 sign 值;
    RSA2:直接对 stringA 使用商户私钥做 SHA256WithRSA 签名(不拼接密钥),签名结果做 Base64 编码,得到 sign 值。

    三、MD5 签名#

    3.1 签名流程#

    stringA  = "amount=1&appId=xxx&body=商品描述&...&wayCode=ALI_BAR&"
    stringSignTemp = stringA + "key=" + 密钥
    sign = MD5(stringSignTemp).toUpperCase()

    3.2 Java 示例#

    3.3 示例#

    如请求支付系统参数如下:
    待签名值:
    amount=1&appId=6447428682ca7458118af79f&body=商品描述&channelExtra={"authCode":"284957415846666792"}&clientIp=192.166.1.132&currency=CNY&mchNo=M1682391685&mchOrderNo=mho1694051705945&notifyUrl=https://www.jeequan.com&reqTime=1694051706&signType=MD5&subject=商品标题&version=1.0&wayCode=ALI_BAR&key=商户密钥
    签名结果:924065BA077FA461A9B06D2E76E9ED3C(32位大写十六进制)

    四、RSA2 签名#

    4.1 签名流程#

    stringA = "amount=1&appId=xxx&body=商品描述&...&wayCode=ALI_BAR&"
    sign = Base64( SHA256WithRSA(stringA, 商户RSA私钥[PKCS8格式]) )
    密钥格式要求:
    商户私钥:PKCS8 格式,Base64 编码字符串(不含 PEM 头尾标记);
    商户公钥:X509 格式,Base64 编码字符串,配置到运营管理平台的开发者机构中。

    4.2 Java 示例(签名)#

    4.3 Java 示例(验签)#

    五、响应验签(商户侧)#

    业务处理成功的响应会携带 sign 字段,商户应验证响应签名以防篡改:
    signType系统签名方式商户验签密钥
    MD5使用开发者机构密钥(devSecret)对响应 data 按相同规则计算 MD5开发者机构密钥(devSecret)
    RSA2使用支付系统 RSA 私钥对响应 data 做 SHA256WithRSA 签名支付系统 RSA 公钥(由平台提供)
    验签步骤:
    1.
    取出响应中的业务数据 data,移除 sign 字段;
    2.
    按第二章规则构造待验签字符串;
    3.
    MD5:本地重算并与 sign 忽略大小写比对;RSA2:使用系统公钥验签。
    支付异步通知的验签规则与响应验签一致。

    六、注意事项#

    1.
    字符编码统一为 UTF-8;
    2.
    金额为整数,单位为分,不能带小数;
    3.
    时间参数均为精确到毫秒的 13 位时间戳;
    4.
    参与签名的字段以请求对象序列化后的 JSON 为准,值为空(null / 空字符串)的字段不参与签名;
    5.
    sign 字段本身不参与签名计算;
    6.
    接口可能新增字段,验签时请勿按固定字段列表过滤,应对收到的全部非空字段参与验签;
    7.
    RSA2 密钥请使用 PKCS8(私钥)/ X509(公钥)格式的 Base64 字符串,不含 -----BEGIN/END----- 头尾标记;
    8.
    MD5 密钥、RSA2 公钥请妥善保管,切勿泄露。
    修改于 2026-08-14 06:15:41
    下一页
    SDK使用说明
    Built with