php 是否可以将自定义数据传递到条带检出?

v7pvogib  于 2023-02-28  发布在  PHP
关注(0)|答案(5)|浏览(134)

我正在按照与服务器集成的条带检验文档进行操作:https://stripe.com/docs/payments/checkout/server
示例中的代码工作正常,但我遇到的问题是在购买完成时无法跟踪用户或他们的订单。
我有一个webhook设置,当支付完成时,Stripe会发出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与 checkout 请求沿着传递,Stripe可以ping回该请求,以允许我查找订单并生成下载链接?

polkgigr

polkgigr1#

编辑:metadata现在 * 不 * 存在于Session对象上。尽管您可能需要使用更新的API版本才能设置它。

metadata在Session对象上还不存在,因此您不能使用它。
您可以使用client_reference_id字段在会话中存储一些自定义数据。但要注意的是,内容必须是唯一的。请查看此处。

c7rzv4ha

c7rzv4ha2#

你可以传递一个带有metadata键的数组,当你支付完成时,Stripe会返回你发送的这个字段。
你只需要传递这个格式。

"metadata": {}

虽然,我用它来创建用户和保存卡。然而,我没有使用它在结帐的时候,但似乎你可以通过几乎每一个API。
Stripe Doc开始,
Updateable Stripe对象(包括Account、Charge、Customer、PaymentIntent、Refund、Subscription和Transfer)具有元数据参数。您可以使用此参数将键值数据附加到这些Stripe对象。

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

lp0sw83n

lp0sw83n3#

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'}}
        )

lsmd5eda

lsmd5eda4#

我不知道你是否已经找到了解决方案,但这是我的。我已经使用了支付意图数据,并插入到这个元数据,这是我对stackoverflow的第一个帮助之一。我正在搜索从两个2天的解决方案,就是这样。所以我想帮助你。
StripeDocs不是那么清晰和有用

payment_intent_data: {
                        metadata: {
                            key1 : val1,
                            ke2  : val2,
                            key3 : val3,
                        }
                    },
rdrgkggo

rdrgkggo5#

return {
      price_data: {
        
        currency: "inr",
        product_data: {
        name: item.name,
        metadata : { //passing extra data here
          id : item.id
        } 
        },
        unit_amount: item.price*100,
      },
      quantity: item.quantity,
     
    };
  })

你可以像这样传递ID。

相关问题