为保证请求安全,所有 API 调用均需携带签名参数 sign。签名采用 MD5 算法,仅需 pid 和 appkey 两个身份字段,业务参数不参与签名。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
pid | int/string | 是 | 用户ID(用户中心可见) |
sign | string | 是 | 签名值,规则见下 |
核心设计:签名只验证调用者身份,不验证业务参数。这样开发者无需关心接口参数变化,接入成本更低。
签名步骤:
pid 和 appkey 拼接成字符串:"pid=" + pid + appkeysign 参数,与 pid 一起发送示例:假设 pid=1000,appkey=tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA,则:
# 步骤 1:拼接字符串 拼接结果:pid=1000tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA # 步骤 2:对拼接结果做 MD5 MD5 签名:6a1e9f2d3c4b5a6e7f8g9h0i1j2k3l4m
以下示例展示如何生成签名。传入 pid 和 appkey 后,函数返回 sign 字符串。
<?php
/**
* PHP 签名示例
* 功能:根据 pid 和 appkey 生成 sign
*/
// 示例参数
$pid = '1000'; // 用户ID,用户中心可见
$appkey = 'tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA'; // appkey,用户中心-API设置获取
/**
* 生成签名
*
* 签名规则:MD5("pid=" + pid + appkey)
* 返回:32 位小写 MD5 字符串
*/
function makeSign($pid, $appkey)
{
// 拼接签名原文
$signStr = 'pid=' . $pid . $appkey;
// 计算并返回 MD5
return md5($signStr);
}
// 生成签名并输出
$sign = makeSign($pid, $appkey);
echo 'sign: ' . $sign . "\n";
import hashlib # 导入 hashlib 模块,用于 MD5 计算
# 示例参数
PID = '1000' # 用户ID,用户中心可见
APPKEY = 'tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA' # appkey,用户中心-API设置获取
def make_sign(pid: str, appkey: str) -> str:
"""
生成签名
签名规则:MD5("pid=" + pid + appkey)
返回:32 位小写 MD5 字符串
"""
# 拼接签名原文
sign_str = f'pid={pid}{appkey}'
# 使用 UTF-8 编码后计算 MD5,再返回十六进制字符串
return hashlib.md5(sign_str.encode('utf-8')).hexdigest()
# 生成签名并输出
sign = make_sign(PID, APPKEY)
print(f'sign: {sign}')
package main
import (
"crypto/md5" // MD5 算法包
"fmt" // 格式化输出
)
// 示例参数
const (
pid = "1000" // 用户ID,用户中心可见
appkey = "tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA" // appkey,用户中心-API设置获取
)
// makeSign 生成签名
// 签名规则:MD5("pid=" + pid + appkey)
func makeSign(pid, appkey string) string {
// 拼接签名原文
raw := "pid=" + pid + appkey
// 计算 MD5,得到 16 字节数组
hash := md5.Sum([]byte(raw))
// 格式化为 32 位小写十六进制字符串
return fmt.Sprintf("%x", hash)
}
func main() {
// 生成签名并输出
sign := makeSign(pid, appkey)
fmt.Println("sign:", sign)
}
import java.security.MessageDigest; // MD5 算法
import java.nio.charset.StandardCharsets; // UTF-8 编码
public class SignDemo {
// 示例参数
private static final String PID = "1000"; // 用户ID
private static final String APPKEY = "tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA"; // appkey
/**
* 生成签名
* 签名规则:MD5("pid=" + pid + appkey)
* 返回:32 位小写 MD5 字符串
*/
private static String makeSign(String pid, String appkey) throws Exception {
// 拼接签名原文
String raw = "pid=" + pid + appkey;
// 获取 MD5 摘要实例
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算 MD5,得到字节数组
byte[] digest = md.digest(raw.getBytes(StandardCharsets.UTF_8));
// 转为 32 位小写十六进制字符串
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
// 生成签名并输出
String sign = makeSign(PID, APPKEY);
System.out.println("sign: " + sign);
}
}
using System; // 基础类型
using System.Security.Cryptography; // MD5 算法
using System.Text; // 文本编码
public class SignDemo
{
// 示例参数
private const string Pid = "1000"; // 用户ID
private const string Appkey = "tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA"; // appkey
/// <summary>
/// 生成签名:MD5("pid=" + pid + appkey)
/// </summary>
private static string MakeSign(string pid, string appkey)
{
// 拼接签名原文
string raw = "pid=" + pid + appkey;
// 计算 MD5
byte[] hash = MD5.HashData(Encoding.UTF8.GetBytes(raw));
// 转为 32 位小写十六进制字符串
return Convert.ToHexStringLower(hash);
}
public static void Main()
{
// 生成签名并输出
string sign = MakeSign(Pid, Appkey);
Console.WriteLine("sign: " + sign);
}
}
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
// 示例参数
static NSString * const kPid = @"1000"; // 用户ID
static NSString * const kAppkey = @"tF9r7oQJ1dim46nM5xzBbuUaLNjf3uOA"; // appkey
/**
* 生成签名:MD5("pid=" + pid + appkey)
* 返回:32 位小写 MD5 字符串
*/
NSString *makeSign(NSString *pid, NSString *appkey)
{
// 拼接签名原文
NSString *raw = [NSString stringWithFormat:@"pid=%@%@", pid, appkey];
// 转为 UTF-8 编码的 NSData
NSData *data = [raw dataUsingEncoding:NSUTF8StringEncoding];
// 计算 MD5
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(data.bytes, (CC_LONG)data.length, digest);
// 转为 32 位小写十六进制字符串
NSMutableString *hex = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[hex appendFormat:@"%02x", digest[i]];
}
return hex;
}
int main(int argc, const char * argv[])
{
// 生成签名并输出
NSString *sign = makeSign(kPid, kAppkey);
NSLog(@"sign: %@", sign);
return 0;
}
© 网程科技(林州网程科技有限公司) | 豫ICP备2025120409号-2 | 豫B2-20230220 | 豫公网安备 41058102000262号