Skip to content

Подводные камни Store #3: Нельзя назвать пожертвованием

2026-05-30

Теги: Windows · Microsoft Store · Подводные камни Store


Ещё один подводный камень Store. Этот застал меня врасплох.

Что произошло

У меня есть бесплатное инструментальное приложение для Windows. Я хотел добавить возможность для пользователей поддержать разработку, поэтому создал внутриприложенное дополнение — простую покупку "Support the Author". В списке Store оно называлось спонсорской опцией, интерфейс в приложении говорил "Consider buying the dev a coffee", а покупка проходила через собственную систему IAP Microsoft Store.

Пришёл результат сертификации:

Status: Attention needed

10.8.2 Third-Party In-Product Purchases

Any developer donations must only be made through a secure third-party purchase processing API. Please use one of those methods or remove any donation options that use the Microsoft API.

Подождите — отклонено за сбор пожертвований через API внутриприложенных покупок?

Политика

Политика Microsoft Store 10.8.2 гласит:

You must use the Microsoft payment request API or a secure third-party purchase API to receive voluntary donations from users. However, if the user receives digital goods or services in return, including but not limited to additional features or removal of advertising, you must use the Microsoft Store in-product purchase API instead.

Перевод: Вы должны использовать Microsoft payment request API или безопасный сторонний API покупок для получения добровольных пожертвований от пользователей. Однако, если пользователь получает цифровые товары или услуги взамен, включая, помимо прочего, дополнительные функции или удаление рекламы, вы должны использовать Microsoft Store in-product purchase API.

Здесь нужно различать два разных API Microsoft:

  • Microsoft Payment Request API: используется для общих платёжных запросов, может принимать пожертвования
  • Microsoft Store In-Product Purchase API: используется для внутриприложенных покупок цифровых товаров и услуг, нельзя использовать для получения пожертвований

Какую API использовать

Нужно использовать внутриприложенную API покупок Microsoft

Если пользователь платит и получает любую цифровую выгоду в приложении (включая, помимо прочего, перечисленные ниже случаи), необходимо использовать API внутриприложенных покупок:

  • Разблокировка функций: переход с бесплатной версии на Pro, разблокировка продвинутых инструментов, активация VIP-привилегий
  • Удаление рекламы: платное постоянное или периодическое отключение рекламы в приложении
  • Цифровая валюта/предметы: монеты, алмазы, скины в играх или токены/баллы в приложениях
  • Подписки: платные услуги членства с ежемесячной или ежегодной оплатой

Внимание: даже если вы маскируете эти действия под «спонсорство», «чаевые» или «пожертвование», если после оплаты пользователя происходит любое из перечисленных цифровых изменений (например, выдача эксклюзивного значка VIP, удаление всплывающих окон), Microsoft определит это как «покупку цифрового продукта» и потребует использовать API внутриприложенных покупок.

Категорически нельзя использовать внутриприложенную API покупок Microsoft

В следующих сценариях использование API внутриприложенных покупок приведёт к отклонению:

  • Физические товары: продажа одежды, книг, оборудования
  • Услуги реального мира: бронирование билетов в кино, заказ доставки, вызов такси, бронирование отеля
  • Чисто благотворительные пожертвования/азартные игры на реальные деньги: сбор средств для законных благотворительных организаций или азартные игры с реальными деньгами, разрешённые законом
  • Чисто личные чаевые (без возврата): пользователь просто считает, что программировать тяжело, и даёт вам денег, но в приложении нет никаких изменений функций или интерфейса. В этом случае необходимо использовать сторонний платёжный процессор или Payment Request API

Простой критерий оценки

После оплаты пользователя должна ли измениться логика кода в приложении (или поля в базе данных)?

  • Должна (например, isPro становится true, или adCount становится 0) → Необходимо использовать API внутриприложенных покупок Microsoft
  • Не должна (код никак не меняется, пользователь просто проявляет поддержку, или ожидает доставки физического товара) → Необходимо использовать сторонний платёжный процессор или Microsoft Payment Request API

Возвращаясь к моему случаю

Моё дополнение называлось "Support the Author" со слоганом "Consider buying the dev a coffee" — по формулировке это были чисто чаевые. Но оно использовало API внутриприложенных покупок Store, а политика прямо запрещает использовать этот API для чистых чаевых.

На самом же деле, это дополнение давало пользователю значок сторонника или подобное изменение — иными словами, оно уже было цифровым товаром. По критерию выше: есть изменение — значит цифровой товар, а цифровой товар должен проходить через API внутриприложенных покупок. То есть этот платёж теоретически мог проходить только через API внутриприложенных покупок, а не через Payment Request API или сторонний платёжный процессор.

Так что проблема была вовсе не в способе оплаты, а в неправильном описании. Заменив "Support the Author" на "Upgrade to Pro", а "Consider buying the dev a coffee" на текст, описывающий конкретный возврат, приложение прошло сертификацию.

Итоги

  • API внутриприложенных покупок Microsoft предназначена только для транзакций с цифровыми товарами и услугами — после оплаты пользователя должно произойти существенное изменение в приложении
  • Чистые чаевые (без каких-либо изменений в приложении) не могут использовать API внутриприложенных покупок — используйте Payment Request API или сторонний платёжный процессор
  • Критерий: после оплаты пользователя должен измениться код/база данных? Изменяется → API внутриприложенных покупок; не изменяется → сторонний платёжный процессор
  • Нейминг и описание должны соответствовать реальному поведению: если после оплаты есть изменения, описывайте конкретный возврат, избегайте формулировок пожертвование, спонсорство, чаевые

Часть серии Подводные камни Store.