2016-10-11 15 views
5

Tôi đang bối rối về việc tại sao tài liệu Stripe của gợi ý sự kiện customer.subscription.updated không bị sa thải khi tôi tin rằng nó nên:Sự kiện customer.subscription.updated có tăng lên khi đăng ký được gia hạn không?

  • Một Sọc subscription đối tượng có các thuộc tính current_period_startcurrent_period_end đó sẽ được cập nhật bất cứ khi nào khách hàng thành công trả một thuê bao của hoá đơn (https://stripe.com/docs/api#subscriptions)
  • các tài liệu cho sự kiện customer.subscription.updated nói rằng nó ...

    Óc curs bất cứ khi nào đăng ký thay đổi. Ví dụ sẽ bao gồm chuyển đổi từ một kế hoạch này sang gói khác hoặc chuyển trạng thái từ thử nghiệm sang hoạt động.

    ... có nghĩa là sự kiện sẽ được tăng lên nếu giá trị current_period_startcurrent_period_end thay đổi, nhưng không xác nhận nếu có hoặc không có trong trường hợp này.

    Tuy nhiên trang web bên thứ ba này tuyên bố rằng trang web không được nêu lên khi thực hiện gia hạn thành công (https://www.masteringmodernpayments.com/stripe-webhook-event-cheatsheet#8).

  • Nhưng nâng cao sự kiện này chỉ có ý nghĩa ...

  • Và chắc chắn nếu ứng dụng chỉ cần thiết để theo dõi một loại sự kiện duy nhất (tức là customer.subscription.updated) sau đó nó sẽ đơn giản hóa mã chương trình mà không cần phải cũng theo dõi invoice.payment_succeeded , invoice.createdcharge.succeeded.
  • Tuy nhiên, tài liệu cho Vòng đời đăng ký (https://stripe.com/docs/subscriptions/lifecycle) hoàn toàn không đề cập đến sự kiện customer.subscription.updated nào cả.

Nó có vẻ kỳ lạ khi một sự kiện thích hợp như vậy không được nâng lên khi cần. Tài liệu cũng thực sự không nói khi các giá trị current_period_endcurrent_period_start được cập nhật, hoặc giới hạn tiện ích của chúng. Vì vậy, trong đơn của tôi, sau khi nhận được sự kiện invoice.payment_succeeded, làm cách nào để mã chương trình của tôi xác định thời điểm đăng ký của khách hàng sẽ kết thúc tiếp theo?

Trả lời

0

customer.subscription.updated được kích hoạt khi thay đổi current_period_startcurrent_period_end. Các biểu tượng này đại diện cho thời hạn thanh toán.

Khi invoice.payment_succeeded xảy ra, nó ở đó mà bạn phải cập nhật thông tin về phía bạn (ví dụ: thuê bao thời gian): https://stripe.com/docs/subscriptions/guide#step-3-sync-with-your-site

Cũng biết thêm ở đây: https://support.stripe.com/questions/what-events-can-i-see-when-a-subscription-is-renewed

+1

Tôi sẽ trân trọng thách thức tuyên bố "Khi hóa đơn.payment_succeeded xảy ra, ở đó bạn phải cập nhật thông tin về phía bạn (ví dụ: thời gian đăng ký) "- IMHO quyết định cách xử lý các sự kiện này tùy thuộc vào hành vi ứng dụng bạn đang cố gắng đạt được. đăng ký ở bên cạnh tôi khi Stripe cho tôi biết đăng ký đã được cập nhật (sự kiện customer.subscription.updated chứa đối tượng đăng ký). Sự kiện invoice.payment_succeeded chứa đối tượng hóa đơn –

+0

Bạn thích hợp với 'customer.subscription.updated' –

+0

Đồng ý với @SimonCurd, điều này khiến tôi rất bối rối khi bắt đầu, tôi đã quyết định chỉ sửa đổi đăng ký khi customer.subscription.updated bị sa thải - không có nơi nào khác. – nickdnk

3

tôi đã xác minh rằng customer.subscription.updatedđược gọi khi thời hạn thanh toán kết thúc.

Để làm điều này, tôi chặn tất cả các webhook xuất hiện vào cuối kỳ (FYI: Tôi đã sử dụng hàm AWS Lambda nhận các sự kiện từ Cổng API AWS, sau đó đặt các sự kiện trên hàng đợi SQS :))

tôi đồng ý rằng the Stripe documentation cho sự kiện customer.subscription.updated thể rõ ràng hơn và có thể bao gồm trường hợp sử dụng này bằng cách nói ....

Xảy ra bất cứ khi nào một thay đổi thuê bao. Ví dụ sẽ bao gồm khi thời hạn thanh toán kết thúc và thời hạn thanh toán mới bắt đầu, khi chuyển từ gói này sang gói khác hoặc chuyển trạng thái từ thử nghiệm sang hoạt động.

(FYI: Tôi sẽ bỏ qua các trang web cheatsheet altogether Họ làm tài liệu tham khảo chỉ thoáng qua để customer.subscription.updated - Trong bước 8 họ đang mô tả (kém) các trường hợp sử dụng "Create a khách hàng với một kế hoạch mà không có một thử nghiệm" mà. sẽ không tạo ra sự kiện customer.subscription.updated vì sự kiện này chỉ xảy ra khi đăng ký được cập nhật, chứ không phải khi nó được tạo.Địa điểm họ tham chiếu customer.subscription.updated là trong ngữ cảnh của Bước 12 "Cố gắng tính phí hóa đơn")

Để bảo vệ sọc tài liệu liên quan đến vòng đời của một thuê bao, nó nói "hình ảnh sau đây cho thấy vòng đời của sự kiện quan trọng nhất xảy ra "và tôi muốn nói customer.subscription.updated không phải là sự kiện quan trọng trong ngữ cảnh tạo hoá đơn và thực hiện thanh toán.

Một số chi tiết về cách sọc xử lý cuối kỳ:

  • Trong thử nghiệm của tôi, sọc lớn lên sự kiện customer.subscription.updated khoảng 2 phút sau dấu thời gian trong tài sản current_period_end trên thuê bao. Sự kiện này có hai đối tượng dữ liệu được liên kết với nó. Đầu tiên là đăng ký với các giá trị mới trên đó. Thứ hai là đối tượng previousAttributes với hai giá trị current_period_startcurrent_period_end trước đó.

  • Hai sự kiện được tạo đồng thời: customer.subscription.updatedinvoice.created (đây là hóa đơn cho khoảng thời gian vừa trôi qua).

  • Khoảng một giờ sau khi hóa đơn được tạo, ba sự kiện được tạo đồng thời: invoice.payment_succeeded, charge.succeededinvoice.updated.

Cách bạn xử lý thời gian thanh toán của thời hạn thanh toán so với trạng thái thanh toán của hóa đơn thực sự tùy thuộc vào bạn và tùy thuộc vào loại đơn đăng ký của bạn. Đó là vẻ đẹp của API Stripe (và nó là một thứ đẹp).

Trong trường hợp của tôi, tôi coi thanh toán của chu kỳ thanh toán riêng biệt với trạng thái thanh toán của hóa đơn. Ứng dụng của tôi quan tâm đến thời điểm thanh toán cuộn qua và cập nhật mức sử dụng dựa trên điều này, nhưng bất kỳ lỗi thanh toán nào tạo ra cảnh báo & đều được xử lý ngoại tuyến.

Tóm lại, bạn có thể sử dụng customer.subscription.updated để biết thời gian thanh toán đã thay đổi.

Các vấn đề liên quan