yii2 Webhook发布空

时间:2016-11-18 14:25:41

标签: php yii2

我是yii FrameWork的新手,我需要帮助。

我需要实现一个条带webhook控制器,用于Stripe发送的订阅事件。 对于此控制器,没有视图或模型

我可以访问控制器,但$ _POST内容为空,我无法理解原因。

是否可以在没有视图的情况下使用动词?

这是一个例子:

class StripeWebhookController extends Controller
{
     public function beforeAction($action)
    {
        if ($action->id == 'index') {
          $this->enableCsrfValidation = false;
         }

        return parent::beforeAction($action);
    }

public function actionIndex()
{   
  header('Content-Type: text/html; charset=utf-8');

    StripeLoader::autoload();
    \Stripe\Stripe::setApiKey( Settings::get("stripe_secret_key") );
       // retrieve the request's body and parse it as JSON
       $input = file_get_contents('php://input'); // -> here $input is null

      $event_json = json_decode($input, true);

    //      Do the work...
}

我使用了

 print_r(Yii::$app->request->post() /*$_POST*/); exit(); 

我只有一个空数组。

经过几天的搜索,我一无所获......

如果有人有想法,我会很乐意接受它

附加信息:我们使用Yii2框架在IIS Web服务器上运行

感谢您的阅读 cya

2 个答案:

答案 0 :(得分:4)

对于同样被卡住的人,我必须执行以下操作才能使其正常工作:

为整个班级禁用CSRF保护

public $enableCsrfValidation = false;

使用getRawBody()代替post()

$data = json_decode(Yii::$app->request->getRawBody());

在框架之外,您将使用file_get_contents("php://input")

避免任何服务器端重定向

就我而言,这意味着没有斜杠或www。在网址中

答案 1 :(得分:0)

如果Yii::$app->request->post()为空,则请求没有POST数据。在beforeAction中获取请求并转储整个事件。这将是您的机器正在接收的。如果为空,则机器不会接收随请求发送的数据。