CakePHP集成Cashfree支付时返回环节遇CSRF Token问题求助
CakePHP集成Cashfree支付回调CSRF问题解决方案
排除回调路由的CSRF验证
CakePHP默认会对所有POST请求做CSRF校验,但Cashfree的回调请求不会携带框架生成的CSRF Token,因此需要跳过对应路由的校验:
方式一:在config/routes.php中针对回调路由禁用CSRF中间件$routes->scope('/cashfree/callback', function (RouteBuilder $builder) { $builder->disableMiddleware('CsrfProtection'); $builder->post('/', 'Cashfree::callback'); });方式二:在回调控制器的
beforeFilter方法中关闭CSRF校验public function beforeFilter(\Cake\Event\EventInterface $event) { parent::beforeFilter($event); $this->getRequest()->allowMethod(['post']); $this->getEventManager()->off($this->Csrf); }改用CakePHP规范方式获取POST数据
避免直接使用$_POST,改用框架提供的请求对象获取参数,更符合框架规范且避免全局变量潜在问题:$callbackData = $this->request->getData();强制验证回调合法性
跳过CSRF校验后,必须通过Cashfree提供的签名机制验证回调来源,防止伪造请求:// 示例:基于Cashfree文档的签名验证逻辑 $signature = $this->request->getHeaderLine('X-Cf-Signature'); $payload = json_encode($this->request->getData()); $cashfreeSecret = '你的Cashfree商户密钥'; $generatedSign = hash_hmac('sha256', $payload, $cashfreeSecret); if ($generatedSign !== $signature) { $this->response = $this->response->withStatus(403); return; }核对回调URL配置
确认Cashfree后台配置的回调URL与项目中路由完全一致,确保请求能正确匹配到处理方法。
内容的提问来源于stack exchange,提问作者Mohithaatozservices Mohithaato
相关产品推荐
相关产品推荐

