Tất cả bài viết
Cẩm nangĐọc trong 7 phút

Order ID App Store trên biên lai của khách hàng cho bạn biết họ đã mua gì và Apple đã hoàn tiền hay chưa

Endpoint Look Up Order ID của Apple biến order ID trên biên lai App Store của khách hàng thành các giao dịch đã ký, kèm ngày và lý do hoàn tiền. Đây là cách dùng nó cho email hoàn tiền, những gì nó không làm được, và order ID của Google Play khác ra sao.

Bàn hỗ trợ khách hàng với hộp thư trên laptop và iPhone hiển thị biên lai mua hàng, nơi order ID App Store mở đầu cuộc trao đổi về hoàn tiền

Điểm chính

  • Apple gửi email biên lai có order ID mỗi lần khách hàng mua hàng trong ứng dụng, và khách hàng cũng có thể tìm order ID trong lịch sử mua hàng App Store của họ.
  • Endpoint Look Up Order ID của App Store Server API (GET /inApps/v1/lookup/{orderId}) trả về một hoặc nhiều giao dịch đã ký cho một order ID hợp lệ, nên bộ phận hỗ trợ thấy được productId và purchaseDate mà không phải đoán.
  • Một giao dịch App Store đã giải mã có revocationDate và revocationReason, nên việc tra cứu order ID cho thấy Apple đã hoàn tiền giao dịch đó hay chưa. Lý do 1 nghĩa là Apple hoàn tiền vì một vấn đề thực tế hoặc được cho là có trong ứng dụng.
  • Look Up Order ID trả về OrderLookupStatus 1 và không có mảng signedTransactions khi order ID không hợp lệ với ứng dụng của bạn, dấu hiệu của biên lai sai hoặc giao dịch từ ứng dụng khác.
  • Look Up Order ID không có trong môi trường sandbox của Apple, và giới hạn tốc độ trên môi trường production là 10 yêu cầu mỗi giây cho mỗi ứng dụng, áp dụng theo từng giờ.
  • Nhà phát triển không thể tự hoàn tiền trên App Store. Apple quyết định tại reportaproblem.apple.com, và bước cung cấp bằng chứng duy nhất của nhà phát triển là trả lời CONSUMPTION_REQUEST trong vòng 12 giờ.
  • Google Play gửi email order ID cho mỗi giao dịch mua một lần và mỗi lần gia hạn gói đăng ký, và nhà phát triển có thể tìm order ID đó trong Play Console rồi hoàn tiền trực tiếp. Play Console cho biết một khoản hoàn tiền không thể đảo ngược.

Trước khi trả lời email đòi hoàn tiền của một khách hàng iPhone, hãy hỏi order ID App Store trên biên lai Apple của họ. Chỉ một chuỗi đó, khi chạy qua endpoint Look Up Order ID của Apple, cho bạn biết họ đã mua sản phẩm nào, vào lúc nào, và Apple đã hoàn tiền hay chưa. Không có nó, bạn phải dò ảnh chụp màn hình và địa chỉ email trong cơ sở dữ liệu rồi hy vọng. Có nó, chỉ vài giây là bạn biết mình đang nói chuyện với một khách hàng trả tiền, một khách hàng đã được Apple hoàn tiền, hay một người cầm biên lai của ứng dụng khác.

Order ID App Store đến từ đâu

Tài liệu của Apple nói rất cụ thể. Khi khách hàng thực hiện một hoặc nhiều giao dịch mua trong ứng dụng của bạn, App Store gửi cho họ biên lai qua email, và biên lai đó có order ID. Khách hàng cũng có thể tìm order ID trong lịch sử mua hàng App Store. Trang lịch sử mua hàng của Apple nằm tại reportaproblem.apple.com và trong ứng dụng App Store ở mục Apps & Purchase History, mặc định hiển thị 90 ngày gần nhất, có bộ lọc cho các giao dịch cũ hơn.

Vậy là khách hàng đã cầm sẵn chìa khóa. Biểu mẫu hỗ trợ của bạn chỉ cần hỏi nó.

Vì sao địa chỉ email là chưa đủ

Apple không chia sẻ email Apple Account của khách hàng với bạn. Địa chỉ viết vào hộp thư hỗ trợ của bạn có thể chẳng liên quan gì đến tài khoản đã thanh toán. Nếu bạn đặt appAccountToken khi mua, bạn có thể gắn giao dịch với ID người dùng của mình, nhưng chỉ từ phía bạn. Order ID hoạt động từ phía khách hàng, từ một biên lai họ có thể chuyển tiếp chỉ với một lần chạm.

Look Up Order ID trả về những gì

Look Up Order ID là một phần của App Store Server API, có từ phiên bản 1.1.0. Bạn gọi GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId} với JWT đã ký của bạn. Apple cho biết phản hồi dựa trên lịch sử mua trong ứng dụng của khách hàng, bất kể họ đã cài đặt, gỡ bỏ hay cài lại ứng dụng.

Trường hoặc hành viTài liệu của Apple nói gìBộ phận hỗ trợ làm gì với nó
OrderLookupStatus 0Order ID hợp lệ. Phản hồi chứa một mảng gồm một hoặc nhiều giao dịch đã kýGiải mã từng giao dịch và đọc thông tin mua hàng
OrderLookupStatus 1Phản hồi không có mảng signedTransactionsCoi order ID là không hợp lệ với ứng dụng của bạn. Yêu cầu đúng biên lai
productId và purchaseDateApple nêu đây là các trường dùng cho hỗ trợ khách hàngXác nhận đã mua gì và khi nào
revocationDateThời điểm App Store hoàn tiền giao dịch hoặc thu hồi nó khỏi Family SharingNếu có, Apple đã trả lại tiền cho khách hàng
revocationReason0: hoàn tiền vì lý do khác, ví dụ mua nhầm. 1: hoàn tiền vì một vấn đề thực tế hoặc được cho là có trong ứng dụng của bạnGiá trị 1 là tín hiệu về sản phẩm, không chỉ là một phiếu hỗ trợ
appAccountTokenUUID bạn đặt khi mua, nếu có đặtKhớp đơn hàng với hồ sơ người dùng của bạn
price và currencyApple nói không dùng chúng để đối soát doanh thuDùng báo cáo App Store Connect cho phần tiền
SandboxEndpoint không có trong môi trường sandboxChỉ kiểm thử bằng order ID production
Giới hạn tốc độ10 yêu cầu mỗi giây cho mỗi ứng dụng, áp dụng theo giờ. Vượt quá sẽ nhận HTTP 429 với header Retry-AfterThừa đủ cho bộ phận hỗ trợ, không dành cho quét hàng loạt

Biên lai này có hợp lệ với ứng dụng của tôi không?

Đó là câu hỏi OrderLookupStatus trả lời đầu tiên. Giá trị 1 nghĩa là order ID không dẫn đến giao dịch nào trong ứng dụng của bạn. Các trường hợp thường gặp là gõ sai, biên lai của ứng dụng khác, hoặc biên lai hoàn toàn không phải từ App Store. Đừng hoàn tiền, cộng tín dụng hay khôi phục gì khi giá trị là 1. Hãy nhờ khách hàng kiểm tra lại biên lai.

Apple đã hoàn tiền giao dịch này chưa?

Kiểm tra revocationDate trên từng giao dịch đã giải mã. Nếu có giá trị, Apple đã hoàn tiền giao dịch đó hoặc thu hồi nó khỏi Family Sharing, và khách hàng đã nhận lại tiền. App Store Server Notifications của bạn lẽ ra đã gửi REFUND cho cùng giao dịch, nên đây cũng là cách rẻ để xác nhận máy chủ của bạn thực sự đã thu hồi quyền truy cập.

Một nhà phát triển so sánh biên lai App Store in ra với các dòng giao dịch trên laptop, kiểm tra order ID App Store trước khi trả lời yêu cầu hoàn tiền

Order ID không làm được gì trên App Store

Nó không thể tạo khoản hoàn tiền. Nhà phát triển không có nút hoàn tiền App Store. Apple quyết định việc hoàn tiền, và bài hỗ trợ của Apple đưa khách hàng đến reportaproblem.apple.com, nơi họ chọn "I'd like to", rồi "Request a refund", chọn lý do và chọn mục cần hoàn. Apple cũng cho biết khoản phí đang chờ xử lý không thể hoàn tiền cho đến khi khách hàng nhận được biên lai qua email.

Nơi duy nhất bạn có tiếng nói là CONSUMPTION_REQUEST của Apple. Khi khách hàng yêu cầu Apple hoàn tiền, Apple có thể gửi thông báo đó, và bạn có 12 giờ để trả lời bằng Send Consumption Information. Tra cứu order ID là công cụ hỗ trợ. Nó không mở ra khung thời gian đó và cũng không kéo dài nó.

Một email hoàn tiền tốn bao nhiêu khi bạn bỏ qua bước tra cứu

Hỗ trợ khách hàng mà không có order ID là nơi tiền rò rỉ âm thầm. Ba kiểu sau lặp đi lặp lại.

  • Quà bù thêm trên khoản đã hoàn. Apple hoàn tiền giao dịch, khách hàng cũng viết thư cho bạn, và bộ phận hỗ trợ tặng tín dụng miễn phí hoặc thêm một tháng. Mỗi khoản tín dụng bạn tặng chạy trên năng lực tính toán, lệnh gọi API và dung lượng lưu trữ mà bạn trả tiền, cho một tài khoản đã được trả lại tiền.
  • Quyền truy cập không bao giờ bị thu hồi. Nếu khâu xử lý REFUND của bạn lỗi, khách hàng đã được hoàn tiền vẫn tiếp tục sử dụng. Một lần tra cứu cho thấy revocationDate trong khi cơ sở dữ liệu của bạn vẫn ghi đang hoạt động là một báo cáo lỗi có gắn giá tiền.
  • Sai tài khoản, sửa sai chỗ. Khôi phục hoặc cộng tín dụng cho tài khoản đứng sau một email được chuyển tiếp, trong khi order ID thuộc về người khác, là trao dịch vụ trả phí cho một người chưa từng mua.

Không trường hợp nào cần đến tranh chấp hay thời hạn mới gây thiệt hại. Chúng chỉ là những câu trả lời hỗ trợ đưa ra khi thiếu dữ kiện. Một lệnh gọi API cho mỗi phiếu hỗ trợ xóa bỏ việc đoán mò.

revocationReason 1 có nghĩa là tôi đã làm sai?

Không hẳn. Apple cho biết lý do 1 nghĩa là Apple hoàn tiền vì một vấn đề thực tế hoặc được cho là có trong ứng dụng của bạn. Chữ "được cho là" mang rất nhiều sức nặng ở đây. Nhưng một cụm hoàn tiền lý do 1 trên cùng một sản phẩm, sau cùng một bản phát hành, là phản hồi sản phẩm rõ ràng nhất mà Apple đưa cho bạn. Hãy đếm chúng.

Order ID của Google Play khác ra sao

Google Play vận hành theo chiều ngược lại. Tài liệu thanh toán của Google cho biết người dùng nhận email có order ID riêng cho mỗi giao dịch mua sản phẩm một lần, cho lần mua gói đăng ký đầu tiên, và cho mỗi lần gia hạn định kỳ, và bạn có thể dùng order ID để quản lý hoàn tiền trong Play Console. Bạn tìm trong Order management theo order ID hoặc địa chỉ email đầy đủ của người dùng, rồi tự hoàn tiền.

Câu hỏiOrder ID App StoreOrder ID Google Play
Khách hàng tìm thấy ở đâuBiên lai email và lịch sử mua hàng App StoreBiên lai email cho mỗi giao dịch mua và mỗi lần gia hạn
Bạn tra cứu thế nàoLook Up Order ID trong App Store Server APITìm trong Order management của Play Console
Có hoàn tiền từ đó được khôngKhông. Apple quyết địnhCó. Hoàn tiền toàn bộ, và hoàn tiền một phần cho giao dịch trong ứng dụng và gói đăng ký
Khung thời gian gửi bằng chứngCONSUMPTION_REQUEST, 12 giờ, Apple quyết địnhXem xét chargeback qua orders.reviewrefund, 24 giờ
Khoản hoàn tiền có thể đảo ngược khôngBạn thì khôngKhông. Play Console cho biết khoản hoàn tiền không thể đảo ngược

Trên Google Play, order ID quan trọng hơn vì chính bạn là người bấm nút. Play Console cho biết hoàn tiền đơn hàng đăng ký gần nhất sẽ gỡ gói đăng ký ngay lập tức và hủy các lần gia hạn sau, còn hoàn tiền một đơn hàng cũ hơn chỉ là hoàn tiền và gói đăng ký vẫn hoạt động. Hoàn tiền một phần chỉ được hỗ trợ cho đơn hàng đặt sau tháng 3 năm 2018, và bạn không thể hoàn tiền một phần cho ứng dụng trả phí.

Đặt order ID lên đầu quy trình hỗ trợ hoàn tiền

  • Hỏi order ID trong biểu mẫu hỗ trợ, kèm một dòng gợi ý: nó nằm trong email biên lai của Apple hoặc Google Play.
  • Trên iOS, gọi Look Up Order ID, giải mã mọi giao dịch, và hiển thị productId, purchaseDate, revocationDate và revocationReason trên một màn hình cho bộ phận hỗ trợ.
  • Nếu OrderLookupStatus là 1, dừng lại và yêu cầu đúng biên lai. Không cấp gì cả.
  • Nếu revocationDate có giá trị, xác nhận quyền truy cập đã bị thu hồi trên máy chủ của bạn, rồi đóng phiếu. Không tặng bù thêm.
  • Nếu không có và khách hàng muốn lấy lại tiền, hướng họ đến reportaproblem.apple.com và chuẩn bị sẵn trình xử lý CONSUMPTION_REQUEST cho khung 12 giờ. RefundHalt trả lời yêu cầu đó bằng dữ liệu tiêu dùng mà Apple yêu cầu.
  • Trên Android, tìm đúng đơn hàng trong Play Console trước khi hoàn tiền, và chủ động chọn giữa chỉ hoàn tiền hoặc hoàn tiền và thu hồi quyền truy cập.

Câu hỏi thường gặp

Là nhà phát triển, làm sao tra cứu order ID App Store?
Gọi endpoint Look Up Order ID của App Store Server API, GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId}, với JWT đã ký của bạn. Một order ID hợp lệ trả về OrderLookupStatus 0 và một hoặc nhiều giao dịch đã ký để bạn giải mã và đọc productId, purchaseDate cùng mọi chi tiết hoàn tiền. Endpoint này không có trong sandbox.
Khách hàng tìm order ID App Store ở đâu?
Trong biên lai email Apple gửi mỗi lần họ mua hàng trong ứng dụng, và trong lịch sử mua hàng App Store tại reportaproblem.apple.com hoặc ở mục Apps & Purchase History trong ứng dụng App Store. Lịch sử mua hàng mặc định hiển thị 90 ngày gần nhất, có bộ lọc cho các giao dịch cũ hơn.
Tôi có thể hoàn tiền một giao dịch App Store bằng order ID không?
Không. Nhà phát triển không thể hoàn tiền trên App Store. Apple quyết định khi khách hàng yêu cầu tại reportaproblem.apple.com. Phần đóng góp của bạn là trả lời CONSUMPTION_REQUEST của Apple trong vòng 12 giờ bằng Send Consumption Information.
Làm sao biết Apple đã hoàn tiền một giao dịch hay chưa?
Tra cứu order ID và kiểm tra revocationDate trên từng giao dịch đã giải mã. Nếu có giá trị, Apple đã hoàn tiền giao dịch hoặc thu hồi nó khỏi Family Sharing. revocationReason 0 nghĩa là lý do khác như mua nhầm, còn 1 nghĩa là một vấn đề thực tế hoặc được cho là có trong ứng dụng của bạn.
OrderLookupStatus 1 nghĩa là gì?
Nghĩa là order ID không hợp lệ với ứng dụng của bạn, và phản hồi không có mảng signedTransactions. Thường là khách hàng gửi biên lai của ứng dụng khác, gõ sai ID, hoặc gửi biên lai không phải từ App Store. Hãy yêu cầu đúng biên lai trước khi cấp bất cứ thứ gì.

Nguồn và tài liệu đọc thêm

RefundHalt

Chế độ tự động xử lý hoàn tiền cho App Store và Google Play

Đọc tiếp

Yêu cầu hoàn tiền tiếp theo đã đang trên đường đến.

Thiết lập RefundHalt trong khoảng thời gian bạn cần để đọc thêm một email hỗ trợ về khoản hoàn tiền mà mình chưa kịp phản biện.