调用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
相关产品推荐
相关产品推荐

