前言
1、账号信息(需授权配置)
appSecret:
2、sign加密方式**(每个接口的sign都需要重新计算)**
1.
2.
3.
4.
请使用此版本以上的包
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.4</version>
</dependency>
使用HMAC-SHA256加密算法,使用签名密钥值(appSecret)对字符串进行加密得到sign;
Go:
import (
"crypto/hmac"
"crypto/sha256"
"encoding/hex"
"fmt"
"sort"
"strings"
)
func generateSignature(parameters map[string]string, appSecret string) (string, error) {
// 步骤1:将参数名按字典升序排序
var keys []string
for key := range parameters {
if key != "sign" {
keys = append(keys, key)
}
}
sort.Strings(keys)
// 步骤2:构建参数字符串
var paramString strings.Builder
for _, key := range keys {
paramString.WriteString(key)
paramString.WriteString("=")
paramString.WriteString(parameters[key])
paramString.WriteString("&")
}
paramStringStr := paramString.String()
paramStringStr = strings.TrimSuffix(paramStringStr, "&")
// 步骤4:使用HMAC-SHA256加密算法对源串进行加密
key := []byte(appSecret)
input := []byte(paramStringStr)
mac := hmac.New(sha256.New, key)
mac.Write(input)
hmacData := mac.Sum(nil)
// 将字节数组转换为十六进制字符串
result := hex.EncodeToString(hmacData)
return result, nil
}
Python:
import hashlib
import hmac
from collections import OrderedDict
def generate_signature(parameters, app_secret):
# 步骤1:将参数名按字典升序排序
sorted_params = OrderedDict(sorted(parameters.items()))
# 步骤2:构建参数字符串
param_string = ''
for key, value in sorted_params.items():
if key != 'sign':
param_string += f'{key}={value}&'
param_string = param_string[:-1]
# 步骤4:使用HMAC-SHA256加密算法对源串进行加密
secret_key = bytes(app_secret, 'utf-8')
input_data = bytes(param_string, 'utf-8')
hmac_obj = hmac.new(secret_key, input_data, hashlib.sha256)
hmac_data = hmac_obj.digest()
# 将字节数组转换为十六进制字符串
result = ''.join(f'{b:02x}' for b in hmac_data)
return result
Java
public static String generateSignature(Map<String, String> parameters, String appSecret) throws Exception {
// 步骤1:将参数名按字典升序排序
TreeMap<String, String> sortedParams = new TreeMap<>(parameters);
// 步骤2:构建参数字符串
StringBuilder paramString = new StringBuilder();
for (Map.Entry<String, String> entry : sortedParams.entrySet()) {
if (!"sign".equals(entry.getKey())) {
paramString.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
}
paramString.deleteCharAt(paramString.length() - 1);
// 步骤4:使用HMAC-SHA256加密算法对源串进行加密
return hmacSha256(paramString.toString(), appSecret);
}
// HMAC-SHA256加密
private static String hmacSha256(String input, String key) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
mac.init(secretKey);
byte[] hmacData = mac.doFinal(input.getBytes(StandardCharsets.UTF_8));
StringBuilder result = new StringBuilder();
for (byte b : hmacData) {
result.append(String.format("%02x", b));
}
return result.toString();
}
修改于 2024-05-22 07:07:26