web-dev-qa-db-ja.com

Laravel 4データを使用してコントローラーから外部URLにPOSTリクエストを行う

コントローラから外部URLへのPOSTリクエストを行う方法を探しています。投稿されるデータはphp配列です。受信するURLは、外部URLのeコマースAPIです。投稿はコントローラーメソッドから行う必要があります。 URLは、「success」、「error」、「failure」、または「trylater」の文字列で応答する必要があります。私は以下を試しましたが成功しませんでした:

    return Redirect::to("https://backoffice.Host.iveri.com/Lite/Transactions/New/Authorise.aspx", compact($array));

私もカールを試しました:

    $url = 'https://backoffice.Host.iveri.com/Lite/Transactions/New/Authorise.aspx';
    //url-ify the data for the POST
    $fields_string ='';
    foreach($array as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
    rtrim($fields_string,'& ');

    //open connection
    $ch = curl_init();

    //set the url, number of POST vars, POST data
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_POST, count($array));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    //execute post
    $result = curl_exec($ch);

    //close connection
    curl_close($ch);

送信される配列の一部は、APIが応答に使用するコールバックです。

'Lite_Website_Successful_url' => 'https://mydomain.com/order/'.$order_id,
'Lite_Website_Fail_url' => 'https://mydomain.com/checkout/fail',
'Lite_Website_TryLater_url' => 'https://mydomain.com/checkout/trylater',
'Lite_Website_Error_url' => 'https://mydomain.com/checkout/error'

POSTリクエストを外部URLに転送されたデータで適切に行う方法を教えてください。コントローラーからのajax投稿も役に立ちますが、試しましたが成功しませんでした。 laravel php回答をもっとお願いします。ありがとうございます。

11
Mwirabua Tim

いくつかのことを明確にして、正しい方向に向けるようにしてください。

まず、あなたがやろうとしていることは、「WebアプリからAPIリクエストを行う」ように聞こえます。私がそれをあなたのものとどのように述べたかのその言い回しの違いは、それがより一般的であるということです。

  1. APIリクエストは、必ずしもコントローラー内ではなく、アプリケーション内のどこにでも行うことができます(API呼び出しなどのために追加のクラス/モデルを作成することを恐れないでください!)
  2. なぜコントローラーで「実行する必要がある」のか知りたいですか?ユースケースは何ですか?
  3. AJAXはサーバー側(PHPの場合)には存在しません。これは、クライアント側のURLにリクエストを送信するJavaScriptを説明する純粋なJavaScript固有の「テクノロジー」です。

最後に、何をしようとしていますか?ユーザーをリダイレクトする必要がありますか?それとも、API呼び出しを行って、アプリケーション内で結果を解析する必要がありますか?

試行したcURLリクエストは、APIリクエストを作成するために機能するはずです。これは、PHPコード内でAPIリクエストを作成する主な方法の1つです。ただし、フロントエンドのユーザーは、リクエストが作成および処理されていることを確認できません。cURLを使用する(および任意のAPIリクエスト)、処理はすべて、PHP(ユーザーには表示されません)の舞台裏で行われます。

6
fideloper

LaravelでパッケージGuzzleを使用できます。これは、HTTPリクエストを送信するためのPHP HTTPクライアントです。

あなたは作曲家を通してGuzzleをインストールすることができます

composer require guzzlehttp/guzzle:~6.0

または、プロジェクトの既存のcomposer.jsonの依存関係としてGuzzleを指定できます

{
   "require": {
      "guzzlehttp/guzzle": "~6.0"
   }
}

POST Laravelでのリクエスト、Guzzleを使用したリクエストのサンプルコードは次のとおりです。

use GuzzleHttp\Client;
class yourController extends Controller {
public function saveApiData()
{
    $client = new Client();
    $res = $client->request('POST', 'https://url_to_the_api', [
        'form_params' => [
            'client_id' => 'test_id',
            'secret' => 'test_secret',
        ]
    ]);

    $result= $res->getBody();
    dd($result);

}

8
Mohammed Safeer

これまで試してきた方法でCURLを使用するか、このスレッドでGuzzlehttpクライアントを使用した簡単な回答を確認してください。 GuzzleはLaravelで使用するのに好ましいクライアントのようです...

コントローラーから外部API関数を呼び出す、LARAVEL 4

2
minorgod