2017-07-18 37 views
2

PHPでAWS SNSのHTTP接続の確認を取得できません。私のアプリケーションはLaravel 5.1で開発されました。PHPのAWS SNS HTTPサブスクリプション確認

私はトピックを作成し、サブスクリプションを追加しました。私はHTTPとしてエンドポイントを選択し、URL http://myurl.com/snsを提供しました。 - 私は以下のエラーを取得し、http://myurl.com/snsブラウザで

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

私はURLを呼び出すとき:

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); 
    } 
    } 

マイルートファイルエントリがあるの下

私のPHPコードです。

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 

I私の作曲で、次があります。

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

このエラーを解決するには、私のサブスクリプションの確認を取得する方法上の任意のヘルプ?

答えて

2

ゴー...それは作品だ場合

が私に教えてくれ.... SNSがPOSTデータを送信するので、あなたのルートがいずれか、またはポストすることと、そのルートのCSRF保護を削除する必要がありますことを確認してください。あなたがサブスクリプションの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 
} 

ファイル は、あなたのルートに

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 
    ]; 
} 

Go]を追加します。エラーログまたはあなたのアウトファイル

+1

あなたのヒントのおかげで。 VerifyCsrfTokenで例外を追加した後、動作を開始しました。 ありがとうございます。 – Prabesh

0

ごめんなさい...

「VerifyCsrfToken」ファイルに

関連する問題