Проблема файлов окружения с меж-apis звонками laravel - PullRequest
0 голосов
/ 27 марта 2020

Доброе утро всем,

В рамках разработки демонстрационных API я реализовал два API:

  • HelloWorld
  • Уведомить

Первый позволяет запросить выполнение HelloWorld, второй позволяет отправлять электронные письма в соответствии с заданными шаблонами. В своей демонстрации я делаю из Postman (или из приложения React) API-вызов HelloWorld, который затем выполняет API-вызов Notifier для отправки сообщения.

Если из Почтальона я напрямую позвоню своему API-интерфейсу Notifier для отправки электронной почты, у меня не возникнет никаких проблем (файл .env хорошо настроен для отправки электронной почты в этом API). С другой стороны, если я вызываю свой API из HelloWorld в Notifier (.env-файл HelloWorld не настроен для отправки электронных писем), я сталкиваюсь с ошибкой:

Ожидаемый код ответа 250, но получен код "530", с сообщением "530 5.7.1 Требуется аутентификация

С другой стороны, если я настрою файл .env API HelloWorld (который не отправляет электронную почту в любое время ), У меня больше нет ошибок, и моя электронная почта отправлена ​​Notifier.

Это вызов API в HelloWorld:

$client = new Client();

$response = $client->post("http://vhost-url.local/api/notifier/sendmail", [
    'json' => [
         'to' => $to,
         'template' => $template,
         'parameters' => $parameters
     ],
]);

И это действие вызывается в API уведомителя:

public function sendmail(Request $request)
{
    $params = json_decode($request->getContent(), true);

    try{
        switch ($params['template']) {
            case 'HELLO_WORLD':
                Mail::to($params['to'])
                    ->send(new HelloWorld([
                        'message' => $params['parameters']['message']
                    ]));
                break;
            default:
                throw new \Exception("Ce template n'existe pas");
                break;
        }
    } catch(\Exception $e) {
        return response()
            ->json([
                'message' => $e->getMessage(),
            ], 500);
    }

    return response()
        ->json([
            'message' => 'Le mail a bien été envoyé'
        ], 200);

}

Мой вопрос: во время вызова API (с Guzzle в моем случае) используется ли файл среды исходного API вместо файла среды целевого API? И если да, то как решить эту проблему?

1 Ответ

1 голос
/ 27 марта 2020

Я не уверен, помогает ли это, но у меня были похожие проблемы. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. * Решение состоит в том, чтобы запустить php artisan config:cache для создания кэшированной версии ваших .env переменных. Обратите внимание, что вы никогда не должны использовать env('...') в своем коде, вместо этого вы должны ссылаться на них, используя файл конфигурации, такой как config('app.env'). .env переменные не могут быть динамическими c по этой причине.

Для пользовательских переменных env я обычно создаю файл config/project.php примерно так:

return [
   'my_custom_var' => env('PROJECT_MY_CUSTOM_VAR')
];

Таким образом, вы можете кэшируйте его и вызывайте переменную, используя config('project.my_custom_var');

...