我正在寻找一种从控制器向外部网址发布请求的方法。发布的数据是一个php数组。要接收的网址是外部网址中的电子商务API。帖子必须从控制器方法完成。该网址应回复“成功”,“错误”,“失败”或“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请求到外部网址。来自控制器的ajax帖子也会有所帮助,但我尝试过没有成功。但我更喜欢laravel php的答案。谢谢。
答案 0 :(得分:8)
我们可以在Laravel中使用Guzzle包,它是一个发送HTTP请求的PHP HTTP客户端。
你可以通过作曲家安装Guzzle
composer require guzzlehttp/guzzle:~6.0
或者您可以将Guzzle指定为项目现有composer.json中的依赖项
{
"require": {
"guzzlehttp/guzzle": "~6.0"
}
}
使用Guzzle的laravel中POST请求的示例代码如下所示,
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);
}
答案 1 :(得分:6)
让我澄清一些事情,并试着指出你正确的方向。
首先,您尝试执行的操作听起来像是“从您的网络应用程序发出API请求”。我对你的说法的措辞不同之处在于它更为通用。
最后,你想做什么?您是否需要重定向用户?或者您是否需要进行API调用并在应用程序中解析结果?
您尝试过的
答案 2 :(得分:2)
要么像你一直尝试的那样使用CURL,要么检查这个帖子以获得关于使用Guzzle http客户端进行操作的简短回答。 Guzzle似乎是与Laravel一起使用的首选客户......