Laravel Odd POST行为

时间:2015-01-08 13:33:05

标签: php post laravel

我在Laravel 4中设置了一个支付门户,使用服务器集成连接到SagePay。

结账连接到SagePay没有任何问题,但在用户输入他们的卡详细信息并返回到网站后,我无法阅读SagePay的回复,

SagePay正在向我的某个页面发送POST请求,但是如果我路由:: GET请求(路由:: POST返回HttpMethodNotAllowed)并且没有收到任何POST数据,则Laravel将仅显示该页面。

Laravel在POST时如何将请求作为GET读取?

我尝试过Route :: any但是仍然没有POST数据,

Route::post('cardpayment/result', array('uses'=>'CartController@postSageResult'));

public function postSageResult() {
   $data = Input::all();            
   Log::info('data:'.var_dump($data));
}

2 个答案:

答案 0 :(得分:0)

在尝试获取设置为POST的路由时,您获得HTTPmethodNotAllowed?这正是它应该如何运作的。 SagePay应该向您发送POST请求。

  • “如果我作为GET请求路由,Laravel将只显示该页面” - 这是正常的。在浏览器中打开URL时,它会自动向该URL发送GET请求。如果您定义Route::post Laravel将不会在GET请求中提供任何内容,除了明显的HTTPmethodNotAllowed例外。

  • “并且没有POST数据显示” - 什么POST数据?您在通过浏览器访问该页面时发送GET请求。

以下是整个安全支付网关的工作原理:

1)在您的网站上获取表格

的请求

2)用户在表格中填写一些数据(不是信用卡数据!)

3)使用SagePay API,您可以将用户重定向到 SagePay.com 上的页面。

4)此处用户填写信用卡数据。此页面与您的网站完全没有关联。

5)用户提交SagePay表单。他被告知他的交易将被处理,他被重定向回你网站上的一个页面。您尚未将此交易视为已处理。你必须等待SagePay 确认这个。它将通过发送POST请求...

一些Magick发生在这里。可能需要1秒或1天。你无法控制它。

6)SagePay处理请求(与银行谈判等)。如果交易成功,那么SagePay将在您配置的Route::post路由上向您的网站发出POST请求。在这里,您可以访问$data = Input::all();,其中最有可能包含有关刚刚发生的交易的一些详细信息。最有可能在步骤(3)中您向SagePay发送了一个唯一的ID。此唯一ID将出现在$data中,以便您知道成功的事务。

答案 1 :(得分:0)

好吧它仍然表现为GET请求,但我至少能够使用

获取POST数据
public function postSageResult() {
   $get_dump = print_r($_POST, true); 
   Log::info('data:'.$get_dump);

任何解释为什么在Var_dump,var_export,Request :: instance()& Input :: all()都失败了