是否可以将自定义数据传递到条纹签出?

时间:2019-04-18 08:49:08

标签: php stripe-payments

我正在关注与服务器集成的Stripe Checkout文档:https://stripe.com/docs/payments/checkout/server

示例中的代码可以正常工作,但是我遇到的问题是购买完成后无法跟踪用户或其订单。

我有一个Webhook设置,可以在付款完成后自动条带ping。但是,Stripe的响应会话除名称,描述和图像外,不包含有关所订购产品的信息。我可以使用产品名称来查询数据库,但我宁愿使用一个ID或一个标签。

$app->post("/stripe-pingback", function(Request $request, Response $response, array $args) {
    \Stripe\Stripe::setApiKey("xxxxx");

    // You can find your endpoint's secret in your webhook settings
    $endpoint_secret = 'xxxxx';

    $payload = $request->getBody();
    $sig_header = isset($_SERVER['HTTP_STRIPE_SIGNATURE']) ? $_SERVER['HTTP_STRIPE_SIGNATURE'] : null;
    $event = null;

    try {
        $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret);
    } catch(\UnexpectedValueException $e) {
        // Invalid payload
        http_response_code(400); // PHP 5.4 or greater
        exit();
    } catch(\Stripe\Error\SignatureVerification $e) {
        // Invalid signature
        http_response_code(400); // PHP 5.4 or greater
        exit();
    }

    // Handle the checkout.session.completed event
    if ($event->type == 'checkout.session.completed') {
        $session = $event->data->object;
        var_dump($session);

        // Possible to get custom data from session?
        $customer = $session->customer;
        $customerEmail = $session->customer_email;

        // Fulfill the purchase...
        $this->db->insertAudioPurchase();
    }

    http_response_code(200); // PHP 5.4 or greater
});

是否可以将ID与Stripe可以回退的结帐请求一起传递,以允许我查找订单并生成下载链接?

3 个答案:

答案 0 :(得分:2)

metadata在Session对象上尚不存在,因此您不能使用它。

您可以使用client_reference_id字段在会话中存储一些自定义数据。请注意,内容必须唯一。 Have a look here.

答案 1 :(得分:1)

您可以使用键metadata传递数组。付款完成后,Stripe将返回您发送的该字段。

您只需要通过这种格式即可。

"metadata": {}

尽管如此,我还是用它来创建用户卡和保存卡。但是,我在结帐时并未使用它,但似乎您几乎可以通过每个API传递它。

Stripe Doc

  

可更新的Stripe对象(包括帐户,费用,客户,PaymentIntent,退款,订阅和转帐)具有元数据参数。您可以使用此参数将键值数据附加到这些Stripe对象。

     

元数据可用于在对象上存储其他结构化信息。例如,您可以将用户的全名和来自系统的相应唯一标识符存储在Stripe Customer对象上。 Stripe不使用元数据(例如,不用于授权或拒绝收费),除非您选择向用户显示元数据,否则用户不会看到它们。

答案 2 :(得分:-1)

checkout_session = stripe.checkout.Session.create(
            customer_email='foo@bar.bar',
            success_url=domain_url + 'success?session_id={CHECKOUT_SESSION_ID}',
            cancel_url=domain_url + 'cancel/',
            payment_method_types=['card'],
            mode='subscription',
            locale='pl',
            line_items=[
                {
                    'price': 'price_*****************',
                    'quantity': 1,
                }
            ],
            subscription_data={'metadata':{'someKeyHere': 'your session variable data'}}
        )

stripe dashboad now shows metadataenter code here