我是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
答案 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中获取请求并转储整个事件。这将是您的机器正在接收的。如果为空,则机器不会接收随请求发送的数据。