2017-07-18 126 views
2

我無法在PHP中獲得AWS SNS Http連接的確認。我的應用程序是在Laravel 5.1上開發的AWS SNS HTTP中的PHP訂閱確認

在AWS中,我創建了主題並添加了訂閱。我選擇了端點爲HTTP並提供了URL http://myurl.com/sns

我的PHP代碼如下

public function getSnsMessage() 
{ 
    $message = Message::fromRawPostData(); 
    $validator = new MessageValidator(); 
    // Validate the message and log errors if invalid. 
    try { 
     $validator->validate($message); 
    }catch (InvalidSnsMessageException $e) { 
     // Pretend we're not here if the message is invalid. 
     http_response_code(404); 
     error_log('SNS Message Validation Error: ' . $e->getMessage()); 
     die(); 
    } 

    // Check the type of the message and handle the subscription. 
    if ($message['Type'] === 'SubscriptionConfirmation') { 
     // Confirm the subscription by sending a GET request to the SubscribeURL 
     file_get_contents(public_path() . '/awssns.txt','SUB URL MESSAGE = '.$message['SubscribeURL'].PHP_EOL, FILE_APPEND); 
    } 
    } 

我的路由文件條目是:

Route::get('/sns', [ 
'as' => 'sns', 
'uses' => '[email protected]', 
]); 

在瀏覽器的時候我叫URL - http://myurl.com/sns,我得到下面的錯誤。

RuntimeException in Message.php line 35:SNS message type header not provided. 
1. in Message.php line 35 
2. at Message::fromRawPostData() in SnsEndpointController.php line 26 
3. at SnsEndpointController->getSnsMessage(object(Request)) 
4. at call_user_func_array(array(object(SnsEndpointController), 
     'getSnsMessage'), array(object(Request))) in Controller.php line 256 

我在作曲如下:

"aws/aws-sdk-php-laravel": "^3.1", 
"aws/aws-php-sns-message-validator": "^1.2" 

就如何解決這個錯誤,讓我訂閱的確認任何幫助嗎?

回答

2

轉到「VerifyCsrfToken」文件。 添加

namespace App\Http\Middleware; 

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; 

class VerifyCsrfToken extends BaseVerifier 
{ 
    /** 
    * The URIs that should be excluded from CSRF verification. 
    * 
    * @var array 
    */ 
    protected $except = [ 

     'sns' // your call back URL 
    ]; 
} 

轉到你的路由文件 添加後路由你的方法

Route::post('sns', '[email protected]')->name('snsendpointcontroller.getsnsmessage'); 

編輯你的方法

public function getSnsMessage() 
{ 
//All Of your code here 
error_log($message['SubscribeURL']); // To check your are receiving URL 
} 

,你將能夠看到訂購URL中錯誤日誌或在您的輸出文件

+1

感謝您的提示。 在VerifyCsrfToken中添加except之後,它開始工作。 非常感謝。 – Prabesh

0

對於遲到的答案感到抱歉......!

確保你的路徑應該是任何或交和刪除CSRF保護該路線,因爲SNS發送POST數據....

告訴我,如果它的作品..