如何在条带中分离订阅和普通结帐 webhook?

时间:2021-05-03 10:21:48

标签: python stripe-payments

我为条纹制作了一个 webhook(烧瓶)。

我的应用既有一次性付款又有订阅。

我想知道如何检测是正常结帐还是订阅?

这就是我现在分离的方式,但我认为这是不推荐的方式。

我正在检查 stripe_subscription_id,如果存在,我将其视为订阅。

(charge.succeeded 也调用订阅成功)

@api.route('/stripe/webhook', methods=['GET', 'POST'])
def webhook():
    event = None
    payload = request.data

    try:
        event = json.loads(payload)
    except Exception as e:
        print('Webhook error while parsing basic request.' + str(e))
    if not event:
        return jsonify({'status': 'failed'}), 400

    # one time payout
    if event['type'] == 'charge.succeeded':
        event_intent = event['data']['object']
        payment_intent = event_intent['payment_intent']
    # payment
    if event['type'] == 'checkout.session.completed':
        checkout_session = event['data']['object']

        stripe_subscription_id = checkout_session['subscription']
        # customer_email = checkout_session['customer_email']
        if stripe_subscription_id:
            # Create a new subscription and mark it as paid this month.
            customer_subscription_mark_paid(checkout_session['id'], stripe_subscription_id)
    elif event['type'] == 'invoice.paid':
        invoice = event['data']['object']
        stripe_subscription_id = invoice['subscription']
        if stripe_subscription_id:
            # Check if this is the first invoice or a later invoice in the
            # subscription lifecycle.
            first_invoice = invoice['billing_reason'] == 'subscription_create'

            # You already handle marking the first invoice as paid in the
            # `checkout.session.completed` handler.
            # Only use this for the 2nd invoice and later, so it doesn't conflict.
            if not first_invoice:
                # Mark the subscription as paid.
                customer_subscription_mark_paid(None, stripe_subscription_id)
    elif event['type'] == 'invoice.payment_failed':

        invoice = event['data']['object']
        stripe_subscription_id = invoice['subscription']

        if stripe_subscription_id:
            customer_subscription_mark_past_due(None, stripe_subscription_id)

1 个答案:

答案 0 :(得分:1)

检查 subscription 字段是否已填没问题,但要特别确定您可以检查 mode field 的内容。

相关问题