ÿÿ Hướng dẫn tích hợp Stripe | Tài liệu Adapty

Tích hợp ban đầu với Stripe

Adapty hỗ trợ luồng gói đăng ký web2app bằng cách theo dõi các khoản thanh toán và gói đăng ký web được thực hiện qua Stripe.

Tích hợp này bao gồm các giao dịch mua được khởi tạo từ web (Stripe Checkout, các trang thanh toán được lưu trữ, hoặc các luồng web tùy chỉnh) và đồng bá»™ hóa chúng vá»›i quyá»n truy cập ứng dụng di động và phân tích.

Tích hợp này hữu ích trong các trưá»ng hợp sau:

  • Tá»± động cấp quyá»n truy cập vào các tính năng trả phí cho ngưá»i dùng đã mua trên web nhưng sau đó cài đặt ứng dụng và đăng nhập vào tài khoản cá»§a há»
  • Có toàn bá»™ phân tích gói đăng ký trong má»™t Adapty Dashboard duy nhất (bao gồm cohort, dá»± Ä‘oán, và các công cụ phân tích khác cá»§a chúng tôi)

Mặc dù các giao dịch mua trên web đang ngày càng phổ biến với các ứng dụng, Apple App Store chỉ cho phép hệ thống khác ngoài in-app purchase đối với hàng hóa kỹ thuật số tại Hoa Kỳ. Hãy đảm bảo bạn không quảng bá gói đăng ký web bên trong ứng dụng của mình cho các quốc gia khác. Nếu không, ứng dụng của bạn có thể bị từ chối hoặc bị cấm.

Các bước dưới đây mô tả cách cấu hình tích hợp Stripe.

Tích hợp này tập trung vào việc theo dõi và đồng bá»™ hóa các giao dịch mua Stripe trên web. Nếu bạn cần chuyển ngưá»i dùng từ ứng dụng sang má»™t trang thanh toán web, hãy xem Web paywalls.

1. Kết nối Stripe với Adapty

Tích hợp này chá»§ yếu dá»±a vào việc Adapty lấy dữ liệu gói đăng ký từ Stripe qua webhook. Do đó, bạn cần kết nối tài khoản Adapty cá»§a mình vá»›i tài khoản Stripe bằng cách cung cấp API Keys và sá»­ dụng URL webhook cá»§a Adapty trong Stripe. Äể tá»± động hóa việc cấu hình webhook, hãy cài đặt ứng dụng Adapty trong Stripe:

Các bước dưới đây giống nhau cho cả chế độ Production và Test của Stripe, nhưng bạn cần sử dụng các API key khác nhau cho mỗi chế độ.

  1. Xác định xem bạn đang kết nối Stripe ở chế độ test hay live. Nếu ban đầu bạn thực hiện ở chế độ test, bạn sẽ cần lặp lại các bước dưới đây cho chế độ live.

  2. Truy cập Stripe App Marketplace và cài đặt ứng dụng Adapty. Lưu ý rằng chế độ sandbox không há»— trợ cài đặt ứng dụng. Bạn chỉ có thể thá»±c hiện Ä‘iá»u này ở chế độ production hoặc test.

stripe1.png
  1. Cấp cho ứng dụng các quyá»n cần thiết. Äiá»u này cho phép Adapty truy cập dữ liệu và lịch sá»­ gói đăng ký. Sau đó, nhấp vào Continue to app settings để tiếp tục.

Ở cuối pop-up quyá»n, bạn có thể chá»n cài đặt ứng dụng ở chế độ live hay test.

stripe2.png
  1. Trong pop-up, tạo một restricted key mới. Bạn sẽ cần xác minh danh tính bằng email, Touch ID, hoặc security key. Sau khi tạo key, bạn sẽ không thể xem lại được nữa, vì vậy hãy lưu trữ an toàn trong trình quản lý mật khẩu hoặc secret store.
stripe4.png
  1. Sao chép key đã tạo từ pop-up và truy cập App Settings → Stripe của Adapty. Dán key vào phần Stripe App Restricted API Key tùy theo chế độ của bạn. Lưu ý rằng bạn phải tạo các key khác nhau cho chế độ test và live.
Stripe3.png

Xong rồi! Tiếp theo, hãy tạo sản phẩm trên Stripe và thêm chúng vào Adapty.

Quy trình cài đặt đã lá»—i thá»i
  1. Truy cập Developers → API Keys trong Stripe:
6549602-CleanShot_2023-12-06_at_17.29.122x.webp
  1. Nhấp vào nút Reveal live (test) key bên cạnh tiêu đỠSecret key, sao chép nó và truy cập App Settings → Stripe của Adapty. Dán key vào đây:
2989508-CleanShot_2023-12-07_at_14.59.122x.webp
  1. Tiếp theo, sao chép Webhook URL từ cuối trang tương tự trong Adapty. Truy cập Developers → Webhooks trong Stripe và nhấp vào nút Add endpoint:
e7149f5-CleanShot_2023-12-07_at_17.31.392x.webp
  1. Dán webhook URL từ Adapty vào trưá»ng Endpoint URL. Sau đó chá»n Latest API version trong trưá»ng Version cá»§a webhook. Tiếp theo chá»n các sá»± kiện sau:

    • charge.refunded
    • customer.subscription.created
    • customer.subscription.deleted
    • customer.subscription.paused
    • customer.subscription.resumed
    • customer.subscription.updated
    • invoice.created
    • invoice.updated
    • payment_intent.succeeded
cbc5404-CleanShot_2023-12-07_at_17.36.232x.webp
  1. Nhấn “Add endpoint†rồi nhấn “Reveal†bên dưới “Signing secretâ€. Äây là key dùng để giải mã dữ liệu webhook phía Adapty, hãy sao chép nó sau khi hiển thị:
0460cbb-CleanShot_2023-12-07_at_17.52.582x.webp
  1. Cuối cùng, dán key này vào App Settings → Stripe cá»§a Adapty tại mục “Stripe Webhook Secretâ€:
055db20-CleanShot_2023-12-07_at_14.56.212x.webp

2. Tạo sản phẩm trên Stripe

Nếu bạn đang thiết lập ở chế độ test, hãy đảm bảo Stripe cũng đang ở chế độ Test trước khi tiếp tục bước này.

Truy cập Product catalog cá»§a Stripe và tạo các sản phẩm bạn muốn bán cùng vá»›i các gói giá cá»§a chúng. Lưu ý rằng Stripe cho phép bạn có nhiá»u gói giá cho má»—i sản phẩm, rất hữu ích để tùy chỉnh ưu đãi mà không cần tạo thêm sản phẩm má»›i.

b202e2e-CleanShot_2023-12-06_at_15.06.262x.webp

Hiện tại Adapty chỉ há»— trợ Flat rate ($9.99/tháng) hoặc Package pricing ($9.99/10 đơn vị), vì chúng hoạt động tương tá»± như các cá»­a hàng ứng dụng. Các tùy chá»n Tiered pricing, Usage-based fee và Customer chooses price không được há»— trợ

3. Thêm sản phẩm Stripe vào Adapty

Sản phẩm là bắt buộc! Hãy chắc chắn tạo sản phẩm Stripe của bạn trong Adapty Dashboard. Adapty chỉ theo dõi các sự kiện cho các giao dịch được liên kết với những sản phẩm này, vì vậy đừng bỠqua bước này—nếu không, các sự kiện giao dịch sẽ không được tạo.

Chúng tôi xử lý Stripe tương tự như App Store và Google Play: đó chỉ là một cửa hàng khác nơi bạn bán sản phẩm kỹ thuật số. Vì vậy nó được cấu hình tương tự: chỉ cần thêm các sản phẩm Stripe (cụ thể là product_id và price_id của chúng) vào phần Products của Adapty:

stripe-add-product.webp

Product ID trong Stripe trông giống như prod_... và price ID trông giống như price_.... Chúng khá dễ tìm cho mỗi sản phẩm trong Product Catalog của Stripe, khi bạn mở bất kỳ sản phẩm nào:

14a72d7-CleanShot_2023-12-06_at_17.32.512x.webp

Sau khi bạn đã thêm tất cả các sản phẩm cần thiết, bước tiếp theo là cho Stripe biết ngưá»i dùng nào Ä‘ang thá»±c hiện giao dịch mua, để Adapty có thể nhận diện được!

4. Bổ sung thông tin ngưá»i dùng vào giao dịch mua trên web

Adapty dá»±a vào webhooks từ Stripe để cung cấp và cập nhật mức độ truy cập cho ngưá»i dùng như là nguồn thông tin duy nhất. Nhưng bạn phải cung cấp thông tin bổ sung từ phía mình khi làm việc vá»›i Stripe để tích hợp này hoạt động đúng.

Äể mức độ truy cập nhất quán trên các ná»n tảng (web hoặc di động), bạn phải đảm bảo có má»™t ID ngưá»i dùng duy nhất mà Adapty có thể nhận diện từ các webhook. Äây có thể là email, số Ä‘iện thoại hoặc bất kỳ ID nào khác từ hệ thống xác thá»±c bạn Ä‘ang sá»­ dụng.

Xác định ID bạn muốn dùng để nhận diện ngưá»i dùng. Sau đó, truy cập phần code khởi tạo thanh toán qua Stripe — và thêm ID ngưá»i dùng này vào object metadata cá»§a Stripe Subscription (sub_...) hoặc Checkout Session (ses_...) vá»›i tên customer_user_id như sau:

{'customer_user_id'ÿÿ;: "YOUR_USER_ID"}

Chỉ cần thêm một dòng đơn giản này là tất cả những gì bạn cần làm trong code. Sau đó, Adapty sẽ phân tích tất cả các webhook nhận được từ Stripe, trích xuất metadata này và liên kết chính xác các gói đăng ký với khách hàng của bạn.

User ID là bắt buộc

Nếu không có, chúng tôi không có cách nào để khá»›p ngưá»i dùng này và cấp cho há» mức độ truy cập trên di động.

Nếu bạn không cung cấp customer_user_id vào metadata, bạn sẽ có tùy chá»n để Adapty tìm kiếm customer_user_id ở các vị trí khác: email từ Customer object cá»§a Stripe hoặc client_reference_id từ Session cá»§a Stripe.

Tìm hiểu thêm vá» cấu hình hành vi tạo hồ sÆ¡ ngưá»i dùng bên dưới

Customer trong Stripe cũng là bắt buộc

Nếu bạn đang sử dụng Checkout Sessions, hãy đảm bảo bạn đang tạo Stripe Customer bằng cách đặt customer_creation thành always.

5. Cấp quyá»n truy cập cho ngưá»i dùng trên di động

Äể đảm bảo ngưá»i dùng di động đến từ web có thể truy cập các tính năng trả phí, chỉ cần gá»i Adapty.activate() hoặc Adapty.identify() vá»›i cùng customer_user_id bạn đã cung cấp ở bước trước (xem Xác định ngưá»i dùng để biết thêm).

6. Kiểm tra tích hợp của bạn

Hãy đảm bảo bạn đã hoàn thành các bước trên cho cả Sandbox và Production. Các giao dịch bạn thực hiện từ chế độ Test của Stripe sẽ được coi là Sandbox trong Adapty.

Xong rồi!

Ngưá»i dùng cá»§a bạn giá» có thể hoàn tất giao dịch mua trên web và truy cập các tính năng trả phí trong ứng dụng. Và bạn cÅ©ng có thể xem toàn bá»™ phân tích gói đăng ký cá»§a mình ở má»™t nÆ¡i duy nhất.

Hành vi tạo hồ sÆ¡ ngưá»i dùng

Adapty phải liên kết má»™t giao dịch mua vá»›i hồ sÆ¡ ngưá»i dùng để nó khả dụng trên di động — vì vậy mặc định nó tạo hồ sÆ¡ ngưá»i dùng khi nhận webhook từ Stripe. Bạn có thể chá»n dùng gì làm customer user ID trong Adapty:

  1. Mặc định và khuyến nghị: customer_user_id bạn đã cung cấp trong metadata ở bước 4 ở trên
  2. email trong Customer object của Stripe (xem tài liệu Stripe)
  3. client_reference_id trong Session object của Stripe (xem tài liệu Stripe)

Bạn có thể cấu hình ID nào bạn muốn sử dụng trong App Settings → Stripe.

Lưu ý: nếu má»™t giao dịch cụ thể từ Stripe không chứa ID được chỉ định, chúng tôi sẽ không tạo hồ sÆ¡ ngưá»i dùng. Giao dịch này sẽ vẫn ẩn danh cho đến khi được liên kết vá»›i má»™t hồ sÆ¡ nào đó (ví dụ: nếu bạn sá»­ dụng S2S validate sau đó và thông báo cho chúng tôi vá» giao dịch này theo cách thá»§ công).

Nó sẽ hiển thị trong Analytics nhưng không trong các phần dá»±a vào việc đếm hồ sÆ¡ ngưá»i dùng (LTV, Cohorts, Conversions, v.v.) và bạn sẽ không thể xem nó trong Event feed.

Bạn cÅ©ng có tùy chá»n thứ tư là không tạo hồ sÆ¡ ngưá»i dùng nào cả, nhưng Ä‘iá»u này không được khuyến nghị do các giá»›i hạn Analytics đã nêu ở trên.

Giới hạn hiện tại

Nâng cấp, hạ cấp và phân bổ phí

Các thay đổi gói đăng ký như nâng cấp hoặc hạ cấp có thể dẫn đến các khoản phí theo tá»· lệ. Adapty sẽ không tính các khoản phí này vào tính toán doanh thu. Tốt nhất là vô hiệu hóa các tùy chá»n này theo cách thá»§ công qua Stripe dashboard. Bạn cÅ©ng có thể vô hiệu hóa chúng bằng cách đặt giá trị thuá»™c tính proration_behaviour thành none qua Stripe API.

Hủy gói đăng ký

Stripe có hai tùy chá»n há»§y gói đăng ký:

  1. Há»§y ngay lập tức: Gói đăng ký há»§y ngay lập tức có hoặc không có tùy chá»n phân bổ phí
  2. Hủy vào cuối kỳ: Gói đăng ký hủy vào cuối kỳ thanh toán hiện tại (tương tự như gói đăng ký trong ứng dụng trên các cửa hàng ứng dụng).

Adapty há»— trợ cả hai tùy chá»n, nhưng tính toán doanh thu khi há»§y ngay lập tức sẽ bá» qua tùy chá»n phân bổ phí.

Vấn đỠthanh toán và thá»i gian ân hạn

Khi khách hàng gặp vấn đỠvá»›i thanh toán, Adapty sẽ tạo sá»± kiện billing issue và quyá»n truy cập sẽ bị thu hồi. Chúng tôi chưa há»— trợ Grace Period cá»§a Stripe — Ä‘iá»u này sẽ là má»™t phần cá»§a các bản phát hành trong tương lai.

Hoàn tiá»n

Adapty chỉ theo dõi hoàn tiá»n toàn bá»™. Hoàn tiá»n theo tá»· lệ hoặc má»™t phần hiện không được há»— trợ.

Tính duy nhất của Transaction ID

Adapty khá»›p hồ sÆ¡ ngưá»i dùng và giao dịch bằng store_transaction_id và store_original_transaction_id. Những giá trị này phải là duy nhất trên các môi trưá»ng Test và Production.

Tại sao Ä‘iá»u này quan trá»ng

Nếu cùng má»™t transaction ID tồn tại trong cả hai môi trưá»ng, Adapty xá»­ lý chúng như má»™t giao dịch, gây ra:

  • Giao dịch mua Production kế thừa mức độ truy cập và product ID từ Test
  • Product ID và môi trưá»ng sai trong phản hồi API
  • Liên kết hồ sÆ¡ ngưá»i dùng và sá»± kiện gói đăng ký bị gián Ä‘oạn

Cách đảm bảo tính duy nhất

Invoice ID cá»§a Stripe có thể trùng lặp giữa môi trưá»ng Test và Live. Äể ngăn xung đột giữa các môi trưá»ng, hãy chá»n má»™t trong các cách sau

Tùy chá»n 1: Äánh số theo tài khoản vá»›i tiá»n tố môi trưá»ng

Cấu hình tiá»n tố riêng cho má»—i môi trưá»ng:

  1. Trong Stripe Dashboard, chuyển sang chế độ Test.
  2. Truy cập Settings → Billing → Invoices.
  3. Äặt Invoice numbering thành Sequentially across your account.
  4. Äặt Invoice prefix thành TEST- (hoặc tiá»n tố khác dành riêng cho môi trưá»ng test).
  5. Chuyển sang chế độ Live và lặp lại các bước 2-4, sá»­ dụng LIVE- (hoặc tiá»n tố khác dành riêng cho môi trưá»ng live) làm tiá»n tố

Tùy chá»n 2: Äánh số theo khách hàng

Äặt Invoice numbering trong Stripe settings -> Billing -> Invoices tab thành Sequentially for each customer (customer-level).

Ngay cả với cấu hình trên, nếu bạn xóa một invoice, Stripe có thể tái sử dụng ID đó cho các invoice mới của cùng khách hàng. Tốt nhất là tránh xóa invoice khi có thể.

Adapty theo dõi các giao dịch mua má»™t lần (không phải gói đăng ký) được thá»±c hiện qua Stripe Checkout (mode=payment) hoặc Payment Links chỉ khi Stripe tạo invoice cho giao dịch. Theo mặc định, Stripe không tạo invoice cho các giao dịch mua Checkout má»™t lần. Trong trưá»ng hợp này, payment_intent.succeeded đến mà không có dữ liệu invoice, không đủ để Adapty ghi lại giao dịch.

Äể theo dõi các giao dịch mua Checkout má»™t lần trong Adapty, hãy bật tính năng tạo invoice khi bạn tạo session. Stripe sau đó sẽ tạo invoice và phát ra các sá»± kiện invoice.created và invoice.updated liên quan, mà Adapty xá»­ lý để ghi lại giao dịch.

Khai thác tối đa dữ liệu Stripe của bạn

Sau khi tích hợp vá»›i Stripe, Adapty sẵn sàng cung cấp thông tin chi tiết ngay lập tức. Äể tận dụng tối Ä‘a dữ liệu Stripe cá»§a bạn, bạn có thể thiết lập thêm các tích hợp Adapty để chuyển tiếp các sá»± kiện Stripe — đưa toàn bá»™ phân tích gói đăng ký vào má»™t Adapty Dashboard duy nhất.

Äể phân tích nâng cao, bạn có thể thêm variation_id vào metadata Stripe để gán giao dịch mua cho các phiên bản paywall cụ thể. Äiá»u này đặc biệt hữu ích khi triển khai các web paywall tá»± xây dá»±ng mà bạn muốn theo dõi paywall nào đã dẫn đến chuyển đổi.

Lưu ý rằng variation_id chỉ được Ä‘á»c từ metadata trong các object Stripe Subscription (sub_...) và Checkout Session (ses_...):

{
  'customer_user_id': "YOUR_USER_ID",
  'variation_id': "YOUR_VARIATION_ID"
}

Các tích hợp bạn có thể sử dụng để chuyển tiếp và phân tích các sự kiện Stripe:

Các sự kiện Stripe được hỗ trợ

Adapty hỗ trợ các sự kiện Stripe sau:

  • charge.refunded
  • customer.subscription.created
  • customer.subscription.deleted
  • customer.subscription.paused
  • customer.subscription.resumed
  • customer.subscription.updated
  • invoice.created
  • invoice.updated
  • payment_intent.succeeded
ÿÿÿÿ