签名生成

说明

商户可以按照下述步骤生成请求的签名,平台会在收到请求后进行签名的验证。如果签名验证不通过,将会拒绝处理请求,并返回相应的业务状态码

准备

商户需要注册有商户号,并通过商户后台创建支付应用,获取应用 APP_IDAPP_SECRECT

条件

本文档所有 POST 方法的接口都需要验证签名,其他接口暂不需验证。

构造签名串

签名串一共有四行,每一行为一个参数。行尾以 \n(换行符,ASCII 编码值为 0x0A)结束,最后一行不用加\n。如果参数本身以 \n结束,也需要附加一个\n

URL\n
请求时间戳\n
请求随机串\n
请求报文主体

我们以查询订单接口为例:

第一步,获取请求的绝对 URL,并去除域名部分得到参与签名的 URL。如果请求中有查询参数,URL 末尾应附加有'?'和对应的查询字符串。

/v1/transaction/query

第二步,获取发起请求时的系统当前时间戳(毫秒),即格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数,作为请求时间戳。平台会拒绝处理很久之前发起的请求,请商户保持自身系统的时间准确。

第三步,生成一个 32 位随机字符串

第四步,获取请求中的请求报文主体(request body)。

第五步,按照前述规则,构造的请求签名串为:

加密签名串

下面以 javascript 加密过程为例:

加密后示例:

拼接签名信息

签名信息的拼接格式如下: app_id=APP_ID,mch_id=商户ID,nonce_str=第三步生成的随机字符串,timestamp=第二步生成的时间戳,signature=加密签名串

设置 HTTP 头

本文档 API 通过 HTTP Authorization 头来传递签名。 Authorization认证类型签名信息两个部分组成,目前认证类型 仅支持 TTPAY-AES-256-ECB

Authorization 头的示例如下:(注意,示例因为排版可能存在换行,实际数据应在一行)

最终我们可以组一个包含了签名的 HTTP 请求了。

演示代码

Last updated