Идея реализации личной коллекции WeChat и Alipay

WeChat Alipay

Персональная коллекция, упомянутая в заголовке, относится не к обычному скан-коду, а к типу, который может поддерживать обратный вызов.Например, после оплаты онлайн-торгового центра торговый центр может узнать статус платежа и автоматически изменить статус заказа на "оплаченный". Эта форма оплаты, будь то WeChat, Alipay или UnionPay, в настоящее время не открыта для физических лиц, и для ее применения необходимо иметь корпоративную квалификацию. Однако для многих разработчиков это иногда небольшое приложение для проверки.Если они хотят иметь платежные функции, но у них нет корпоративной квалификации, они, естественно, не могут подать заявку на интерфейс, такой как WeChat Alipay, или даже сторонний агрегатный платеж. , (Ping++) также не может применяться. В этой статье представлена ​​идея использования персонального Alipay (также возможен WeChat) для самостоятельной реализации платежной функции Стоимость старая.Телефон на Андроиде, остальные совершенно бесплатно, с кодом коллекции Alipay (бесплатное снятие наличных) можно сделатьнулевая ставка.

1. Основная идея

Основная идея этого решения очень проста, похожа на обычно используемый сканер для сканирования платежных данных веб-страницы, но здесь мы используем мобильное приложение. Условно говоря, перехватывать push-сообщения мобильного приложения проще, и ему не нужны различные антикраулинговые меры, которые должны быть у WeChat Alipay, но недостаток в том, что меньше информации, которую можно получить, и нет такая информация, как серийный номер и плательщик.Сумма только одна.

Итак, наша идея:

  1. Создайте заказ и покажите пользователю QR-код (фиксированный или не квотированный)
  2. После оплаты пользователем мобильное приложение продавца получает платежное сообщение от Alipay.
  3. Приложение для Android перехватывает платежную информацию Alipay, а затем отправляет платежную информацию на сервер.
  4. Сервер определяет, какой заказ основан на сумме платежа, затем помечает заказ как «оплаченный», а затем при необходимости выполняет уведомления обратного вызова.

2. Ключевые проблемы и пути их решения

Основные вопросы этого плана следующие:

1. Перехват уведомлений приложения Alipay

На самом деле, в Интернете есть много решений этой проблемы, которые используют Android.NotificationListenerServiceЭтот класс, зарегистрировав этот прослушиватель, может получить приложение, заголовок, контент и другую информацию, отправленную им, когда всплывает push-уведомление. Больше всего нас волнует приложение и push-контент.

Судя по тому, что пакет, отправленный в приложение, является пакетом Alipay, а затем получая конкретный контент из отправленного контента, можно получить сумму платежа.

Пример кода выглядит следующим образом:

public class AlipayNotificationListenerService extends NotificationListenerService {
    public AlipayNotificationListenerService() {
    }

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        // 这里可以拿到包名,可以按照需要判断。
        String packageName = sbn.getPackageName();
        Notification notification = sbn.getNotification();
        if (notification == null) {
            return;
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Log.e("SevenNLS","in 1");
            Bundle extras = notification.extras;

            if (extras != null) {
                // 这里是具体的title和content,可以从中提取金额
                String title = extras.getString(Notification.EXTRA_TITLE, "");
                String content = extras.getString(Notification.EXTRA_TEXT, "");
                Log.d("Zachary", "title:" + title + "   content:" + content);
            }
        }
    }

    @Override
    public void onListenerConnected()
    {
        Log.e("Zachary","connected");
    }


}

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

2. Подтверждение заказа

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

Здесь мы можем подумать об этом подробнее, на самом деле этот заказ определяется не только этой суммой, но определяется кортежем. Самый простой способ сделать это -(Сумма заказа - Статус оплаты). Из этого кортежа можно определить порядок. Смысл в том, что если этот заказ уже оплачен, то когда я смотрю заказ, я могу его игнорировать, мне просто нужно посмотреть(указанная сумма - не оплачена)заказ на нем.

Это в основном решает проблему. Однако мы считаем, что помимо обычного платежа могут быть и другие ситуации. Например, после того, как пользователь создал заказ, он вдруг не хочет платить, и не выполняет следующую операцию. Или кто-то злонамеренно создает на сайте большое количество заказов и не оплачивает. Следствием этого является то, что статус этих заказов всегда будет未支付, когда вы захотите продолжить создавать заказы, вы будете ограничены, вы не сможете создавать заказы на ту же сумму, что и эти заказы, иначе ваша система не сможет определить, какой заказ был оплачен.

Чтобы справиться с этой ситуацией, мы подумали, что многие платежи ограничены по времени, то есть заказ имеет срок действия, и по истечении срока действия заказ не может быть оплачен. Поэтому мы также можем добавить к заказу действительный срок, например, 5 минут.Если заказ не оплачен в течение пяти минут, заказ считается недействительным. В это время способ определения порядка становится тройным(Сумма заказа - Статус платежа - Просрочено). Когда ищешь, просто ищи(указанная сумма - не оплачена - не просрочена)заказ на нем. То есть любой заказ будет занимать до 5 минут от этой суммы.После того, как он превысит 5 минут, вы можете продолжать создавать заказы на ту же сумму независимо от того, заплатили вы или нет.

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

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

Таким образом, когда в текущей системе уже есть заказ на определенную сумму, если мы хотим продолжить создание заказа на ту же сумму, то мы будем делать это на указанную сумму.колебаться, например, вниз на пенни, чтобы сумму можно было отличить от предыдущего заказа, чтобы избежать ситуации, когда нельзя заплатить одновременно. Таким образом, хотя у нас могут быть определенные потери в случае высокого параллелизма (чем больше людей платят одновременно, тем больше разрыв), наши требования к высокому параллелизму выполняются.

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

3. Резюме

В целом, я думаю, что это решение является приемлемым решением для обычных индивидуальных пользователей. Его преимущества и недостатки резюмируются следующим образом:

преимущество:

  1. Деловая квалификация не требуется
  2. без платы за обработку
  3. Нет операций на Alipay, нет риска контроля рисков со стороны Alipay

недостаток:

  1. Мобильный телефон должен быть постоянно включен, а условия сети должны быть хорошими, иначе платежные данные будут потеряны (может быть ручное решение)
  2. При высоком уровне параллелизма сумма заказа будет колебаться
  3. Если стратегия плавающей суммы является необоснованной, а правила обнаружены другими, может быть причинен материальный ущерб! ! (Например, за короткий промежуток времени создается большое количество ордеров, поэтому цена ордера будет продолжать падать, и в этой ситуации необходимо принять меры предосторожности)

Ссылаться на:
PaysApi: www.paysapi.com