Установка заголовка в CakePHP (MVC) - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь интегрировать IPN-код PayPal в 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 голосов
/ 31 октября 2018

Может быть, это не очень Cakish, но на самом деле можно отправлять заголовки таким способом - за ним просто должны следовать die; или exit;, чтобы предотвратить дальнейшую обработку ответа приложением.

Во всяком случае, наверняка ваша проблема не связана с заголовками. IPN, кажется, не работает должным образом с песочницей Paypal. Может быть, вы должны попробовать это по-другому с классом ApiContext?

0 голосов
/ 31 октября 2018

Вы не должны выводить какие-либо данные в вашем действии контроллера - это означает, что вы не должны использовать echo, header() или любую функцию или конструкцию, которая возвращала бы что-либо в браузер. В противном случае вы увидите ошибку «заголовки уже отправлены».

Если вы хотите установить заголовки, вы должны использовать withHeader() или withAddedHeader() методы Cake\Http\Response.

Для кодов состояния у вас также есть метод withStatus():

$response = $this->response;
$response = $response->withStatus(200,"OK");
return $response; // returning response will stop controller from rendering a view.

Подробнее о настройке заголовков можно найти в документации:

Настройка заголовков ответов в CakePHP 3

Cake \ Http \ Response :: withStatus ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...