You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP API请求示例转Python后auth_hash校验错误如何解决

错误原因分析

    1. 签名拼接逻辑错误:PHP的http_build_query会自动对参数键值做URL编码,你手动拼接key=value没有做编码,参数值含特殊字符(比如空格、符号)时签名串和服务端计算用的串不一致
    1. POST请求体缺失业务参数:PHP逻辑是把原始业务参数+api_key+auth_hash+nonce所有字段一起作为POST提交,你的代码只提交了三个校验字段,业务参数根本没传给服务端,同时也导致服务端计算签名时用的参数和你本地签名用的不一致
    1. nonce格式不对:PHP的explode(' ', microtime())[1]取的是整数秒级时间戳,time.time()返回的是带小数的浮点数,格式不匹配

正确Python实现代码

import hashlib
import hmac
import requests
import time
from urllib.parse import urlencode
# 可选:关闭SSL警告
import urllib3
urllib3.disable_warnings()

params = {
    'name':'Matthew Jackson',
    'state':'nj',
    'zip':'034572',
    'address':'14 Main Street',
    'phone':'',
    'dob':''
}

def request_ss(url, params, api_key, secretKey):
    # 对原始业务参数做urlencode,生成签名用的串,和PHP http_build_query逻辑对齐
    to_sign = urlencode(params)
    # 计算hmac sha512签名
    sign = hmac.new(
        key=secretKey.encode('utf-8'),
        msg=to_sign.encode('utf-8'),
        digestmod=hashlib.sha512
    ).hexdigest()
    # 合并所有字段到请求体
    post_body = params.copy()
    post_body.update({
        'api_key': api_key,
        'auth_hash': sign,
        'nonce': str(int(time.time())) # 取整数秒时间戳,和PHP逻辑对齐
    })
    # 发起POST请求,关闭SSL校验和PHP配置对齐
    r = requests.post(url, data=post_body, verify=False)
    return r.text

# 调用示例
create_url = '替换为实际API地址'
api_key = '替换为你的api_key'
api_secret = '替换为你的api_secret'
res = request_ss(create_url, params, api_key, api_secret)
print(res)

内容的提问来源于stack exchange,提问作者Tomee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:54:04