Я пытаюсь настроить API.
Я не знаю, как создать экземпляр GuzzleRequest для публикации данных и создания заголовка авторизации для API.
Это созданный GuzzleRequest
$request = new GuzzleRequest(
method: 'POST',
uri: $url,
//body:null,
);
Внутри GuzzleRequest, который я создал, я хочу передать данные внутри параметров тела.
Параметры тела могут принимать: string|resources|null|StreamInterface
, но это данные, которые я хочу передать:
{
"payItemId": "S-112-948-MTNMOMO-20052-200040001-1",
"amount": 1000
}
Это полный код функции:
function headerauthorization()
{
$token = "716c3fcf-98bd-435e-a16d-befc3b96da35";
$secret = "9f96a7ed-338f-4609-83f8-27ce60fe87f4";
//$url = "https://s3p.smobilpay.staging.maviance.info/v2/cashin?serviceid=20052";
$url = "https://s3p.smobilpay.staging.maviance.info/v2/quotestd";
$config = new \Maviance\S3PApiClient\Configuration();
$config->setHost($url);
$client = new \Maviance\S3PApiClient\ApiClient($token, $secret, ['verify' => false]);
$request = new GuzzleRequest(
method: 'POST',
uri: $url,
//body:null,
);
$curl = curl_init();
curl_setopt_array(
$curl,
array(
CURLOPT_URL => 'https://s3p.smobilpay.staging.maviance.info/v2/quotestd',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
'Authorization:' . $client->buildAuthorizationHeader($request) . ''
),
)
);
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response, true);
}
Почему я использую GuzzleRequest? Функция buildAuthorizationHeader($request) принимает в качестве параметров только тип RequestInterface. Сначала я попробовал следующий код (метод GET, параметры тела отсутствуют) для первого запроса API, и у меня он работает нормально. Но теперь у меня есть метод Post и параметры тела для вставки.
Это первый код, который у меня работает нормально
function headerauthorization()
{
$token = "716c3fcf-98bd-435e-a16d-befc3b96da35";
$secret = "9f96a7ed-338f-4609-83f8-27ce60fe87f4";
$url = "https://s3p.smobilpay.staging.maviance.info/v2/cashin?serviceid=20052";
$config = new \Maviance\S3PApiClient\Configuration();
$config->setHost($url);
$client = new \Maviance\S3PApiClient\ApiClient($token, $secret, ['verify' => false]);
$request = new GuzzleRequest(
method: 'GET',
uri: $url,
// headers: [],
// body: null,
);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://s3p.smobilpay.staging.maviance.info/v2/cashin?serviceid=20052',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization:'.$client->buildAuthorizationHeader($request).''
),
)
);
$response = curl_exec($curl);
curl_close($curl);
$response = json_decode($response, true);
$payItemId = $response[0]["payItemId"];
}
Установите body-data
в массив, а затем json_encode
вот так.
$body = json_encode([
"payItemId" => "S-112-948-MTNMOMO-20052-200040001-1",
"amount" => 1000,
]);
Затем добавьте еще одно поле сразу после CURLOPT_CUSTOMREQUEST => 'POST',
, вот так
CURLOPT_POSTFIELDS => $body,
Наконец, установите CURLOPT_HTTPHEADER
как
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: ' . $client->buildAuthorizationHeader($request)
),
Попробуйте это, это сработает.