为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我不能得到条带 webhook 响应

为什么我不能得到条带 webhook 响应

PHP
元芳怎么了 2022-10-28 15:24:51
所以我是 Stripe 的新手,我正在尝试使用 webhook 获取结帐付款意图响应,我的目的是将结帐响应发送到我的仪表板角度应用程序,以便我可以保存有关客户端的数据以及付款是否成功所以我使用了这段代码:<?phprequire_once('vendor/autoload.php');\Stripe\Stripe::setApiKey('sk_test_xxx');$payload = @file_get_contents('php://input');$event = null;try {    $event = \Stripe\Event::constructFrom(        json_decode($payload, true)    );} catch(\UnexpectedValueException $e) {    // Invalid payload    http_response_code(400);    exit();}$payload = @file_get_contents('php://input');$event = null;try {    $event = \Stripe\Event::constructFrom(        json_decode($payload, true)    );} catch(\UnexpectedValueException $e) {    // Invalid payload    http_response_code(400);    exit();}print_r($payload);// Handle the eventswitch ($event->type) {    case 'payment_intent.succeeded':        $paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntentecho 'success';        // Then define and call a method to handle the successful payment intent.        // handlePaymentIntentSucceeded($paymentIntent);        break;    case 'payment_intent.payment_failed':        $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethodecho 'failed';        // Then define and call a method to handle the successful attachment of a PaymentMethod.        // handlePaymentMethodAttached($paymentMethod);        break;    // ... handle other event types    default:        // Unexpected event type        http_response_code(400);        exit();}http_response_code(200); 然后我运行结帐测试,完成并获得成功页面后,我尝试访问 www.website.com/webhooks.php 它总是给我一个 400 错误,我不知道我在做什么是错的以及如何使用 webhook 我仍在研究它,所以有人可以告诉我该怎么做
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超6个赞

您可以使用Stripe CLI触发测试事件到您的端点,甚至可以通过转发在本地进行测试。您还可以从 Stripe 仪表板的 Webhook 部分发送测试 webhook。

您应该添加一些日志记录并写入文件以检查要调试的事件处理。


查看完整回答
反对 回复 2022-10-28
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

所以我的代码的问题是我不应该访问 www.website.com/webhooks.php 来获取我的响应,相反,我应该将响应存储到数据库或文件中,或者将其发送到这样的地方:


    <?php

    require_once('vendor/autoload.php');

    \Stripe\Stripe::setApiKey('sk_test_xxxx');


    $payload = @file_get_contents('php://input');

    $event = null;


    try {

        $event = \Stripe\Event::constructFrom(

            json_decode($payload, true)

        );

    } catch(\UnexpectedValueException $e) {

        // Invalid payload

        http_response_code(400);

        exit();

    }


    $payload = @file_get_contents('php://input');

    $event = null;


    try {

        $event = \Stripe\Event::constructFrom(

            json_decode($payload, true)

        );

    } catch(\UnexpectedValueException $e) {

        // Invalid payload

        http_response_code(400);

        exit();

    }

    print_r($payload);

    // Handle the event

    switch ($event->type) {

        case 'payment_intent.succeeded':

            $paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntent

    //echo 'success';

            // Then define and call a method to handle the successful payment intent.

            $msg='success';

            handlePaymentIntentSucceeded($paymentIntent,$msg);

            break;

        case 'payment_intent.payment_failed':

            $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod


            $msg='failed';

            handlePaymentIntentSucceeded($paymentMethod,$msg);

            // Then define and call a method to handle the successful attachment of a PaymentMethod.

            // handlePaymentMethodAttached($paymentMethod);

            break;

        case 'payment_intent.canceled':

            $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod


            $msg='canceled';

            handlePaymentIntentSucceeded($paymentMethod,$msg);

            // Then define and call a method to handle the successful attachment of a PaymentMethod.

            // handlePaymentMethodAttached($paymentMethod);

            break;

        // ... handle other event types

        case 'payment_intent.created':

            $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod


            $msg='created';

            handlePaymentIntentSucceeded($paymentMethod,$msg);

            // Then define and call a method to handle the successful attachment of a PaymentMethod.

            // handlePaymentMethodAttached($paymentMethod);

            break;

        case 'payment_intent.processing':

            $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod


            $msg='processing';

            handlePaymentIntentSucceeded($paymentMethod,$msg);

            // Then define and call a method to handle the successful attachment of a PaymentMethod.

            // handlePaymentMethodAttached($paymentMethod);

            break;


        default:

            // Unexpected event type

            http_response_code(400);

            exit();

    }


    http_response_code(200);



    function handlePaymentIntentSucceeded($paymentIntent,$status){



        $data=[

            'amount'=>$paymentIntent->amount,

            'name'=>$paymentIntent->charges->data[0]->billing_details->name,

            'email'=>$paymentIntent->charges->data[0]->billing_details->email,

            'error'=>$paymentIntent->last_payment_error->message,

            'status'=>$status


        ];

        $date=date("Y/m/d");


        header("Access-Control-Allow-Origin: *");

        header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");

        header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

    // db credentials

        define('DB_HOST', 'localhost');

        define('DB_USER', 'root');

        define('DB_PASS', '');

        define('DB_NAME', 'database');


    // Connect with the database.

        function connect()

        {

            $connect = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);


            if (mysqli_connect_errno($connect)) {

                die("Failed to connect:" . mysqli_connect_error());

            }

            mysqli_set_charset($connect, "utf8");


            return $connect;

        }


        $con = connect();





        // Store data into a database .

        $sql = "INSERT INTO `ordre`( `amount`, `email`, `name`, `status`, `msg`, `date`) VALUES ({$data['amount']},'{$data['email']}','{$data['name']}','{$data['status']}',\"{$data['error']}\",'{$date}')";




        if(mysqli_query($con,$sql))

        {

            http_response_code(201);

//to check if the storage process is done and

            $myFile = "https://6537bee0.ngrok.io/file.txt";

            $myFileLink2 = fopen($myFile2, 'w+') or die("Can't open file.");

            $newnbord ='done';

            fwrite($myFileLink2, $newnbord);

            fclose($myFileLink2);

            return $newnbord ;

        }

        else

        {  http_response_code(422);

            // write error code in a file

            http_response_code(201);

            $myFile2 = "https://6537bee0.ngrok.io/file.txt";

            $myFileLink2 = fopen($myFile2, 'w+') or die("Can't open file.");

            $newnbord =mysqli_error($con).$sql

            ;

            fwrite($myFileLink2, $newnbord);

            fclose($myFileLink2);

            return $newnbord ;


        }



    }



查看完整回答
反对 回复 2022-10-28
  • 2 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号