public final class XPayIntlSigner extends Object
工具严格按开发者平台五行协议,对 HTTP 方法、实际请求 URL、时间戳、Nonce 和原始 Body 计算 HMAC-SHA256。方法不保存密钥、不规范化 Query、不改写 Body,也不访问网络、缓存或数据库;非法输入 一律 fail-close 抛出异常,避免生成与网关解释不一致的签名。
| Modifier and Type | Method and Description |
|---|---|
static String |
buildSignPayload(String requestMethod,
String requestUrl,
String timestamp,
String nonce,
String rawBody)
构造五行请求签名原文。
|
static boolean |
constantTimeEquals(String left,
String right)
以常量时间比较两个签名字符串。
|
static String |
hmacSha256Hex(String secret,
byte[] payload)
计算原始字节的 HMAC-SHA256 十六进制值。
|
static String |
hmacSha256Hex(String secret,
String payload)
计算字符串原文的 HMAC-SHA256 十六进制值。
|
static String |
sign(String apiSecret,
String requestMethod,
String requestUrl,
String timestamp,
String nonce,
String rawBody)
生成请求
Signature Header。 |
public static String sign(String apiSecret, String requestMethod, String requestUrl, String timestamp, String nonce, String rawBody)
Signature Header。
本方法无事务、缓存、异步任务或共享可变状态,可并发调用。请求 URL 必须是实际发送的 path 加原始
Query,例如 /intl/v1/payment/order/query?merchantOrderNo=DEMO_PAY_202606010001;
签名过程中不会排序 Query。余额查询不传筛选时,实际请求 URL 为 /intl/v1/balance/query。
apiSecret - 平台下发的 API Secret,不得记录日志requestMethod - 实际 HTTP 方法,例如 GET 或 POSTrequestUrl - 实际请求 path 与原始 Query,不包含域名timestamp - Unix 秒级时间戳字符串nonce - 同一 API Key 下本次请求唯一的随机串rawBody - 实际发送的 UTF-8 原始 Body;GET 传空字符串v1= 加 64 位小写十六进制 HMAC-SHA256XPayIntlException - 密钥为空、签名字段含换行或加密算法不可用时抛出public static String buildSignPayload(String requestMethod, String requestUrl, String timestamp, String nonce, String rawBody)
每一行后都追加一个 \n,包括最后一行。方法保持请求 URL、Query 顺序和 Body 内容原样;
任一签名元数据包含 CR/LF 时 fail-close,防止行边界歧义。
requestMethod - 实际 HTTP 方法requestUrl - 实际请求 path 与原始 Querytimestamp - Unix 秒级时间戳字符串nonce - 本次请求随机串rawBody - 实际发送的原始 Body;空 Body 可传空字符串XPayIntlException - URL 非相对请求目标或字段存在换行歧义时抛出public static String hmacSha256Hex(String secret, String payload)
字符串按 UTF-8 编码;方法无网络、事务、缓存或异步副作用,可并发调用。密钥为空或算法异常时 fail-close 抛出异常。
secret - HMAC 密钥payload - 待签名字符串;null 按空字符串处理v1= 前缀XPayIntlException - 密钥为空或加密算法不可用时抛出public static String hmacSha256Hex(String secret, byte[] payload)
该重载供 API 响应和 Webhook 对精确 Body 字节验签使用,不进行字符集转换或 JSON 解析;可安全并发 调用。密钥为空或算法异常时 fail-close 抛出异常。
secret - HMAC 密钥payload - 待签名原始字节;null 按空字节数组处理v1= 前缀XPayIntlException - 密钥为空或加密算法不可用时抛出Copyright © 1980. All rights reserved.