Бизнес компании запущен, а недавно завершена разработка апплета WeChat. Сценарий выглядит следующим образом: APP и апплет WeChat с одним и тем же предметом на одной и той же открытой платформе WeChat выполняют один и тот же бизнес.Когда пользователь входит в приложение или апплет WeChat, пользователь должен получить unionid пользователя, чтобы подтвердить текущую личность пользователя и завершить логин. Метод вызова апплета "получить информацию о пользователе" API (getUserInfo) был значительно обновлен по сравнению с предыдущим. Очень важно элегантно реализовать авторизацию пользователя и вход в систему. Ниже приведена моя реализация апплета WeChat, связанного с авторизацией и входом в систему. процессы во время разработки.Идеи и резюме делятся следующим образом.
1. Последовательность процесса входа в апплет WeChat
инструкция:
- Апплет вызывает wx.login() для получения временного кода для входа в систему и отправляет его обратно на сервер разработчика.
- Сервер разработчика обменивает код на уникальный идентификатор пользователя openid и сеансовый ключ session_key.
- Временный код для входа в систему можно использовать только один раз.
Что такое опенид?
После взаимодействия подписчика с официальной учетной записью официальная учетная запись может получить OpenID подписчика (зашифрованный микросигнал, OpenID каждого пользователя для каждой официальной учетной записи уникален. Для разных официальных учетных записей openid одного и того же пользователя отличается). ——Документация разработчика общедоступной платформы WeChat
- Идентификация обычных пользователей, уникальных для текущего официального аккаунта
- Разные официальные аккаунты, один и тот же пользователь, разные openid
Вы можете просто понять как
openid = hash(uid + app_id)
Что такое юнионид?
Если у разработчика есть несколько мобильных приложений, веб-приложений и публичных аккаунтов (включая мини-программы), уникальность пользователей можно отличить по unionid, потому что пока это мобильное приложение, веб-приложение и публичный аккаунт под одним и тем же WeChat Open Учетная запись платформы (включая апплет), UnionID пользователя уникален. Другими словами, один и тот же пользователь имеет один и тот же unionid для разных приложений на одной и той же открытой платформе WeChat.Описание механизма UnionID
Если разработчикам необходимо объединить учетные записи пользователей среди нескольких мобильных приложений, веб-приложений и официальных учетных записей, им необходимо перейти на открытую платформу WeChat (open.weixin.qq.com), чтобы привязать официальную учетную запись, а затем они могут использовать механизм UnionID. для удовлетворения требований вышеперечисленных требований.
- Одна учетная запись WeChat Open Platform может иметь несколько мобильных приложений, веб-приложений, общедоступных учетных записей и небольших программ.
- Пока это мобильное приложение, веб-приложение и общедоступная учетная запись (включая мини-программы) под одной и той же учетной записью WeChat Open Platform, unionid пользователя уникален.
Уникальный идентификатор пользователя на открытой платформе
Вы можете просто понять это как:
unionid = hash(uid + 开放平台id)
Подводить итогиWeChat имеет уникальный openId для разных пользователей в разных приложениях, но чтобы определить, является ли пользователь одним и тем же пользователем, его нужно различать по unionid. Как правило, ваш собственный фон будет иметь свою собственную таблицу пользователей, и у каждого пользователя будет свой идентификатор пользователя. То есть приложения одного и того же пользователя и одного и того же субъекта на одной и той же открытой платформе WeChat соответствуют одному и тому же идентификатору пользователя, unionid и разным идентификаторам openid. Таким образом, когда пользователь входит в систему, мы можем полагаться только на идентификатор союза, возвращенный нам WeChat, чтобы определить, является ли это одним и тем же пользователем, а затем связать нашу таблицу пользователей, чтобы получить соответствующий идентификатор пользователя.
2. Как апплет WeChat получает unionid?
Для мини-программ, привязанных к учетной записи разработчика, UnionID можно получить следующими тремя способами.
- интерфейс вызоваwx.getUserInfo, получите UnionID из расшифрованных данных. Обратите внимание, что этот интерфейс требует авторизации пользователя, и разработчик должен правильно обрабатывать ситуацию после отказа пользователя от авторизации.
- Если есть официальная учетная запись той же темы под учетной записью разработчика, и пользователь подписался на официальную учетную запись. Разработчики могут напрямую получить UnionID пользователя через wx.login, не требуя от пользователя повторной авторизации.
- Если под учетной записью разработчика имеется официальная учетная запись или мобильное приложение той же тематики, и пользователь авторизован для входа в официальную учетную запись или мобильное приложение. Разработчики также могут напрямую получить UnionID пользователя через wx.login, не требуя от пользователя повторной авторизации.
Когда пользователь соответствует условиям 2 и 3, разработчик может напрямую получить unionid пользователя через wx.login, в противном случае интерфейс должен вызыватьсяwx.getUserInfo
, Дополнительно следует обратить внимание на правильную обработку отказа пользователя авторизоваться.
3. Рекомендации по входу в систему
- Позвоните wx.login, чтобы получить код.
- Используйте wx.getSetting для авторизации пользователя
- Если пользователь авторизован, напрямую вызовите API wx.getUserInfo, чтобы получить последнюю информацию о пользователе;
- Если пользователь не авторизован, на интерфейсе отображается кнопка, предлагающая пользователю войти в систему. Когда пользователь нажимает и авторизуется, получается самая последняя информация о пользователе.
- Передать полученные пользовательские данные на серверную часть вместе с кодом, возвращаемым wx.login
Обернуть ajax()
Мы надеемся, что в реальном бизнес-сценарии, когда пользователи войдут в апплет, они смогут нормально просматривать продукты, не входя в систему, и иметь общее представление об апплете. Потеря пользователей. Когда пользователям необходимо использовать некоторые расширенные функции и сценарии, они будут запрашивать авторизацию пользователя в это время, так что вероятность авторизации пользователя будет значительно улучшена. Инкапсулируйте логику входа в систему с помощью ajax Процесс:
Значение упаковкиБольше не обращайте внимания на то, нужно ли авторизоваться на текущем интерфейсе, авторизован ли пользователь, все запросы вызываются напрямуюajax()
, и при необходимости завершите все процессы входа и авторизации. Входная страница апплета увеличена, и когда бизнес расширяется, вам нужно сосредоточиться только на реализации бизнеса.