在调用API接口时,生成请求签名是确保请求安全性和合法性的重要步骤。不同的API接口可能有不同的签名生成规则。以下是一些常见的签名生成方法和示例,特别是针对1688开放平台的签名生成方法。
1688开放平台采用双重签名验证机制,包括请求签名和业务签名。以下是生成请求签名的具体步骤和代码示例。
请求签名是使用app_secret
对请求参数进行加密的过程。以下是Python代码示例:
Python
import hashlib
import urllib.parse
import time
def generate_sign(params, app_secret):
# 参数排序并进行URL编码
sorted_params = sorted(params.items())
query_str = '&'.join([f'{k}={urllib.parse.quote_plus(str(v))}' for k, v in sorted_params])
# 使用HMAC-SHA1加密
sign = hashlib.md5((app_secret + query_str + app_secret).encode('utf-8')).hexdigest().upper()
return sign
在调用API接口时,需要构造请求参数并生成签名。以下是完整的Python代码示例:
Python
import requests
import json
import time
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
product_id = "商品ID" # 示例:从商品URL中获取如https://detail.1688.com/offer/123456.html
# 构造基础参数
params = {
"app_key": app_key,
"method": "aliexpress.product.detail.get",
"product_id": product_id,
"timestamp": str(int(time.time() * 1000)), # 1688要求13位时间戳
"format": "json",
"v": "2.0"
}
# 生成签名
params["sign"] = generate_sign(params, app_secret)
# 添加access_token(部分接口需要)
headers = {
"Authorization": f"Bearer {access_token}"
}
try:
response = requests.get(
"https://gw.open.1688.com/openapi/param2/2/portals.open/api/",
params=params,
headers=headers
)
data = response.json()
# 提取关键字段
product_info = data["result"]["productInfo"]
sku_list = product_info["skuList"]
print(f"商品标题:{product_info['subject']}")
print(f"批发价格区间:{product_info['priceRange']}")
print(f"最小起订量:{product_info['moq']}")
print("SKU详情:")
for sku in sku_list:
print(f"规格:{sku['spec']} | 库存:{sku['stock']} | 价格:{sku['price']}")
except Exception as e:
print(f"API调用失败:{str(e)}")
print(f"完整响应:{response.text}")
以下是一个通用的签名生成方法,适用于大多数API接口:
Python
import hmac
import hashlib
import time
def generate_sign(params, app_secret):
# 参数排序
sorted_params = sorted(params.items())
# 拼接参数
query_str = ''.join([f"{k}{v}" for k, v in sorted_params])
# 使用HMAC-SHA1加密
sign = hmac.new(app_secret.encode(), query_str.encode(), hashlib.sha1).hexdigest().upper()
return sign
在调用API接口时,需要构造请求参数并生成签名。以下是完整的Python代码示例:
Python
import requests
import json
import time
app_key = "YOUR_APP_KEY"
app_secret = "YOUR_APP_SECRET"
product_id = "商品ID" # 示例:从商品URL中获取如https://detail.1688.com/offer/123456.html
# 构造基础参数
params = {
"app_key": app_key,
"method": "aliexpress.product.detail.get",
"product_id": product_id,
"timestamp": str(int(time.time() * 1000)), # 1688要求13位时间戳
"format": "json",
"v": "2.0"
}
# 生成签名
params["sign"] = generate_sign(params, app_secret)
try:
response = requests.get(
"https://gw.open.1688.com/openapi/param2/2/portals.open/api/",
params=params
)
data = response.json()
# 提取关键字段
product_info = data["result"]["productInfo"]
sku_list = product_info["skuList"]
print(f"商品标题:{product_info['subject']}")
print(f"批发价格区间:{product_info['priceRange']}")
print(f"最小起订量:{product_info['moq']}")
print("SKU详情:")
for sku in sku_list:
print(f"规格:{sku['spec']} | 库存:{sku['stock']} | 价格:{sku['price']}")
except Exception as e:
print(f"API调用失败:{str(e)}")
print(f"完整响应:{response.text}")
参数排序:在生成签名时,需要对请求参数按字典序排序。
时间戳:确保使用的时间戳是13位的,符合API接口的要求。
安全:不要在代码中直接暴露app_secret
,建议将其存储在环境变量或配置文件中。
通过上述步骤和代码示例,你可以生成API请求签名,并调用1688开放平台的API接口获取商品详情。生成签名是确保API请求安全性和合法性的重要步骤,不同的API接口可能有不同的签名生成规则,建议参考具体的API文档进行开发。
如果你在实践中遇到任何问题,欢迎随时交流和讨论。让我们一起用技术的力量,解锁更多可能!