2015-12-01 26 views
2

我認爲它一定是互聯網上更通用的錯誤,我讀了很多關於這個錯誤,現在我不知道是否因爲我的代碼,我的EC2 intance,我的安全組......我變得瘋了。IPN沒有發送,握手也沒有驗證

我想,如果有人可以檢查我的代碼,我只需按照Paypal的官方沙箱網頁中的IPN教程。我正在使用laravel 5,但我認爲PHP應該可以正常工作。

public function pruebaIPN(Request $request){ 
    $data = Input::all(); 

    //return \Response::make('OK', 200); 
    header('HTTP/1.1 200 OK'); 

    $item_name  = $request->get('item_name'); 
    $item_number  = $request->get('item_number'); 
    $payment_status = $request->get('payment_status'); 
    $payment_amount = $request->get('payment_amount'); 
    $payment_currency = $request->get('payment_currency'); 
    $txn_id   = $request->get('txn_id'); 
    $receiver_email = $request->get('receiver_email'); 
    $payer_email  = $request->get('payer_email'); 

    $req = 'cmd=_notify-validate'; 

    foreach ($_POST as $key => $value) { 
    $value = urlencode(stripslashes($value)); 
    $req .= "&$key=$value";     
    } 

    $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";    
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 

    $fp = fsockopen('tls://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 

    fputs($fp, $header . $req); 

    while (!feof($fp)) {      
    $res = fgets($fp, 1024);    
     if (strcmp ($res, "VERIFIED") == 0) { 
      // ITS OK 
     } 
    else if (strcmp ($res, "INVALID") == 0) { 
      // IT IS NOT OK 
     } 
    } 

如果不是我的代碼,我會感激地知道吧,其實不是我的代碼,我只是跟着一個教程中的步驟一個接一個。

我已閱讀本:

1 - https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNIntro/

2 - https://developer.paypal.com/docs/classic/ipn/gs_IPN/

有人能幫助我嗎?

+0

的可能的複製[IPN是不是所有的路線發送,並且握手未被驗證。請查看您的信息。](http://stackoverflow.com/questions/32586711/ipn-was-not-sent-and-the-handshake-was-not-verified-please-review-your-informa) –

回答

0

您必須禁用csrf檢查您調用函數的特定路由。

要編輯的文件是應用程序\ HTTP \中間件\ VerifyCsrfToken.php

protected $except = [ 
     'paypal/*' 
    ]; 

這將禁用檢查對於以「貝寶/」開頭