在本地测试Paypal Webhooks无法正常工作

时间:2020-06-16 10:34:04

标签: php paypal webhooks

我正在尝试在本地环境中测试Paypal Webhooks;具体来说,当用户取消订阅时,我现在正在向自己(管理员)发送电子邮件。

我正在使用ngrok生成一个URL(类似于https://d044ce9878a1.ngrok.io)来公开我的本地站点;在我的Paypal开发人员帐户中,我已将https://d044ce9878a1.ngrok.io?paypal_listener与我的应用程序相关联。

这是我编写的用于处理Webhooks的类:

<?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();

    }

}

如果我模拟通过开发人员仪表板发送Webhook事件,则代码有效,并且成功发送给管理员的电子邮件是消息"The webhook worked!"

在本地,我的(响应)应用程序位于localhost:3000。我使用沙盒用户帐户进行注册并创建Paypal订阅;一切正常,如果我登录到沙盒Paypal仪表板,我可以看到订阅已成功创建并处于活动状态。如果我从贝宝(Paypal)仪表板上取消了订阅,则订阅已成功取消,但是网络挂钩不起作用-我没有收到"The webhook worked!"电子邮件。同样,如果我从我的应用程序(而不是从Paypal仪表板)取消订阅,则该订阅已成功取消,但是webhook无效。

所以问题是,一旦我确认Paypal可以将通知发送到https://d044ce9878a1.ngrok.io?paypal_listener(因为webhook模拟器可以正常工作),其他所有功能都应该正常工作吗?或者我错过了其他额外的步骤吗?

0 个答案:

没有答案