コントローラから外部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回答をもっとお願いします。ありがとうございます。
いくつかのことを明確にして、正しい方向に向けるようにしてください。
まず、あなたがやろうとしていることは、「WebアプリからAPIリクエストを行う」ように聞こえます。私がそれをあなたのものとどのように述べたかのその言い回しの違いは、それがより一般的であるということです。
最後に、何をしようとしていますか?ユーザーをリダイレクトする必要がありますか?それとも、API呼び出しを行って、アプリケーション内で結果を解析する必要がありますか?
試行したcURLリクエストは、APIリクエストを作成するために機能するはずです。これは、PHPコード内でAPIリクエストを作成する主な方法の1つです。ただし、フロントエンドのユーザーは、リクエストが作成および処理されていることを確認できません。cURLを使用する(および任意のAPIリクエスト)、処理はすべて、PHP(ユーザーには表示されません)の舞台裏で行われます。
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);
}
これまで試してきた方法でCURLを使用するか、このスレッドでGuzzlehttpクライアントを使用した簡単な回答を確認してください。 GuzzleはLaravelで使用するのに好ましいクライアントのようです...