You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA调用GDAX API发送POST请求时无法传入product_id报错

Fixing "Requires product_id" Error When Calling GDAX API via VBA

我之前也踩过这个一模一样的坑!GDAX(现在叫Coinbase Pro)的订单API对POST请求的格式要求特别严格,你看到的{"message":"Requires product_id"}错误,本质原因是服务器没能正确解析你发送的POST数据,而不是你没传product_id。

先聊聊你试过的几种方法为啥没用:

  • 在URL后加?product_id=BTC-EUR:这是GET请求的传参逻辑,POST订单的参数必须放在请求体里,服务器不会从URL里读取这个参数来创建订单。
  • 直接在Send后传"product_id=BTC-EUR":这是application/x-www-form-urlencoded格式的参数,但GDAX订单API只接受JSON格式的请求体,服务器根本识别不了。
  • 构造了JSON字符串但没设置请求头:哪怕你传了正确的JSON,如果没告诉服务器“这是JSON数据”,它会把内容当成普通文本,自然找不到product_id字段。

正确的解决步骤

核心就是给请求加上Content-Type: application/json请求头,同时确保JSON格式完全合规。这里给你一个完整的VBA代码示例:

Sub PlaceGDAXOrder()
    Dim httpRequest As WinHttp.WinHttpRequest.5.1
    Dim requestBody As String
    Dim apiEndpoint As String
    
    ' 初始化HTTP请求对象
    Set httpRequest = New WinHttp.WinHttpRequest.5.1
    
    ' GDAX订单API的正确端点
    apiEndpoint = "https://api.gdax.com/orders"
    
    ' 构造符合要求的JSON请求体(VBA中双引号要转义为两个双引号)
    requestBody = "{""size"": ""0.01"",""price"": ""0.100"",""side"": ""buy"",""product_id"": ""BTC-USD""}"
    
    ' 打开POST请求
    httpRequest.Open "POST", apiEndpoint, False
    
    ' 关键!添加Content-Type请求头,告诉服务器接收的是JSON数据
    httpRequest.SetRequestHeader "Content-Type", "application/json"
    
    ' 别忘了添加GDAX要求的身份认证头(必须项,否则会报权限错误)
    ' 替换成你的API密钥相关信息
    ' httpRequest.SetRequestHeader "CB-ACCESS-KEY", "YOUR_API_KEY"
    ' httpRequest.SetRequestHeader "CB-ACCESS-SIGN", "YOUR_GENERATED_SIGNATURE"
    ' httpRequest.SetRequestHeader "CB-ACCESS-TIMESTAMP", "CURRENT_TIMESTAMP"
    ' httpRequest.SetRequestHeader "CB-ACCESS-PASSPHRASE", "YOUR_PASSPHRASE"
    
    ' 发送JSON请求体
    httpRequest.Send requestBody
    
    ' 输出响应结果到立即窗口
    Debug.Print httpRequest.ResponseText
    
    Set httpRequest = Nothing
End Sub

额外注意事项

  1. 认证头必须齐全:GDAX的订单API需要身份验证,你必须按照官方文档生成并添加CB-ACCESS-KEYCB-ACCESS-SIGN等请求头,否则哪怕解决了product_id的问题,也会收到权限错误。
  2. JSON格式要严谨:确保所有键和字符串值都用双引号包裹,逗号分隔正确,没有多余的逗号或语法错误——哪怕一个小失误,服务器都可能解析失败。
  3. 检查API端点:确认你调用的是正确的订单创建端点(https://api.gdax.com/orders),别用错其他端点。

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

火山引擎 最新活动