Тестирование веб-перехватчиков Paypal локально не работает - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь протестировать веб-перехватчики Paypal в своей локальной среде; в частности, прямо сейчас я отправляю себе (администратору) электронное письмо, когда пользователь отменяет свою подписку.

Я использую ngrok для создания URL-адреса (что-то вроде https://d044ce9878a1.ngrok.io), чтобы сделать мой локальный сайт общедоступным ; в моей учетной записи разработчика Paypal я связал https://d044ce9878a1.ngrok.io?paypal_listener с моим приложением.

Вот класс, который я написал для обработки веб-перехватчиков:

<?php

namespace memberships;

use Exception; 
use mailer\NotifyAdmin;  

class Webhooks {

    /**
     * Listens to Paypal's webhooks
     */

    public function __construct() {    

        // Bail out if the incoming request isn't marked with the "paypal_listener" param

        if( ! isset( $_GET[ "paypal_listener" ] ) ) { 
            return; 
        }

        // Prepare to send an email to the administrator

        $this->NotifyAdmin = new NotifyAdmin(); 

        // Get the incoming webhook

        $input = file_get_contents( "php://input" );
        $data = json_decode( $input );

        switch( $data->event_type ) {
            case "BILLING.SUBSCRIPTION.CANCELLED":
                $this->on_subscription_canceled( $data ); 
                break;
        }

    }

    /**
     * Sends an email to the user confirming that their subscription was canceled
     */

    private function on_subscription_canceled( $data ) {

        // For testing purposes, I'm sending an email to the administrator as if an error occurred
        $this->NotifyAdmin->setErrMessage( "The webhook worked!" ); 
        $this->NotifyAdmin->send_email();

    }

}

Если я имитирую отправку события веб-перехватчика через панель инструментов разработчика, код работает, и электронное письмо администратору с сообщением "The webhook worked!" успешно отправлено.

Локально мое приложение (React) находится по адресу localhost:3000. Я использую учетную запись пользователя в песочнице для регистрации и создания подписки Paypal; все работает хорошо, и если я захожу в панель инструментов Paypal песочницы, я вижу, что подписка была успешно создана и активна. Если я отменю подписку с панели управления Paypal, подписка будет успешно отменена, но веб-перехватчик не работает - я не получаю письмо "The webhook worked!". Точно так же, если я отменяю подписку из своего приложения (а не из панели управления Paypal), подписка успешно отменяется, но веб-перехватчик не работает.

Итак, вопрос в том, что, как только я убедился, что Paypal может отправлять уведомления на https://d044ce9878a1.ngrok.io?paypal_listener (потому что симулятор веб-перехватчика работает), все остальное не должно работать, или мне не хватает каких-либо других дополнительных шагов, которые нужно предпринять ?

...