【问题标题】:yii2 Webhook post emptyyii2 Webhook 帖子为空
【发布时间】:2019-02-15 19:47:02
【问题描述】:

我对 yii FrameWork 有点陌生,我需要帮助。

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

我可以访问控制器,但是 $_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(); 

我只有一个空数组。

经过几天的搜索,我什么也没找到……

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

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

感谢您阅读我 赛亚

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    对于同样陷入困境的任何人,我必须执行以下操作才能使其正常工作:

    为整个班级禁用 CSRF 保护

    public $enableCsrfValidation = false;

    使用 getRawBody() 代替 post()

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

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

    避免任何服务器端重定向

    在我的情况下,这意味着没有斜杠或 www。在网址中

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我试过你问的,结果是这样的:数组()所以我猜控制器没有收到任何东西。我进行的另一项测试:($_SERVER['REQUEST_METHOD'] 给了我一个机会……我很困惑
      • 这告诉我服务器正在接收一个空请求; _POST 确实是空的。这让我觉得失败是在流程执行的早期。
      • 你认为 IIS 会拒绝那个控制器上的 POST 动词吗?
      • 也许,但我认为它会拒绝所有 POST 请求。我会检查 Yii 路由器,那 c/would.
      • 好的,我正在寻找那个。如果我找到什么我会告诉你的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多