Что такое gpa идентификатор транзакции
Что такое идентификатор транзакции?
Хэш-идентификатор или идентификатор транзакции (TxID) означает хэш транзакции. Он состоит из буквенно-цифровых символов и представляет собой идентификационный номер, присвоенный транзакции Биткойн. Каждая отдельная транзакция, которую пользователи генерируют в блокчейне Биткойн, имеет этот уникальный идентификатор. Точно так же транзакции в блокчейне Ethereum или Litecoin будут иметь уникальный хэш ID.
Например, идентификатор транзакции Биткойн выглядит так:
Хеш ID транзакции Ethereum выглядит так:
Этот уникальный идентификатор представляет собой длинную строку букв и цифр, используемую для идентификации конкретной транзакции в блокчейне.
Использование хэша и идентификатора транзакции
Все транзакции в блокчейне общедоступны. После того, как вы совершаете платеж или перевели монеты на другой адрес, транзакцию можно отследить. Также генерируется хэш ID. Используя идентификатор транзакции, можно легко отследить статус транзакции. По запросу доступна полная информация о переводе, включая адреса отправителей и получателей, общую отправленную сумму, дату, очередность блока в блокчейне, комиссию и количество подтверждений.
Хеш транзакции и идентификаторы не содержат личной информации, поэтому делиться ими безопасно. Но чем хороши хеш транзакции и её идентификатор? Они полезны во многих случаях: например, вы можете поделиться этой информацией с поставщиком услуг, чтобы сообщить им статус передачи. Кроме того, вы можете поделиться своим идентификатором транзакции с продавцом, чтобы подтвердить успешность транзакции.
Где найти хэш-идентификатор транзакции?
Предположим, вы ищете свой хэш-идентификатор какой-либо криптовалюты. В таком случае вам следует указать свой профиль на обменнике в истории платежей. Если найти историю не удалось, обратитесь в службу поддержки биржи.
Идентификатор биткойн-транзакции / хэш
В разделе «Последние транзакции» хэш транзакции можно увидеть, щелкнув на знак «?» рядом со столбцом статуса. Обратите внимание, что хеш формируется в течение определенного периода после инициирования вывода. Сколько времени займет этот процесс, зависит от загрузки сети.
Блокчейн и идентификатор транзакции
Вот как можно найти хэш-идентификатор Bitcoin, Ethereum и Bitcoin cash в блокчейн:
Android in-app purchases, часть 5: серверная валидация покупок
Всем привет, я Кирилл, СТО Adapty. Я делал систему серверной валидации для наших SDK и сегодня расскажу про то, как её настроить для приложений на Android.
Это пятая статья из серии о внедрении внутренних покупок на Android, советую познакомиться с остальными:
Android in-app purchases, часть 5: серверная валидация покупок. — Вы тут.
Что такое серверная валидация покупки?
Серверная валидация позволяет проверить подлинность покупки: устройство обращается к серверам Google за информацией, действительно ли была совершена покупка, и валидна ли она.
Зачем валидировать покупки
Серверная валидация необязательна, покупки будут работать без неё. Но с ней лучше, потому что она даёт важные преимущества:
Продвинутая аналитика платежей. Это особенно актуально для подписок. После того, как подписка активирована, списания происходят без участия устройства. Если пользователь не заходит в приложение, без серверной обработки мы не сможем своевременно получать информацию о статусе подписки: продлил, отменил, возникла проблема с платежом.
Проверка подлинности покупки. Серверная валидация позволяет убедиться, что транзакция действительно произошла, и покупка была не фродовой. Поскольку на Android процент мошеннических операций выше, чем на iOS, то в приложениях на Google Play об этом особенно важно позаботиться.
Кроссплатформенные подписки, имея данные по статусу подписки в живом режиме, можно синхронизировать подписки пользователя с другими платформами. Так, если пользователь подписался на приложение на Android, доступ к нему у него будет на iOS, Web и других платформах.
Возможность контролировать доступ к контенту со стороны сервера. Серверная валидация не даст доступ к контенту тем пользователям, которые хотят получить его, отправляя запросы к серверу.
Вообще уже один первый пункт стоит того, чтобы настроить серверную валидацию.
Валидация платежей
В целом процесс валидации платежей на Android можно описать схемой:
Серверная валидация покупок в приложениях на Android
Аутентификация запросов к Google Play Developer API
Для того, чтобы работать с Google Play Developer API, необходимо создать ключ, с помощью которого будут подписываться все запросы. Сначала надо связать аккаунт Google Play Console (место, где вы управляете приложением) с аккаунтом в Google Cloud (там будет создавать ключ для подписи запросов). После того, как всё настроено, необходимо дать права пользователю на менеджмент покупок. Чтобы подробно описать весь этот процесс, понадобится отдельная статья. К счастью, мы уже сделали пошаговую инструкцию в документации Adapty, а к выходу этой статьи я обновил скриншоты, потому что интерфейс периодически меняется.
Обратите внимание, что обычно после создания ключа необходимо ждать сутки или больше, прежде чем он заработает. Чтобы этого не делать, можно обновить описание у любого in-app продукта или подписки, тогда ключ сразу будет активным.
Мы используем официальную библиотеку google-api-python-client для работы с Google Play Developer API. Данная библиотека доступна для большинства популярных языков, и я рекомендую использовать её, потому что в ней поддерживаются все нужные методы.
Валидация транзакций о подписке
В отличии от серверной валидации iOS, в Android валидация подписок и остальных продуктов делается с помощью разных методов. Поэтому в момент валидации вам необходимо понимать, работаете ли вы с подпиской или продуктом. На практике это означает, что вам надо передавать эту информацию со стороны мобильного приложения, а также хранить флаг в базе данных, если возникнет необходимость повторной проверки токена.
Второе большое отличие — в Android у каждой транзакции есть свой токен, в то время как на iOS все транзакции хранятся в одном токене (shared secret). Это означает, что для восстановления покупок пользователя необходимо хранить все токены покупок, а не только один для любой из них.
Для валидации подписки необходимо вызвать метод purchases.subscriptions.get. По факту это вызов GET-запроса https://androidpublisher.googleapis.com/androidpublisher/v3/applications/
Все параметры обязательны:
packageName — идентификатор приложения, например, com.adapty.sample_app.
subscriptionId — идентификатор подписки, которую нужно провалидировать, например, com.adapty.sample_app.weekly_sub.
token — уникальный токен транзакции, который появляется после покупки на стороне мобильного приложения.
Для начала разберём ошибки, которые необходимо отслеживать, чтобы всё корректно работало:
400, Invalid grant: account not found — ошибка означает, что неправильно создан ключ для аутентификации запросов. Убедитесь, что используется верный аккаунт, учётные записи связаны, есть достаточные права, а также активированы необходимые API. О том, как всё правильно настроить, написано в предыдущей секции. Также обратите внимание на подсказку про обновление описания продукта.
400, The purchase token does not match the package name — эта ошибка чаще всего встречается во фродовых транзакциях. Если вы видите её в процессе тестирования, убедитесь, что вы не отправляете токен от покупки в одном приложении в другое.
403, Quota exceeded for quota metric ‘Queries’ and limit ‘Queries per day’ of service ‘androidpublisher.googleapis.com’ — превышена квота на количество запросов к API Google в сутки. По умолчанию можно отправлять не более 200000 запросов в сутки. Эту квоту можно увеличить, но для большинства приложений её должно быть достаточно. Возможно, если вы упёрлись в неё, то стоит убедиться в правильности логики работы.
410, The subscription purchase is no longer available for query because it has been expired for too long — ошибка возвращается для транзакций, где подписка истекла более 60 дней назад. По сути это не ошибка, так что не стоит её обрабатывать как ошибку.
Подписочная транзакция
В случае успешной валидации в ответ приходит информация о транзакции.
Информация о транзакции (подписка)
Чтобы понимать, есть ли у пользователя доступ к платным функциям приложения, то есть имеется ли у него активная подписка, необходимо:
Давайте разберём важные свойства подписочной транзакции:
paymentState — статус платежа, не приходит для истёкших транзакций. Возможные значения:
0 — по данной транзакции ещё не прошла оплата. В некоторых странах подписку можно оплатить в магазине, то есть сначала пользователь оформляет её на устройстве, потом идёт в терминал и оплачивает там. В целом, это редкий кейс, но стоит иметь в виду.
1 — подписка оплачена.
2 — подписка находится в триальном периоде.
3 — в следующем периоде произойдёт апгрейд или даунгрейд текущей подписки, то есть смена тарифного плана.
startTimeMillis — дата начала подписки.
expiryTimeMillis — дата окончания подписки.
autoRenewing — флаг, показывающий, будет ли продлена подписка на следующий период.
priceCurrencyCode — валюта покупки в 3-х символьном формате, например RUB.
priceAmountMicros — цена покупки. Для того, чтобы получить нормальное числовое значение цены, надо поделить данное значение на 1000000. То есть 1990000 — это 1.99.
countryCode — страна аккаунта, с которого совершена покупка, в 2-х символьном формате, например, RU.
purchaseType — тип покупки. В большинстве случаев этого ключа нет. Но при этом его важно учитывать, потому что с помощью него можно понимать, что покупка была совершена в Sandbox окружении. Возможные значения:
0 — покупка из Sandbox окружения, то есть её не нужно учитывать в аналитике.
1 — покупка оплачена промокодом.
autoResumeTimeMillis — дата, когда подписка возобновится. Приходит только для подписок, которые были поставлены на паузу. Если этот параметр есть, то доступ к платным функциям приложения не нужно предоставлять раньше указанной даты.
cancelReason — причина, по которой подписка не будет продлеваться на следующий период. Возможные значения:
0 — пользователь сам отменил автопродление.
1 — подписка отменена системой, чаще всего это связано с billing issue, то есть с пользователя не смогли снять деньги.
2 — пользователь перешёл на другую подписку.
3 — разработчик отменил подписку.
userCancellationTimeMillis — дата, когда пользователь отменил продление подписки. Приходит только если cancelReason=0 . Подписка может быть всё ещё активна, это надо смотреть по параметру expiryTimeMillis .
cancelSurveyResult — объект, в котором хранится информация о причине отмены подписки пользователем, если он ответил на данный вопрос.
introductoryPriceInfo — объект, в котором хранится информации о цене для вводного периода (специальное предложение, например 1 месяц со скидкой 50%).
promotionType — тип промокода, который был использован при активации подписки. Возможные значения:
0 — одноразовый промокод.
1 — кастомный промокод, который может быть использован несколькими пользователями. Такие коды можно использовать для рекламы у блогеров.
promotionCode — кастомный промокод, который был использован при активации подписки. Данный параметр не приходит для одноразовых промокодов.
priceChange — объект, в котором хранится информация о будущем изменении цены, а также статус того, одобрил ли пользователь это изменение или нет.
Подтверждение подписки (acknowledge subscription)
Если подписка ещё не оплачена, то её не надо подтверждать.
Отмена возобновления, отзыв, рефанд и продление подписки
Отмена возобновления. Метод purchases.subscriptions.cancel. Отменяет продление для выбранной подписки, при этом подписка будет активна до окончания текущего периода.
Рефанд (возврат денег) подписки. Метод purchases.subscriptions.refund. Возвращает пользователю деньги за подписку. При этом доступ к подписке остаётся, и в следующем периоде она автоматически продлится. В большинстве случаев вместе с рефандом надо использовать отзыв подписки.
Отзыв подписки. Метод purchases.subscriptions.revoke. Моментально прекращает действие подписки, то есть у пользователя сразу же пропадает доступ к платным функциям приложения. Подписка не будет продлеваться в дальнейшем. Обычно используется вместе с рефандом.
Продление подписки. Метод purchases.subscriptions.defer. Продлевает действие подписки до указанной даты. В запросе необходимо передать текущую дату истечения подписки и желаемую, которая обязательно больше текущей.
Валидация продуктов (не подписок)
Валидация продуктов похожа на валидацию подписок. Необходимо вызвать метод purchases.products.get, который выполнит GET-запрос https://androidpublisher.googleapis.com/androidpublisher/v3/applications/
Информация о транзакции (продукт)
Транзакция продукта содержит заметно меньше значений, чем транзакция подписки. Рассмотрим важные свойства:
kind — тип транзакции, у продуктов он всегда androidpublisher#productPurchase. С помощью этого параметра можно определять, подписка перед вами или продукт, и в зависимости от этого выбирать логику обработки.
purchaseState — статус платежа. Обратите внимание, что значения ключей тут отличаются от параметра paymentState в подписке. Возможные значения:
0 — покупка оплачена.
1 — покупка отменена, то есть она ожидала оплаты, но в итоге пользователь её не оплатил.
2 — покупка ожидает оплаты. В некоторых странах покупку можно оплатить в магазине, то есть сначала пользователь делает покупку на устройстве, потом идёт в терминал и оплачивает там. В целом, это редкий кейс, но стоит иметь в виду.
orderId — уникальный идентификатор транзакции. У каждой покупки будет свой идентификатор, его можно использовать, чтобы понимать, была ли ранее обработана данная транзакция.
purchaseTimeMillis — дата покупки.
regionCode — страна аккаунта, с которого совершена покупка в двухсимвольном формате, например, RU. Обратите внимание, что название этого параметра отличается от подписки, там он называется countryCode.
purchaseType — тип покупки. В большинстве случаев этого ключа нет. Но при этом его важно учитывать, потому что с помощью него можно понимать, что покупка была совершена в Sandbox окружении. Возможные значения:
0 — покупка из Sandbox окружения, то есть её не нужно учитывать в аналитике.
1 — покупка оплачена промокодом.
2 — покупка выдана за целевое действие, например, пользователь смотрел рекламу вместо оплаты.
Как видите, в целом валидация продукта похожа на валидацию подписки, но есть странные моменты:
Не возвращается цена, хотя это очень удобно для аналитики.
В параметре purchaseState значения сильно отличаются от значений paymentState в подписке, если это не учитывать, то будут ошибки.
Если покупка ещё не оплачена, то её не надо подтверждать.
Отслеживание рефандов (возвратов денег) подписок и продуктов
Серверные уведомления о транзакциях
Серверные уведомления (Real-time developer notifications) позволяют получать информацию о событии, которое произошло на стороне Google, на вашем сервере практически моментально. После их настройки вы будете получать информацию о новых покупках, продлениях, проблемах с платежами и так далее. Это позволяет собирать более точную аналитику, а также упрощает менеджмент состояния подписчика.
Для того, чтобы получать серверные уведомления, необходимо в Google Cloud Pub/Sub создать топик, который будет отправлять уведомления по желаемому адресу. После этого данный топик необходимо указать в разделе Monetization setup в Google Play Console. Подробнее об этом со скриншотами вы можете прочитать в документации Adapty.
Транзакция в серверном уведомлении
С помощью ключа packageName можно понять, к какому приложению относится событие. Ключ subscriptionId говорит, о какой подписке идёт речь, а с помощью purchaseToken мы можем найти конкретную транзакцию. В случае с подписками надо всегда искать последнюю транзакцию в цепочке продления, событие относится именно к ней. В ключе notificationType указан тип события. На мой взгляд, самые полезные для подписок:
2: SUBSCRIPTION_RENEWED — подписка успешно продлилась.
3: SUBSCRIPTION_CANCELED — пользователь выключил автопродление подписки. Если автопродление выключили, надо пытаться вернуть пользователя в число активных подписчиков.
12: SUBSCRIPTION_REVOKED — подписка отозвана. Нужно закрыть пользователю доступ к функциям, которые давала эта покупка.
1: ONE_TIME_PRODUCT_PURCHASED — успешная покупка продукта.
2: ONE_TIME_PRODUCT_CANCELED — покупка продукта отменилась, потому что пользователь не оплатил его.
Заключение
Серверная валидация сильно снижает возможность несанкционированного доступа к платному контенту вашего приложения и улучшает качество аналитики. При настройке серверной валидации придётся учитывать много сайд-кейсов: upgrade подписки, смена подписки, триал, introductory price, возвраты. Кроме того, есть ещё нюансы, вроде того, что Google снижает комиссию с 30% до 15% для подписок, которые продлеваются больше года. Так что весь процесс долгий и трудоёмкий.
Если хотите сэкономить ресурсы своей команды разработчиков, то советую присмотреться к Adapty.
Про Adapty
Adapty не только упрощает техническую реализацию подписок:
Встроенная аналитика позволяет быстро понять основные метрики приложения.
А/Б тесты увеличивают выручку приложения.
Интеграции с внешними системами позволяют отправлять транзакции в сервисы атрибуции и продуктовой аналитики.
Промо кампании уменьшают отток аудитории.
Open source SDK позволяет интегрировать подписки в приложение за несколько часов.
Серверная валидация и API для работы с другими платформами.
Познакомьтесь подробнее с этими возможностями, чтобы быстрее внедрить подписки в своё приложение и улучшить конверсии.
Номер транзакции – что это и где проверить?
В силу того что сегодня банковский сервис практически повсеместен и обеспечивает комфортное использование многих благ цивилизации, важно разбираться в его терминах. В данной статье разберём вопрос: номер транзакции – что это?
Что такое транзакция?
Прежде чем разбираться с определением номера транзакции, нужно понять, что представляет собой сама транзакция. Данный термин употребляется отнюдь не только в сфере банковской деятельности, но и, например, в информатике. Разумеется, в этой области знания речь ведётся не о действиях с денежными средствами, а об объединении группы логических операций.
Определение
Если же говорить о том, с чем сталкиваются клиенты банков на регулярной основе, то тут транзакции – абсолютно обыденное явление. Другое дело, что не все задумываются над тем, что они постоянно проделывают со своими деньгами, и как это называется.
Для более полного понимания сути явления необходимо рассмотреть сам процесс.
Как выглядит на практике?
В магазинах есть, как правило, так называемый POS-терминал – считывающее устройство, которое принадлежит банку-эквайеру. Он принимает заявку на реализацию перевода и переадресует её на первом этапе платёжной системе, а затем эмитенту используемой карты. При этом прекратить действие могут и платёжная система, и банковское учреждение.
Примечание 1. Эквайринг – приём к проведению оплаты банковских карт как средства осуществления платежей за товары, услуги и какие-либо работы. Занимается эквайрингом банк-эквайер – через установку и предоставление в пользование POS- и mPOS-терминалов, а также импринтеров.
Примечание 2. Банк-эмитент – организация, выпустившая и обслуживающая платёжную карту.
Если пластик, с которого его хозяин намеревается списать деньги, находится в стоп-листе, операция будет отклонена. При одобрении информация уходит к эмитенту платёжного инструмента, который или завершит транзакцию, или продолжит. Разумеется, при недостатке средств подразумеваемый клиентом результат также не возможен.
Итого. Транзакция успешно проходит, если платёжная система и банк-эмитент её одобрили. Когда операция завершена, она получает от кредитно-финансовой организации номер.
Виды и типы
Основное разделение на типы связано с технологией процесса. Итак, транзакции есть:
Есть ещё классификация по типу действия – это снятие денег, оплата и т.п.
Участники
Из тех сведений, что мы уже подали, можно выявить следующих участников любой транзакции:
Конечно, условно можно также упомянуть самого картодержателя. Но он не является участником технического процесса, а лишь запускает его, когда обращается к сервисам продажи товаров и услуг, а также работ.
Порядок проведения
В более структурированнов виде алгоритм, по которому осуществляется транзакция, выглядит так:
Примечание 3. На конечном этапе транзакции (пункт №5 списка) может добавиться валютная конвертация, если перевод трансграничный. Часто при этом пользователи сталкиваются с проблемами недополучения всех денег и больших комиссионных сборов. Изначально клиент выплачивает полную сумму, а до пункта назначения она доходит не полностью. Обращать особенное внимание на это нужно при эксплуатации сервисов крупных международных торговых площадок. К примеру, в случае с AliExpress подобное заметно на этапе предварительного списания денег во время покупки и последующего изменения точного баланса, который после проверочных мероприятий сходится.
Теперь Вы знаете все перипетии одной платёжной операции. Это и есть транзакция.
Есть нюанс. Бывает, что банковские деньги ушли на счёт магазина, но на карте они были заблокированы – до того момента, когда эмитент получит документы от эквайера. В этом случае задержка может составить месяц.
Оффлайн-операция
Теперь опишем суть оффлайновой версии транзакции.
Тут осуществляется непосредственная проверка карточного баланса. Денежные средства блокируются сразу же. Обмен сведениями с банковским учреждением отсутствует, однако сама транзакция фиксируется считывающим аппаратом.
По прошествии дня или в иные установленные сроки данные с устройства отправляются в процессинг-центр банка, где завершается их обработка.
Суть в том, что изначально все действия происходят без коммуникации. Применяется такой способ, если нет возможности использовать прямую связь.
Что такое номер транзакции и где его посмотреть?
Итак, теперь, когда мы разобрались с явлением транзакции, достаточно подробно его рассмотрев в теории и на практических примерах, можно ответить на главный вопрос статьи, касающийся номера операции.
Ранее мы уже писали о том, что номер присваивается банком, и происходит это по завершении самой процедуры.
Примечание 4. В Сбербанке Онлайн в чеке можно увидеть надпись “идентификатор операции” – это одно из названий нужного нам явления. Также встречаются термины “идентификатор платежа” и “уникальный номер платежа”.
Как проверить идентификатор банковской операции? Где можно посмотреть данные? Варианты:
Номерное значение присваивается как эмитентом, так и эквайером. Таким образом обеспечивается двусторонность процесса и исключаются какие-либо ошибки
Как проверяют статус операции по номеру?
Процесс проверки транзакции проводится на основании присвоенного ей номера.
Когда это актуально? Если клиент оплатил товар/услугу, но деньги не дошли до получателя. Тогда нужно прийти в отделение банка-эмитента эксплуатируемой карты и обратиться к сотруднику организации. Порядок действий прост:
Как видим, от самого клиента требуется совершить минимум действий. Времени это не занимает много. Единственное неудобство – то, что приходится идти/ехать в офис. Однако всё то же самое можно проделать, позвонив в клиентскую техподдержку.
Причины отклонения операции
В первой половине статьи упоминались обстоятельства отклонения операции. Может быть наложен запрет на исполнение платёжных действий. Делает это или банковская организация, являющаяся эмитентом использованной при оплате карты, или платёжная система.
Какие есть причины для запрета на проведение платежа? Рассмотрим наиболее распространённые.
Недостаток денег
Отсутствие достаточной денежной суммы на счёте покупателя – довольно очевидная ситуация. Клиент может:
Конечно, этот вопрос – сугубо в поле ответственности обывателя. Нужно своевременно мониторить баланс и контролировать передвижение своих финансов.
Попадание карты в стоп-лист
Это может произойти по инициативе платёжной системы. Основаниями для такой санкции обычно служат подозрение в нелегальной деятельности картодержателя, а также предполагаемое мошенничество, жертвой которого стал хозяин пластика.
Неправильный PIN-код
Некорректное введение PIN-кода – тоже типичная ситуация, которая ещё и может усугубиться повторным ошибочным действием. Как правило, после трёх подряд неудачных попыток уже не просто транзакция отменяется, а блокируется сама карточка.
Истекший срок работы карты
Завершившийся период действия платёжного инструмента встречается не реже, чем другие обстоятельства, в контексте проблем с проведением оплаты.
Часто обыватель забывает о дате завершения работоспособности своего пластика. Обычно карта активна на протяжении трёх лет, и прозевать момент заблаговременной замены продукта очень просто.
Напоминаем, что посмотреть месяц и год рабочего периода можно на лицевой стороне пластика.
Лимиты
Здесь речь идёт об ограничениях для международных операций. Не все банковские продукты могут быть использованы и на территории родного государства, и за рубежом. Многие карты предназначены только для внутреннего применения.
Ошибки в реквизитах
Люди регулярно допускают неточности при указании разных реквизитных данных – будь то счёт или карта получателя, свои данные и т.д.
Техническая проблема
Сбой не является такой уж редкостью в сфере банковских операций. Обычно он связан с нарушением связи или с ошибкой в работе системы.
Шесть причины из семи так или иначе связаны с ответственностью хозяина карточки. Невнимательность, забывчивость, неправомерные действия или пренебрежение правилами безопасной эксплуатации платёжного инструмента в большинстве случаев и приводят к блокированию транзакции.
Теперь Вы знаете, как используется уникальный платёжный идентификатор, кто и что имеет отношение к процессу, и через какие этапы проходит транзакция.
Заключение
Идентификатор платежа относится к разряду важных, хотя и не слишком часто нужных данных. Он нужен в ситуации, когда получателю вовремя не пришли отправленные ранее денежные средства.
Чтобы не столкнуться неожиданно с непонятным термином, хорошо время от времени пополнять свой словарный запас по теме банкинга – это не критичное знание, но оно может помочь разобраться с рядом затруднений.