STRIPE - Liên hệ bài toán sử dụng mạng hàng tháng và STRIPE

Đối với các hệ thống thương mại điện tử, việc sử dụng các dịch vụ thanh toán trực tuyến đã trở nên phổ biến. STRIPE là một trong số đó bên cạnh rất nhiều dịch vụ khác như PayPal, Payment Asia hay các hệ thống thanh toán ngân hàng trong nước hoặc ứng dụng ví điện tử như Momo.

Các hệ thống này có vai trò như một bên thứ 3, hỗ trợ việc thanh toán giữa hệ thống thương mại điện tử và người dùng, thuận tiện hơn cho việc mua sắm trực tuyến.

Bài viết sẽ đưa ra một số thành phần của STRIPE và sự giải thích (hi vọng là dễ hiểu :v) giữa các thành phần này với bài toán dịch vụ mạng bạn vẫn sử dụng hàng tháng

Customer

Hãy bắt đầu từ dịch vụ đăng kí gói mạng hàng tháng nhà bạn.

Đầu tiên bạn cần đăng kí một tài khoản, một bản hợp đồng, thêm phương thức thanh toán (như trả tiền mặt, trả qua ngân hàng, hay ví điện tử). Bạn trả luôn tiền phí cho tháng hoặc năm đầu tiên bạn sử dụng.

Với STRIPE, bạn cần tạo cho mình một tài khoản stripe. Tiếp đó bạn cần thêm thẻ và phương thức thanh toán thông qua Card API để từ đó có thể thực hiện các giao dịch với STRIPE

Product + Price

Các nhà mạng sẽ niêm yết giá dịch vụ băng thông và bạn có thể tùy chọn để sử dụng

  • Gói sử dụng hàng tháng bình dân: 200k/tháng, tốc độ 3Mbs
  • Gói sử dụng hàng tháng VIP: 300k/tháng, tốc độc 10Mbs
  • Gói sử dụng theo năm thông dụng: 2000k/năm, tốc độ 3Mbs
  • Gói sử dụng theo năm VIP: 3000k/tháng, tốc độ 10Mbs
  • Gói sử dụng theo lưu lượng: dùng bao nhiêu trả bấy nhiêu
  • ….

Các gói dịch vụ và giá như vậy được STRIPE cụ thể thành Product và Price

STRIPE cung cấp cho bạn một mô hình business và các dịch vụ sản phẩm đặt ở cùng 1 nơi. Các sản phẩm - Product (giá băng thông) xác định những gì bạn bán và giá - Prices để theo dõi số lượng và tần suất tính phí. Chúng có thể được sử dụng để mua hàng định kỳ - hàng ngày, hàng tháng, hàng năm (recurring) hoặc mua 1 lần và hỗ trợ các cấu trúc kinh doanh khác nhau từ các cấp đến thanh toán dựa trên mức sử dụng.

Product và Price là một thực thể cốt lõi (core entity) trong Stripe, dùng cho các hoạt động subscription (đăng kí), incoices và Checkout.

Các loại giá chi tiết Stripe hỗ trợ, có thể xem tại https://stripe.com/docs/billing/prices-guide

Như đã nói ở trên, các hoạt động “shopping” cho khách hàng cụ thể bằng các invoice, subscription và Checkout. Hãy qua những ví dụ nhé

Invoice

Cái này chắc chẳn cần nói bạn cũng biết. Khi mua hàng, chúng ta sẽ có hóa đơn

Invoice được sử dụng khi bạn mua hàng trên STRIPE, nó cũng giống như bạn mua các sản phẩm từ siêu thị.

Hóa đơn sử dụng mua các sản phẩm các phí một lần, còn với các phí định kì bạn cũng có thể tạo. Cái mà bạn cần quan tâm với Invoice trong STRIPE tôi nghĩ là vòng đời và các trạng thái của chúng

Subscription

Nếu chỉ có hóa đơn, bạn mua các dịch vụ theo chu kì, sau 1 tháng hay 1 năm, làm sao hệ thống có thể nhớ được ngày nào bạn cần thanh toán tiếp theo, đã thanh toán gần nhất hôm nao hay các thông tin gói dịch vụ bạn đang sử dụng kết thúc khi nào?

Tất nhiên các nhà mạng phải lưu thông tin đó. Khi bạn nộp tiền cho mỗi tháng, bạn sẽ có hóa đơn, và đơn vị cung cấp mạng sẽ lưu thông tin của bạn và các chu kì sử dụng, thanh toán tiếp theo.

Với STRIPE bạn cũng có thể hoàn toàn lưu các thông tin như vậy qua Subscription.

Với subscription, khách hàng thực hiện thanh toán định kì để có quyền truy cập vào sản phẩm. Một subscription có vẻ không khác nhiều so với khi bạn mua một chiếc ao phông hay chai nước. Tuy nhiên, để quản lý các khoản thanh toán subscription, bạn cần lưu giữ thêm các thông tin về khách hàn của mình để có thể tự động tính phí cho họ trong tương laiduy trì các quyền truy cập thích hợp tích hợp vào sản phẩm của bạn.

Rõ ràng với các sản phẩm có giá theo chu kì như vậy, bạn cần sử dụng subscripton :D

Một câu hỏi được đặt ra là nếu như subscription là các thông tin thanh toán trong tương lai, vậy bạn có thể can thiệp vào các thông tin này. Ví dụ như hủy hoặc tương lai hoặc đổi các gói dịch vụ khác?

Câu trả lời tất nhiên là được!

Đầu tiên tôi muốn nói đến trường hợp hủy các subscription. Đối với hủy, bạn có thể có 2 lựa chọn

  • Hủy ngay lập tức mà không cần chờ đến hết tháng, khi đó sẽ gọi đến API cancel subscription (hủy hợp đồng luôn, không sử dụng mạng nữa)
  • Hủy gói cước đang sử dụng sau khi hết chu kì tháng này (Tôi sẽ hủy sau khi hết chu kì tháng này). Lúc đó bạn sẽ cần cập nhật lại subscription, với trường cancel_at_period_end sang true, và Stripe sẽ chờ hết chu kì sau đó mới bắn 1 sự kiện cancel subscription này.
    https://stripe.com/docs/billing/subscriptions/cancel#canceling

Trường hợp sau là đổi các gói dịch vụ. Chẳng hạn như nếu bạn dùng mạng thấy chậm quá, sau 1 tháng, bạn muốn nâng cấp gói dịch vụ tốt hơn trong Price mà hệ thống có cung cấp (nâng cấp gói VIP theo tháng)

Lúc đó bạn cần đến nhà mạng và đăng kí gói dịch vụ mới. Sau đó đơn vị này sẽ lưu lại thông tin đó và cho vào “lịch trình” (schedule) thanh toán trong tương lai hoặc áp dụng ngay lập tức. Tùy vào các lựa chọn của bạn thì ngay lập tức hoặc hết chu kì hiện tại, đơn vị này sẽ tính phí của bạn theo mức giá mới đo. Với Stripe, nó là Subscription Schedule.

Subscription Schedule

Subscription Schedule được sử dụng để tự động thay đổi các subscription theo thời gian. Bạn có thể tạo subscription trực tiếp thông qua một schedule hoặc bạn có thể thêm schedule vào subscription đã tồn tại. Sử dụng thuộc tính phases để xác định những thay đổi bạn muốn thực hiện đối với subscription. Sau khi một schedule hoàn thành tất cả các giai đoạn (phases) của nó, nó sẽ hoàn thành dựa thuộc tính end_behavior của nó.

Nếu bạn thêm 1 subscription schedule vào 1 customer chưa có subscription, bạn chỉ việc call API thông thường.

Trong trường hợp bạn muốn thêm subscription schedule vào 1 subscription đã tồn tại, sử dụng đối số from_subscription . Tuy nhiên khi sử dụng đối số này, một vài đối số khác (như các giá trị phase) không thể được set. Do đó để tạo 1 subscription schedule với các sửa đổi khác, chúng tôi khuyên bạn tạo 2 API riêng biệt

Một lưu ý nữa là khi sử dụng from_subscription, schedule subscription sẽ trả về cho bạn với phases[0] là chu kì bạn đang sử dụng và có thể là đang trong quá trình. Lúc này, bạn không thể sửa đổi start date của nó và bạn cần truyền đúng start date đã nhận từ API create vào để không bị lỗi khi cập nhật các phase tiếp theo cho subscription này.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Nếu tạo 1 subscription schedule vào 1 subscription đã tồn tại, bạn nên sử dụng 2 API riêng biệt

# API tạo subscription schedule, sử dụng đối số from_subscription với subscription_id bạn muốn thêm schedule
curl https://api.stripe.com/v1/subscription_schedules \
-u xxx: \
-d from_subscription=sub_IYaJ8M7QOW4GnK

# API điều chỉnh lại cho các price trong tương lai, chu kì tiếp theo (định nghĩa trong phases param)
curl https://api.stripe.com/v1/subscription_schedules/sub_sched_1I6D5fEgEtsNy26hdAJQh9uQ \
-u abcdef: \
-d phases[0][items][0][price]=price_1HXfstEgEtsNy26hBZZiMTrD \
-d phases[0][items][0][quantity]=1 \
-d phases[0][proration_behavior]=none \
// Nếu subscripton đang chạy trong chu kì hiện tại, start_date ở đây phải giống với subscripton
-d phases[0][start_date]=1609834070 \
-d phases[0][end_date]=1610093270 \
-d phases[1][items][0][price]=price_1HSdCREgEtsNy26hlTiiJf1D \
-d phases[1][items][0][quantity]=1 \
-d phases[1][iterations]=1 \
-d phases[1][start_date]=1610093270 \
-d phases[1][proration_behavior]=none

Create, Update, and Schedule Subscriptions

Tham khảo thêm các trường hợp sử dụng cụ thể của Subscription Schedule: https://stripe.com/docs/billing/subscriptions/subscription-schedules/use-cases

Một vài thứ khác

Webhook

Cũng giống như Github hay Chatwork, STRIPE cũng hỗ trợ webhook giúp bạn xử lý các sự kiện trên STRIPE một cách dễ dàng và đồng bộ

Webhook của STRIPE có thể dễ dàng test trên chính máy local của bạn thông qua STRIPE CLI

Testing

STRIPE cung cấp các số thẻ và các thông tin khác cho phép bạn test các trường hợp bạn tích hợp STRIPE trong kế hoạch của mình (invoice thành công, invoice lỗi, subscription thành công ….). Sử dụng nó để kích hoạt các luồng khác nhau và đảm bảo chúng được xử lý theo ý bạn

Ref: https://stripe.com/docs/testing

Tài liệu tham khảo

STRIPE - Liên hệ bài toán sử dụng mạng hàng tháng và STRIPE

http://yoursite.com/2021/01/15/STRIPE-Lien-he-bai-toan-su-dung-mang-hang-thang-va-STRIPE/

Author

Ming

Posted on

2021-01-15

Updated on

2021-04-10

Licensed under

Comments