我在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));
}
答案 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()都失败了