0

从 curl 实现切换到使用 laravel Http 门面访问poloniex私有 api。

但我遇到了问题。我从 poloniex 收到无效的命令响应,但我的所有参数似乎都可以正常工作。

下面的示例代码,所有端点都是这种情况,但我们将在这里使用 returnBalances 命令进行测试:

$req = ['command' => 'returnBalances'];

// generate a nonce
$time = explode(' ', microtime());
$req['nonce'] = $time[1].substr($time[0], 2, 6);

$parameters = http_build_query($req, '', '&');

$sign = hash_hmac('sha512', $parameters, $my_secret);

$response = Http::withHeaders(["key" => $my_key, 'Sign' '=> $my_secret])
    ->post('https://poloniex.com/tradingApi', $req);

上述响应 json 返回:

array:1 [
  "error" => "Invalid command."
].

我的代码工作正常,但直接使用 curl 时,似乎 http 门面没有发送请求参数

4

1 回答 1

1

看起来您正在将请求有效负载作为查询参数发送。

查看文档,您需要在调用asForm()之前添加post()调用。

下面,假设您的其余代码是正确的,应该是正确的实现:

$response = Http::withHeaders(["key" => $my_key, 'Sign' => $my_secret])
    ->asForm()
    ->post('https://poloniex.com/tradingApi', ['command' => 'returnBalances']);

我相信 Http 客户端会为您处理 URL 编码,因此您不需要额外调用http_build_query.

于 2021-02-01T23:21:09.980 回答