2017-02-18 21 views
5

Как только я получаю квитанцию ​​от клиента и проверяю ее на сервере apple, тогда я получил идентификатор транзакции новой покупки (это покупка автоматической подписки) в этой квитанции. Через несколько дней я получаю новую квитанцию ​​от того же клиента и проверяю ее, происходят странные вещи: идентификатор транзакции старая покупка изменений.Apple In-app покупка transaction_id одной покупки иногда меняется

Я сравниваю данные этой покупки в старой квитанции с данными в новой квитанции, единственные изменения, вещь это поле TRANSACTION_ID, то original_transaction_id, ПОКУПКИ, expires_date, web_order_line_item_id и другие поля точно так же.

Чем я просматриваю базу данных, я обнаружил, что около 1% записей транзакций имеют такую ​​же ситуацию. И есть черта. Большая часть их идентификатора транзакции была увеличена или уменьшена на 1-2.

Раньше я считал, что идентификатор транзакции является идентификатором покупки. Кто-нибудь сталкивается с той же проблемой или знает причину?

+0

Я столкнулся с той же проблемой сейчас, и мне интересно узнать, как вы решили проблему? – Sriram

+0

Так как сейчас я не могу полагаться на transaction_id или web_order_line_item_id, я рассматриваю покупку с новой транзакцией и новой web_order_line_item_id как новую покупку. –

ответ

3

Да, мы видим, что это происходит также. Мы видим, что это вызвано нажатием кнопки «Восстановить покупку».

Если ваша кнопка «Восстановить покупку» использует API restoreCompletedTransactions, это приведет к изменению идентификатора транзакции. Мы подтвердили это с поддержкой разработчиков Apple.

По-видимому, вы можете позвонить SKReceiptRefreshRequest, а вместо этого перехватите самую последнюю квитанцию, а не переигрите все транзакции. Насколько я понимаю, это не приведет к изменению идентификаторов транзакций.

У нас есть, в частности, свидетели того, что значения web_order_line_item_id не меняются по звонкам до restoreCompletedTransactions. Однако мы получили только неоднозначный, в лучшем случае, ответ от поддержки разработчиков Apple, когда мы попросили подтверждения:

В отношении к web_order_line_item_id полю, значение будет меняться при каждом последующем обновлении.

Вы можете использовать это, до тех пор, пока вы продолжаете сохранять новое значение, поскольку возобновление подписки событие приходит.

Мы принимаем это означает, что web_order_line_item_id является уникальным для каждого обновления покупки. Который не подтверждает и не отрицает, что она остается постоянной по призывам restoreCompletedTransactions

Кроме того, я нашел эту конференцию запись на Apple/Google/Amazon повторяющееся счетов очень полезно (хотя, не для этого конкретного случая):

Rosa Gutierrez - The recurring nightmare. Implementing cross platform in-app subscription purchases

+0

Спасибо за ответ. В конце концов, вы достигли уникальности для каждой транзакции, используя web_order_line_item_id? – Sriram

+0

@Sriram Я до сих пор не уверен на 100%, что 'web_order_line_item_id' уникален во всем мире. Мы переключились на использование дублированных наших записей и вместо этого начали использовать 'SKReceiptRefreshRequest'. – plainjimbo

+1

Как раз сейчас мы протестировали функцию «Восстановить покупку» в нашем приложении, хотя она работала так, как ожидалось, она не изменила идентификатор транзакции в квитанции. – Sriram