Làm việc với Stripe và Reccuring Payment

Giới thiệu Giới thiệu cho các bạn sơ qua về Stripe. Đây là 1 cổng dịch vụ thanh toán tương tự như Paypal nhưng hỗ trợ lập trình viên rất nhiều và rất dễ sử dụng. Mình đặc biệt yêu thích API của Stripe, cực kỳ rõ ràng và thuận tiện khi tích hợp vào ứng dụng. Tài liệu hỗ trợ ngắn gọn, súc tích và đầy đủ.

Bạn có biết tại sao niều developer lại sử dụng Stripe cho user thanh toán bằng thẻ mà không dùng Paypal (trong khi Paypal cũng có thể cho phép bạn thanh toán bằng thẻ). Vấn đề nằm ở 3 chữ cái: PCI – một chuẩn của hiệp hội thẻ. Nó có yêu cầu đơn giản là những website nào mà có xử lý hoặc lưu trữ thông tin thẻ tín dụng của người dùng thì phải tuân theo những tiêu chuẩn mà nó đặt ra. Nếu không theo các tiêu chuẩn này, website có thể bị phạt vài ngàn đến vài trăm ngàn đô la. Tuy nhiên, để có được chứng nhận PCI Compliant thì website phải trả 1 khoản phí hàng tháng là khoảng 15-20 đô la (tùy theo loại website). Nếu khách hàng của bạn ko muốn xử lý hoặc lưu trữ thông tin thẻ trên server thì Stripe giải quyết điều này 1 cách rất là nhanh gọn. Nó cung cấp cho mình 1 file API js để gọi đến 1 dịch vụ mã hóa bên Stripe. Khi người dùng nhập thông tin thẻ tín dụng, các thông tin này sẽ được gửi qua AJAX trực tiếp đến server của Stripe. Và stripe sẽ gửi trả về cho mình 1 token đại diện cho cái thẻ tín dụng đó. Việc này đảm bảo rằng thông tin thẻ sẽ không bao giờ được gửi đến server của mình.

Recurring Payment Thanh toán khách hàng theo định kỳ là một mô hình kinh doanh phổ biến và dễ dàng thực hiện với Stripe, chỉ cần ba bước:

  • Khởi tạo Plans với thời gian interval và giá cho Plan đấy.
  • Khởi tạo Customers trên hệ thống Stripe.
  • Đăng kí Subscribe của customer để dùng Plan .

Khỏi tạo Plans Plans là các đối tượng đại diện cho một chu kỳ chi phí, tiền tệ và chu kỳ lập hoá đơn. Bạn có thể có chỉ một plan hoặc vài trăm plans , tùy thuộc vào phạm vi của các cấp dịch vụ hoặc sản phẩm bạn cung cấp.Ví dụ: nếu bạn có hai loại khách hàng: 1 nhóm khách hàng sử dụng gói basic của ứng dụng của bạn với mức giá miễn phí , 1 nhóm khách hàng khác dùng nhóm Pro với mức giá 789$/tháng .thì ta có thể đăng kí với Stripe như sau:

  1. Sử dụng API của Stripe
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_SDQA7Gruc8bLULrO5iMc1bq1"
    
    plan = Stripe::Plan.create(
      :name => "Basic Plan",
      :id => "basic-monthly",
      :interval => "month",
      :currency => "usd",
      :amount => 0,
    )
    
    plan_pro = Stripe::Plan.create(
      :name => "Professional Plan",
      :id => "professional-monthly",
      :interval => "month",
      :currency => "usd",
      :amount => 0,
    )
    
    Mỗi plan sẽ yêu cầu 1 unique ID. Bạn sẽ được cung cấp 1 ID ở trong API requests khi bạn đang ký cho 1 customer để sử dụng plan. Trên ví dụ trên ,ta sẽ có ID của plan sẽ là :id => "basic-monthly".

Đăng kí khách hàng trên hệ thống của Stripe
Customers của hệ thống Stripe đại diện cho khách hàng thực tế của bạn và cung cấp một cách dễ dàng để xử lý khoản thanh toán của họ. Thông thường, bạn sẽ lưu trữ một số siêu dữ liệu trên đối tượng khách hàng, cũng như địa chỉ email. Bạn có thể tạo khách hàng có hoặc không có phương thức thanh toán được lưu trữ-chẳng hạn như thẻ tín dụng hoặc tài khoản ngân hàng để cho phép thanh toán tiếp theo. Vì gói Basuc không có chi phí, bạn có thể đăng ký một khách hàng cho nó mà không có phương thức thanh toán. Vì kế hoạch Pro có khoản phí ban đầu và hàng tháng là 789$, chỉ những khách hàng có phương thức thanh toán được lưu trữ mới có thể đăng ký. Bạn có thể thu thập an toàn thông tin thanh toán của khách hàng thông qua Checkout hoặc Elements. Ví dụ về việc tạo ra một khách hàng qua API, không có phương thức thanh toán được lưu trữ:

your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = "sk_test_SDQA7Gruc8bLULrO5iMc1bq1"

customer = Stripe::Customer.create(
  :email => "[email protected]",
)

Stripe sẽ trả lại cho ta dữ liệu của customer dưới dạng :

{
  "id": "cus_4fdAW5ftNQow1a",
  "object": "customer",
  "account_balance": 0,
  "created": 1495414022,
  "currency": null,
  ...
  "livemode": false,
  "email": "[email protected]",
  ...
}

Đăng kí khách hàng với 1 plan trên Stripe Bây giờ bạn đã có một khách hàng đăng ký một Plan. Stripe tạo ra một hóa đơn cho mỗi chu kỳ thanh toán. Hoá đơn vạch ra những gì khách hàng nợ, phản ánh thời điểm họ sẽ hoặc bị tính phí, và theo dõi tình trạng thanh toán. Bạn thậm chí có thể thêm các mục bổ sung vào hóa đơn để tính các khoản phí một lần như phí thiết lập. Vì hầu hết hoạt động đăng ký xảy ra tự động từ thời điểm này trở đi, bạn sẽ muốn thiết lập webhook để được thông báo về các sự kiện khi chúng xảy ra.

your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = "sk_test_SDQA7Gruc8bLULrO5iMc1bq1"

Stripe::Subscription.create(
  :customer => "cus_4fdAW5ftNQow1a",
  :plan => "basic-monthly"
)

Trong quá trình hoạt động ,khách hàng hoàn toàn có khả năng thay đổi plan mà mình đăng kí ,và thời điểm charge phí sẽ là được tính từ lúc CUstomer thay đổi plan .Ví dụ về thay đổi plan :

your secret key: remember to change this to your live secret key in production
# See your keys here: https://dashboard.stripe.com/account/apikeys
Stripe.api_key = "sk_test_SDQA7Gruc8bLULrO5iMc1bq1"

subscription = Stripe::Subscription.retrieve("sub_3R3PlB2YlJe84a")
subscription.plan = "professional-monthly"
subscription.save

Tài liệu tham khảo: