亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我不能得到條帶 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 關注
  • 103 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號