🔐 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)

简介: 本文详解1688开放平台API签名算法(MD5方式),涵盖Java/Python/PHP三语言实现。核心四步:过滤空值→参数名ASCII升序→拼接key+value→AppSecret首尾包裹后MD5大写。重点纠正常见错误:sign不参与签名、时间戳须毫秒、空值剔除、Base64原串处理。助你一次打通商品、订单、物流等全接口调用。(239字)

🔐 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)

1688(AliExpress/1688 Open Platform)所有API请求都必须带 sign 参数,签名算法是接入最容易出错的地方。弄懂它,后续所有接口(商品、订单、物流、图片搜索)都能一遍通。

一、1688 官方签名规则(重点记这4步)

假设已有:
• app_key = 123456

• app_secret = 7a3b9c8d...(前后都会用到)

• 业务参数:method=alibaba.item.get, item_id=610947572360

✅ Step 1:收集所有业务参数(不含 sign、file 二进制)

app_key, format, method, timestamp, v, sign_method, session(如有)

  • 业务字段 (item_id 等)

✅ Step 2:按参数名 ASCII 升序排序

app_key=123456
format=json
item_id=610947572360
method=alibaba.item.get
sign_method=md5
timestamp=1700000000000
v=2.0

✅ Step 3:拼接成 key+value 字符串(无 = 无 &)

app_key123456formatjsonitem_id610947572360methodalibaba.item.getsign_methodmd5timestamp1700000000000v2.0

✅ Step 4:首尾拼 AppSecret → MD5 → 大写

待签名串 = APP_SECRET + 上一步字符串 + APP_SECRET
sign = MD5(待签名串).upper()

⚠️ 最常见错误:

  • 把 sign 参入签名 ✘

  • 时间戳用秒而非毫秒 ✘

  • 参数值为 None/空字符串 参入签名(1688要求剔除值为空的参数)✘

  • Base64图片等超长字段参入签名时未用原串 ✘

二、Python 实现(推荐直接用这个)

ali1688_sign.py

import hashlib
import time
from typing import Dict, Optional

封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex

def generate_1688_sign(params: Dict[str, Optional[str]], app_secret: str) -> str:
"""
1688 Open Platform Sign 生成 (MD5)

Args:
    params:    所有API参数(不含sign, 不含None值)
    app_secret: AppSecret

Returns:
    大写32位MD5签名串
"""
# 1. 剔除空值
filtered = {k: v for k, v in params.items() if v is not None and str(v).strip() != ''}

# 2. 按 key ASCII 升序排序
sorted_items = sorted(filtered.items(), key=lambda x: x[0])

# 3. 拼接 key+value
param_str = ''.join(f"{k}{v}" for k, v in sorted_items)

# 4. 首尾拼 secret → MD5 → 大写
sign_str = f"{app_secret}{param_str}{app_secret}"
return hashlib.md5(sign_str.encode('utf-8')).hexdigest().upper()

===================== 使用示例 =====================

if name == "main":
APP_KEY = "YOUR_APP_KEY"
APP_SECRET = "YOUR_APP_SECRET"

api_params = {
    "method": "alibaba.item.get",
    "app_key": APP_KEY,
    "timestamp": str(int(time.time() * 1000)),   # 毫秒级!
    "format": "json",
    "v": "2.0",
    "sign_method": "md5",
    "item_id": "610947572360",
    # "session": "ACCESS_TOKEN"  # 订单类接口需要
}

sign = generate_1688_sign(api_params, APP_SECRET)
api_params["sign"] = sign

print("✅ 签名结果:", sign)
print("📦 请求参数示例:")
for k, v in api_params.items():
    print(f"  {k} = {v}")

三、Java 实现

// Ali1688SignUtil.java
import java.util.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex

public class Ali1688SignUtil {

public static String generateSign(Map<String, String> params, String appSecret)
        throws NoSuchAlgorithmException {

    // 1. 移除空值
    Map<String, String> filtered = new TreeMap<>();
    for (Map.Entry<String, String> e : params.entrySet()) {
        if (e.getKey() != null && e.getValue() != null && !e.getValue().trim().isEmpty()) {
            filtered.put(e.getKey(), e.getValue());
        }
    }

    // 2. 按 key 升序拼接 key+value
    StringBuilder sb = new StringBuilder();
    for (Map.Entry<String, String> e : filtered.entrySet()) {
        sb.append(e.getKey()).append(e.getValue());
    }

    // 3. 首尾拼 secret
    String toSign = appSecret + sb.toString() + appSecret;

    // 4. MD5 大写
    MessageDigest md = MessageDigest.getInstance("MD5");
    byte[] digest = md.digest(toSign.getBytes(java.nio.charset.StandardCharsets.UTF_8));
    StringBuilder hex = new StringBuilder();
    for (byte b : digest) {
        hex.append(String.format("%02X", b & 0xFF));
    }
    return hex.toString();
}

// 用法示例
public static void main(String[] args) throws Exception {
    Map<String, String> params = new HashMap<>();
    params.put("method", "alibaba.item.get");
    params.put("app_key", "YOUR_APP_KEY");
    params.put("timestamp", String.valueOf(System.currentTimeMillis()));
    params.put("format", "json");
    params.put("v", "2.0");
    params.put("sign_method", "md5");
    params.put("item_id", "610947572360");

    String sign = generateSign(params, "YOUR_APP_SECRET");
    System.out.println("sign = " + sign);
}

}

四、PHP 实现

<?php
// ali1688_sign.php

function generate1688Sign(array $params, string $appSecret): string {
// 1. 去掉空值及sign本身
unset($params['sign']);
$filtered = array_filter($params, fn($v) => $v !== null && $v !== '');

// 2. 按键 ASCII 升序
ksort($filtered);

// 3. 拼接 key+value
$str = '';
foreach ($filtered as $k => $v) {
    $str .= $k . $v;
}

// 4. MD5 首尾拼 secret → 大写
$toSign = $appSecret . $str . $appSecret;
return strtoupper(md5($toSign));

}

// ---- 示例 ----
$params = [
'method' => 'alibaba.item.get',
'app_key' => 'YOUR_APP_KEY',
'timestamp' => (string)(microtime(true) * 1000), // 毫秒
'format' => 'json',
'v' => '2.0',
'sign_method' => 'md5',
'item_id' => '610947572360',
];

$sign = generate1688Sign($params, 'YOUR_APP_SECRET');
$params['sign'] = $sign;

封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex

echo "sign = {$sign}\n";
?>

五、签名自检 & 排错清单

现象 原因 排查

Invalid Signature 时间戳单位错 必须 13位毫秒 int(time.time()*1000)

Invalid Signature 参数含空格或编码 确保 UTF-8,中文正常参与签名不 URL-Encode

sign fail None 值参入签名 严格过滤空值

偶尔成功偶尔失败 系统时间偏差大 服务器时间需 NTP 同步(±5分钟内)

图片搜索报签名错 Base64 含换行/data:image 前缀 用裸 Base64 串,不参与截断

六、面试/对接一句话总结

1688签名 = 按参数名ASCII升序拼 key+value → 首尾加AppSecret → MD5 → 大写,空值剔除、timestamp用毫秒、sign本身不参与签名。

需要我把这个 sign 函数集成进之前的 商品搜索 / 订单同步 / 图片搜索 Client 中给你完整可调用的模块吗?

相关文章
|
1小时前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
7182 31
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
1小时前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
625 140
|
1小时前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
|
1小时前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1158 1
|
1小时前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1221 2
|
1小时前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1296 3
|
1小时前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
1043 5
|
1小时前
|
人工智能 自然语言处理 算法
|
1小时前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
853 1
|
1小时前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
404 1