2013-08-10 27 views
21

Vì vậy, tôi đã thiết lập đăng ký tự động gia hạn cho ứng dụng của mình trong khoảng thời gian 1 tháng, tương đương với 5 phút trong hộp cát. Trong ứng dụng khách hàng tôi đăng ký, gửi biên nhận đến máy chủ của tôi, nó được xác minh và tôi đặt một bản ghi trong cơ sở dữ liệu của tôi mà người dùng này có đăng ký.Cách phát hiện và xác minh gia hạn cho đăng ký tự động gia hạn?

Câu hỏi của tôi là làm cách nào để kiểm tra xem đăng ký này đã được gia hạn chưa? Tôi đã đọc tài liệu và không thể tìm ra tôi nên làm gì.

Đây là nơi tôi cho đến nay:

  1. Việc tiếp nhận ban đầu mà được gửi đến máy chủ của tôi được xác nhận với một tình trạng 0, tuyệt vời. Tôi cũng nhận được latest_receipt, mà tôi thay thế trong cơ sở dữ liệu của tôi với biên nhận lâu đời nhất.
  2. Sau 6 phút khi tôi cố gắng xác minh các latest_receipt, tôi nhận được tình trạng 21006 (nhận hết hạn) và điều này:
{ receipt: 
     { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles', 
     unique_identifier: '------------', 
     original_transaction_id: '----------', 
     expires_date: '1376129825000', 
     transaction_id: '------------', 
     quantity: '1', 
     product_id: 'subscription', 
     item_id: '--------', 
     bid: 'com.--------', 
     unique_vendor_identifier: '---------', 
     web_order_line_item_id: '---------', 
     bvrs: '2.0', 
     expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT', 
     purchase_date: '2013-08-10 10:12:05 Etc/GMT', 
     purchase_date_ms: '1376129525000', 
     expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles', 
     purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles', 
     original_purchase_date: '2013-08-06 18:58:04 Etc/GMT', 
     original_purchase_date_ms: '1375815484000' }, 
     latest_expired_receipt_info: 
     { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles', 
     unique_identifier: '-------', 
     original_transaction_id: '-', 
     expires_date: '1376129825000', 
     transaction_id: '-', 
     quantity: '1', 
     product_id: 'subscription', 
     item_id: '-', 
     bid: 'com.-', 
     unique_vendor_identifier: '--', 
     web_order_line_item_id: '-', 
     bvrs: '2.0', 
     expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT', 
     purchase_date: '2013-08-10 10:12:05 Etc/GMT', 
     purchase_date_ms: '1376129525000', 
     expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles', 
     purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles', 
     original_purchase_date: '2013-08-06 18:58:04 Etc/GMT', 
     original_purchase_date_ms: '1375815484000' }, 
     status: 21006 } 

Yếu tố thứ hai trong mảng từng là latest_receipt_info, nhưng bây giờ nó latest_EXPIRED_receipt_info. Dưới đây là những gì tài liệu nói:

Ngoài trường receive_data, phản hồi cũng có thể bao gồm hai trường mới. Nếu thuê bao của người dùng đang hoạt động và được mới bởi một giao dịch diễn ra sau khi nhận máy chủ của bạn gửi đến App Store, lĩnh vực latest_receipt bao gồm một cơ sở-64 nhận được mã hóa cho việc đổi mới cuối cùng cho đăng ký này . Dữ liệu được giải mã cho biên nhận mới này cũng được cung cấp trong trường latest_expired_receipt_info. Máy chủ của bạn có thể sử dụng biên lai mới này để duy trì hồ sơ về việc gia hạn gần đây nhất.

Vì vậy, nếu phụ đã được gia hạn kể từ khi máy chủ của tôi đã kiểm tra cuối cùng, việc tiếp nhận được giải mã cho việc đổi mới phải ở trong latest_expired_receipt_info. Trong đối tượng đó, expires_date cũng giống như trong biên lai gốc expires_date.

Cái quái gì? Tôi chỉ muốn kiểm tra xem phụ có hoạt động không. Bất cứ ai có thể giải thích bằng những từ đơn giản làm thế nào để tôi làm điều đó?

Cảm ơn bạn!

Trả lời

25

Trải nghiệm của tôi. Giả sử, chúng tôi luôn gửi biên nhận ban đầu tới máy chủ của Apple.

Trong mọi trường hợp, bạn sẽ nhận được JSON có ít nhất hai trường: status (không có nhận xét) và receipt (thông tin về biên nhận mà bạn đã gửi).

Thêm vào đó:

1) Nếu thuê bao là vẫn còn hoạt động, bạn sẽ bổ sung được latest_receipt (string base64 mã hóa) và latest_receipt_info (thông tin về nhận đó).

2) Nếu đăng ký là đã hết hạn, bạn cũng sẽ nhận được latest_expired_receipt_info (thông tin về lần gia hạn cuối cùng). Có, bạn chỉ nhận được thông tin về nó, không có chuỗi được mã hóa base64.

Và có, AFAIK, không được ghi ở bất cứ đâu. Hy vọng rằng sẽ giúp.

+0

Và câu hỏi trước - tại sao hộp cát không tự động gia hạn đăng ký? Hoặc làm cách nào để tự làm mới? Ngay bây giờ biên lai hết hạn sau 5 phút và đó là tất cả. Tôi cần kiểm tra mã của tôi bằng cách nào đó. –

+4

Trong hộp cát, bạn đang làm việc với các tài khoản thử nghiệm. Bạn không thể sử dụng tài khoản thử nghiệm để đăng nhập vào iTunes và tắt tự động gia hạn đăng ký của bạn. Để cho phép bạn kiểm tra tình huống, khi đăng ký tự động gia hạn của bạn đã hết hạn và không hoạt động, Apple chỉ thực hiện 5 lần gia hạn trong hộp cát (nghĩa là bạn có giao dịch ban đầu và 5 lần gia hạn sau đó -> tổng thời lượng đăng ký là 6 lần đăng ký của bạn chiều dài). Điều này sẽ làm mới sau 8 giờ. Hoặc bạn có thể sử dụng tài khoản thử nghiệm khác. –

+0

Ok, tôi đã tìm ra. Dưới đây là giải thích đơn giản hơn: http://stackoverflow.com/questions/8033673/ios-sandbox-environment-auto-renewal-subscription –

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