为什么我无法获得条纹webhook响应

时间:2020-03-12 10:48:25

标签: php stripe-payments webhooks

因此,我是条纹新手,我正在尝试使用webhook来获取结帐付款意向响应
我的目的是将结帐响应发送到我的仪表板角度应用程序,以便我可以保存有关客户及其付款的数据,无论成功与否
所以我用了这段代码:

<?php
require_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 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.
        // handlePaymentIntentSucceeded($paymentIntent);
        break;
    case 'payment_intent.payment_failed':
        $paymentMethod = $event->data->object; // contains a \Stripe\PaymentMethod
echo '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错误,
我不知道我在做什么是错误的,还是我仍然想知道网络钩子的用途,所以有人可以告诉我该怎么做

2 个答案:

答案 0 :(得分:2)

您可以使用Stripe CLItrigger a test event到端点,甚至使用test locally by forwarding。您还可以从“条纹”面板的“ Webhooks”部分发送测试Webhooks。

您应该添加一些日志记录和write to a file来检查事件处理以进行调试。

答案 1 :(得分:-1)

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

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

        }


    }