公式ドキュメントはきちんと読みましょう、という話ではあるのですが。
base64エンコードしたものを投げていて通らず、だいぶ後になってから気付いたのでメモ。
{
"name": "arm-band/basic_test",
"description": "",
"require": {
"guzzlehttp/guzzle": "^6.5.2",
"vlucas/phpdotenv": "^v4.1.0"
},
"scripts": {
"start": "php src/index.php"
}
}
こんな形で
composer.json
を用意してあげて、以下のようなディレクトリ構造とプロジェクトを作ります。
/
├ src/
| └ index.php
├ .env
└ composer.json
.env
は以下のような形で。
TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SECRET=YYYYYYYYYYYYYYYYYYYYYYYYYYYYY
最後に、
src/index.php
を用意。
<?php
require __DIR__ . '/../vendor/autoload.php';
use GuzzleHttp\Client;
use Dotenv\Dotenv;
$dot_env = __DIR__. '/../.env';
if (is_readable($dot_env)) {
$dotenv = Dotenv::createImmutable(__DIR__. '/../');
$dotenv->load();
}
//処理
function basic_authentication_request() {
$guzzleClient = new Client();
//URL
$base = 'https://example.jp/api';
try {
$response = $guzzleClient->request(
'POST',
$url,
[
'auth' => [
getenv('TOKEN'),
getenv('SECRET'),
],
'version' => 1.1,
'json' => ['hoge' => ['piyo', 'fuga']],
'headers' => [
'Content-Type' => 'application/vnd.json+api'
],
]
);
return json_decode($response->getBody()->getContents(), true);
} catch (Exception $e) {
return json_decode('{"res":' . unicode_encode($e->getResponse()->getBody()->getContents()) . ',' . $test_res . '}', true);
}
}
$response = basic_authentication_request();
header("Content-type: application/json; charset=UTF-8");
echo $response;
Guzzleにはリクエストヘッダに
Basic認証を行うためのauth
というパラメータがあるため、これを使えば良いというオチでした。
これに気付かず、
Authentication: Basic ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
という形を
headers
に付けていました……。
参考
Guzzle
auth
パラメータ
base64エンコード(今回は最終的に不採用)
PHPでユニコードエスケープ(レスポンスがユニコードエスケープされたエラー文だと読めないので)