是否可以将自定义数据传递给条带化签出?

2022-08-30 17:13:20

我正在遵循带有服务器集成的 Stripe Checkout 的文档:https://stripe.com/docs/payments/checkout/server

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

我有一个 Webhook 设置,当付款完成时,Stripe 会 ping 它。但是,来自 Stripe 的响应会话不包含有关所订购产品的信息,除了其名称、描述和图像。我可以使用产品名称来查询数据库,但我更喜欢ID或slug。

$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 可以 ping 回的结帐请求一起传递,以允许我查找订单并生成下载链接?


答案 1

编辑:现在确实存在于会话对象上。尽管您可能需要使用较新的API版本才能对其进行设置。metadata

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

您可以使用该字段在会话中存储一些自定义数据。请注意,内容必须是唯一的。看看这里。client_reference_id


答案 2

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

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

"metadata": {}

虽然,我用它来创建用户和保存卡片。但是,我在结帐时没有使用它,但似乎您几乎可以通过每个API来传递它。

来自 Stripe Doc

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

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


推荐