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

调用OKX API创建提现订单时遭遇Error 405错误求助

调用OKX API创建提现订单时遭遇Error 405错误求助

看起来你遇到的405错误虽然提示是"方法不允许",但实际问题出在你的create_withdrawal方法里的请求构造上——虽然你指定了POST方法,但请求的格式完全不符合OKX API的要求,导致服务器无法正确识别你的请求,进而返回了405错误。下面我帮你梳理代码里的问题并给出修复方案:

问题1:POST请求的Body格式完全错误

OKX的创建提现API要求POST参数以JSON格式放在请求体中,但你现在用?拼接出了类似URL查询参数的字符串,这既不符合API的参数要求,也会导致签名计算错误。

问题2:requests.post的调用方式错误

你写的requests.post(url, endpoint)完全不符合requests库的用法:第二个参数是data字段,你把endpoint传进去相当于给服务器发了一段无意义的文本,服务器自然无法解析你的请求。

问题3:签名计算时的Body参数错误

OKX的签名规则中,body部分需要是POST请求的原始JSON字符串(如果有请求体的话),你现在构造的参数串会导致签名不匹配,服务器验证签名失败后也可能返回非预期的错误码。


修复后的create_withdrawal方法代码

def create_withdrawal(self, ccy, amount):
    clientId = self.create_client_id()
    endpoint = '/api/v5/fiat/create-withdrawal'
    # 1. 构造正确的JSON请求体参数(替换paymentAcctId为你的真实账户ID)
    body_dict = {
        "paymentAcctId": "你的实际账户ID",
        "ccy": ccy,
        "amt": amount,
        "paymentMethod": "PIX",
        "clientId": clientId
    }
    # 2. 把字典转成JSON字符串,用于签名计算
    body = json.dumps(body_dict)
    url = self.baseURL + endpoint
    request = 'POST'
    # 3. 传入正确的body字符串生成签名
    header = self.get_header(request, endpoint, body)
    print(header)
    # 4. 用requests.post正确传递JSON请求体
    response = requests.post(url, headers=header, json=body_dict)
    # 可以打印原始响应文本排查问题
    # print("Response text:", response.text)
    return response.json()

额外注意事项

  • 请务必把paymentAcctId替换成你自己的真实账户ID,你可以通过调用withdrawal_payment_methods接口获取可用的账户ID。
  • 确保你的API密钥已经开启了提现权限,并且IP白名单(如果设置了)包含当前运行代码的服务器/本地IP。
  • 测试时可以临时打印response.text查看服务器返回的详细错误信息,这能帮你快速定位参数错误、签名不匹配等问题。

你之前的withdrawal_payment_methods是GET请求,参数放在URL里是合规的,所以能正常工作,但POST请求的规则完全不同,一定要区分开哦!

备注:内容来源于stack exchange,提问作者Nilson Cesar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:48:04