关于反校验
反校验流程说明
为确保接口交互安全,部分接口在商户发起请求时 Alchemy Pay 会反向发起请求,商户在收到请求后需响应正确的结果才可进行下一步操作,具体如下:
反校验接口列表
接口名称 | 接口地址 |
---|---|
创建虚拟卡【接口】 | /open/api/card/create |
虚拟卡存款(充值)【接口】 | /open/api/card/deposit |
卡片退款【接口】 | /open/api/card/withdraw/refund |
删除卡片【接口】 | /open/api/card/cancel |
商户在测试/上线前需提供以上 4 个接口反校验地址,否则无法测试/上线
反校验接口交互流程
以创建虚拟卡接口为例说明交互流程,其它 3 个接口交互流程一致。
接口规则
- 请求方式:GET
- 请求地址:商户提供
- 请求参数
参数名 | 类型 | 说明 |
---|---|---|
orderNo | String | 商户发起请求时上传的客户交易流水号,原样返回 |
商户在收到 Alchemy Pay 请求后需要响应以下参数
响应头
参数名称 | 参数类型 | 说明 |
---|---|---|
ach-access-key | string | key |
ach-access-timestamp | string | 13 位时间戳 |
ach-access-sign | string | 签名,参考反校验签名说明 |
响应内容
success
商户在收到 Alchemy Pay 请求后需正确返回签名才能继续进行下一步操作
反校验签名说明
(1)生成待签名字符串,固定顺序:timestamp+requestMethod+requestPath+bodyString,示例:
商户提供的反校验地址:https://www.xxxxx.com/card/reverse/check
时间戳:1700549311596
响应内容:success
待签名字符串:1700549311596GET/card/reverse/checksuccess
(2)生成签名
public class ReverseSign {
public static String sign(String content, String secretkey) throws NoSuchAlgorithmException, InvalidKeyException {
Base64.Encoder base = Base64.getEncoder();
String signVal = base.encodeToString(sha256(content.getBytes(StandardCharsets.UTF_8), secretkey.getBytes(StandardCharsets.UTF_8)));
return signVal;
}
public static byte[] sha256(byte[] message, byte[] secret) throws NoSuchAlgorithmException, InvalidKeyException {
Mac sha256_HMAC = Mac.getInstance("HmacSha256");
SecretKeySpec secretKey = new SecretKeySpec(secret, "HmacSha256");
sha256_HMAC.init(secretKey);
return sha256_HMAC.doFinal(message);
}
public static void main(String[] args) throws Exception {
String content = "1700549311596GET/card/reverse/checksuccess";
String secretkey = "XXXXX";
String sign = sign(content, secretkey);
System.out.println(sign);
}
}
Updated about 2 months ago