简体   繁体   English

如何使用 PHP 连接 2ba 它的 API

[英]How to connect with 2ba it's API using PHP

Im trying to connect to the API services of 2ba .我正在尝试连接到2ba的 API 服务。 Somehow I just can't connect.不知怎的,我就是无法连接。 I get the error: error: "invalid_client"我收到错误:错误:“invalid_client”

I dont know what to try, it feels like I need to hash my cliend_secret or complete url but I dont see that in the documentation.我不知道该尝试什么,感觉就像我需要散列我的 cliend_secret 或完整的 url,但我在文档中没有看到。

This is my code (PHP):这是我的代码(PHP):

<?php

//  ---- GET TOKEN ----

// Base url for all api calls.
$baseURL = 'https://authorize.2ba.nl';

// Specified url endpoint. This comes after the baseUrl.
$endPoint = '/OAuth/Token';

// Parameters that are required or/and optianal for the endPoint its request.
$parameters = 'grant_type=password&username=abc@abc.com&password=123abc&client_id=myClientID&client_secret=myClientSecret';

// All parts together.
$url = $baseURL . $endPoint . '?' . $parameters;



//Init session for CURL.
$ch = curl_init();

// Options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

// Init headers for access to the binance API signed data.
$headers = array();
$headers[] = 'Content-type: application/x-www-form-urlencoded';
$headers[] = 'Content-Length: 0';

// Setting headers
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// Execute request.
$data = curl_exec($ch);

// If there is an error. Show whats wrong.
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

// Ends the CURL session, frees all resources and deletes the curl (ch).
curl_close($ch);

$result = json_encode($data);

echo($data);
exit();

?>

The authentication is oauth2 and I want to use the "Password Grant" flow since I can login automaticly this way.身份验证是 oauth2,我想使用“密码授予”流程,因为我可以通过这种方式自动登录。 Also I see in the example code in C# that they encode the url, something im not doing yet but did try.此外,我在 C# 的示例代码中看到,它们对 url 进行了编码,这是我还没有做但尝试过的事情。 It did not work.这没用。

// Using $encodedUrl like this: curl_setopt($ch, CURLOPT_URL, $encodedUrl); but does not work.
$encodedUrl = urlencode($url);

Alright so I fixed it.好吧,所以我修好了。 I now got my access token and am able to recieve data from the API.我现在获得了访问令牌,并且能够从 API 接收数据。 This is what I did:这就是我所做的:

//  ---- GET TOKEN - FLOW: USER PSW ----

// No changes
$baseURL = 'https://authorize.2ba.nl';

// No changes
$endPoint = '/OAuth/Token';

// $parameters is now an array.
$parameters = array(
    'grant_type'    => 'password',
    'username'      => 'myUsername',
    'password'      => 'myPassword',
    'client_id'     => 'myClientID',
    'client_secret' => 'myClientSecret'
);

// Removed the $parameter part
$url = $baseURL . $endPoint;

//Init session for CURL.
$ch = curl_init();

// Init headers for access to the binance API signed data.
$headers = array();
$headers['Content-Type'] = "application/x-www-form-urlencoded";

// NOTE: http_build_query fixed it.
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); // Automaticly encodes parameters like client_secret and id.
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// Execute request.
$data = curl_exec($ch);

// If there is an error. Show whats wrong.
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

// Ends the CURL session, frees all resources and deletes the curl (ch).
curl_close($ch);

$result = json_encode($data);

echo($data);
exit();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM