Как синхронизировать данные о подписки между своей базой и apple?

Мне нужно реализовать покупку подписки в apple, но при этом уже имеется способ оплаты через мерчант.
Я представлял работу себе так:
Генерируется id пользователя в apple и после того, как apple отправит на webhook ответ искать пользователя по id и выдавать подписку.

Но как я понимаю, apple_id - это конфиденциальная информация и ее нет в ответе. К чему я могу привязаться в данном случае?

Вот, что возвращает apple: https://developer.apple.com/documentation/appstore...

Использую пакет: laravel-in-app-purchases

Дополнительно:

что к чему вы хотите привязывать?

  • Дмитрий, что такое мобильный телефон знаете? А приложения в нем? Вот они бывают платные. причем оплата бывает двух видов, единоразовая или обновляемая подписка.
    Вот клиент хочет узнать, какой конкретно пользователь оплатил подписку.
  • Ипатьев, ага, городские показывали эти магические коробочки. и даже там была какая то шайтан магия. Хреновое настроение? Возникло желание похамить? Не стоит. Договорились?
  • Дмитрий, Мне же нужно как-то понимать, по данным из ответа, который приходит с App Store Server Notifications какому пользователю выдавать подписку.
  • VoRoN1999, при создании платежа - айди платежа записывать в базу и привязывать к пользователю.
  • Дмитрий, Только apple на бэке не позволяет создавать заказы, получается, что фронт должен отправить запрос на генерацию заказа, получить его номер, отправить его в apple и потом я уже через хук смогу его прочитать.

    И то пока не понятно в какое поле ему это передавать )

  • VoRoN1999, код как вы отправляете подписку покажите?
  • Дмитрий, Нет его. Это делает фронт в Xcode.

    Нет api метода на покупку подписки: https://developer.apple.com/documentation/appstore...

    Все что у меня есть - это при оформлении на api метод apple отправляет тело, в котором нет данных о том, кто это купил.

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

  • VoRoN1999, а как приложение определяет что такому пользователю можно что то показывать?
  • Сколько раз вам повторять, что вам не нужно знать "кто купил"? А нужно только "что". В смысле номер заказа. Который отправляется при платеже.
    Такое ощущение, что до самого платежа вы даже еще не добрались, а все ходите тут и причитаете. Сделайте хотя бы один платеж в сандбоксе, и тысячи вопросов тут же отпадут
  • Ипатьев, Допустим я сделал запрос через песочницу, мне пришли данные от сервера уведомлений.
    Как мне теперь понять, какому пользователю в системе выдать подписку?

    У меня есть срок, товар, стоимость и вообще вся информация о товаре.

    Только вот вопрос - кому этот товар принадлежит? Получается, что пользователь его оплатил через apple, но подписку свою не получит, поскольку система не понимает, кто купил.

    Эту проблему может решить только ключ, который бэк знает на этапе формирования заказа и получает его же через сервер уведомлений, а потом по этому номеру понимает, кому принадлежит товар.

    Мой вопрос и заключается в том, как его передать (номер заказа)?

  • еще раз. не надо вот этого "допустим".
    Что я неясно написал? Сделайте оплату, вопросы снимутся.
    зачем вы вообще вопросы задаете, если не читаете, что вам пишут.
  • Ответы:

    Непонятно, зачем вам apple_id и что вы собрались к нему привязывать.
    Если вы когда-нибудь совершали покупки в интернет-магазине, то может быть заметили, что там есть такая штука, как номер заказа.
    Перед тем как отправить клиента платить, вы сообщаете банку номер заказа, а он сообщает вам номер транзакции.
    По которому вы потом смотрите ее статус.

    Вот у цветочков с пчелками все точно также (с)

    • Только apple на бэке не позволяет создавать заказы, получается, что фронт должен отправить запрос на генерацию заказа, получить его номер, отправить его в apple и потом я уже через хук смогу его прочитать.

      И то пока не понятно в какое поле ему это передавать )

    • Вроде бы через payment token https://developer.apple.com/documentation/apple_pa...

     

    Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.

     

      • Как синхронизировать данные о подписки между своей базой и apple?Есть ответ
      • 07.04.2024
      Ответить

      Для синхронизации данных о подписках между своей базой и Apple, вам потребуется использовать Apple's Server-to-Server Notifications API. Этот API позволяет вашему серверу получать уведомления о событиях подписок, таких как продление, отмена или изменение статуса подписки.

      Вот как вы можете настроить синхронизацию данных о подписках между вашей базой и Apple:

      1. Создайте серверный обработчик для получения уведомлений от Apple. Этот обработчик должен быть доступен по HTTPS URL и должен быть защищенным.

      2. Зарегистрируйте ваш серверный обработчик в настройках вашего приложения в App Store Connect. Вам потребуется указать URL вашего обработчика и выбрать типы событий, о которых вы хотите получать уведомления.

      3. В вашем серверном обработчике обработайте уведомления от Apple и обновите данные о подписках в вашей базе данных. Для этого вам понадобится разбирать JSON-объект, который приходит от Apple и обновлять соответствующие записи в вашей базе данных.

      Пример кода на PHP для обработки уведомлений от Apple:

      <?php
      // Получаем тело запроса от Apple
      $body = file_get_contents('php://input');
      $data = json_decode($body, true);
       
      // Обрабатываем уведомление
      if ($data['notification_type'] == 'DID_CHANGE_RENEWAL_PREF') {
          // Обновляем данные о подписке в базе данных
          $subscriptionId = $data['auto_renew_adam_id'];
          $newRenewalPref = $data['auto_renew_status'];
          
          // Обновляем запись в базе данных
          // Например, используя SQL запрос UPDATE
      }

      Не забудьте также добавить обработку ошибок, логирование и защиту от несанкционированного доступа к вашему серверному обработчику.

      С помощью Apple's Server-to-Server Notifications API вы сможете эффективно синхронизировать данные о подписках между своей базой и Apple, обеспечивая актуальность информации и корректную работу вашего сервиса подписок.

    Оставить комментарий