在CakePHP(MVC)中设置标题

时间:2018-10-31 05:18:24

标签: cakephp paypal header

我正在尝试将PayPal的IPN代码集成到CakePHP 3中。

namespace App\Controller;
use PayPal\Api\PaypalIPN;

class IpnController extends AppController
{

public function index()
{
    $this->autoRender = false;

    $ipn = new PayPalIPN();
    // Use the sandbox endpoint during testing.
    $ipn->useSandbox();
    $verified = $ipn->verifyIPN();
    if ($verified) {
        /*
         * Process IPN
         * A list of variables is available here:
         * https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/
         */
    }
    // Reply with an empty 200 response to indicate to paypal the IPN was received correctly.
    header("HTTP/1.1 200 OK");
  }

}

这无法在PayPal端进行验证,我怀疑这与在控制器视图中设置标头有关。

有没有一种方法可以在CakePHP的控制器中正确设置标题。

我让此代码独立运行(仅在一个php文件中),而且似乎工作正常。

2 个答案:

答案 0 :(得分:1)

您不应在控制器操作中输出任何数据-这意味着您不应使用echoheader()或任何会向浏览器返回任何内容的函数或构造。如果这样做,您将遇到“已发送标题”错误。

如果要设置标题,则应使用withHeader()的{​​{1}}或withAddedHeader()方法。

对于状态码,您还可以使用Cake\Http\Response方法:

withStatus()

有关设置标头的更多信息,请参见文档:

Setting response headers in CakePHP 3

Cake\Http\Response::withStatus()

答案 1 :(得分:0)

也许这不是很讲究,但实际上可以以这种方式发送标头-只需后面跟die;exit;即可阻止应用程序进一步处理响应。

无论如何,请确保您的问题与标题无关。 IPN似乎不适用于Paypal Sandbox。也许您应该使用ApiContext类尝试其他方式?