Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
Вдохновленный школой ежедневное здоровье ежедневно
,Запрос на использование WeChatМини программа проводит ежедневные проверки здоровья. Итак, функциональность этого проекта примерно такая: Групповой робот QQ
,илида ежедневный будильник
。
Пользователь посещает данную страницу и выполняет Авторизованный вход
, затем подтвердите свою личность (бакалавр или аспирант) и Включить уведомления
, вы можете получать напоминания о сообщениях из учетной записи службы WeChat в согласованное время каждый день. Конечно, пользователи могут настроить время ежедневных уведомлений, а также включить или выключить ежедневные уведомления в любое время.
Левое изображение: страница, на которую пользователь подписывается. Среднее изображение: страница, на которой пользователь изменяет время уведомления. Правое изображение: напоминание о сообщении, которое получает пользователь.
1. Инструменты кодирования:для проектовразвивать。Если вы используете Java
реализовано, можно использовать IntelliJ IDEA
,Если вы используете PHP
развитый, доступный JetBrains PhpStorm
;
2. Запустите инструмент:для местного тестирования。еслидаPHP
развивать,необязательныйphpstudy_pro
какPHPСреда запуска и развертывания проекта;
3. Инструменты тестирования:можно использовать только Инструменты разработчика WeChat
, выбор режима разработки Официальный аккаунт
Отладка веб-страницы
。
Инструменты разработчика WeChatСкачать адрес:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
Потому что здесь задействован WeChat Авторизованный входная функция, поэтому инструмент тестирования должен использовать Инструменты разработчика WeChat
,Однако обычные браузеры не могут реализовать эту функцию.
Инструменты разработчика Как использовать и отлаживать WeChat,То же, что и обычный браузер。
1. Для любого доменного имени необходимо включить SSL (т. е. доступ по протоколу https);
2. Одна учетная запись службы WeChat, которая должна быть сертифицирована;
3. Сервер с внешним IP-адресом.
Если вы только изучаете технологию, просто выполняйте первые два пункта. Если проект необходимо вывести в Интернет, необходимы три вышеперечисленных пункта. Для первого2полоска,Нет сервисного номера,Также доступен в
Открытая платформа WeChat
Создайте веб-приложение в формате . Однако открытая платформа WeChat также требует корпоративной сертификации.
Если вышеуказанная среда удовлетворяет требованиям, необходимо выполнить некоторые настройки учетной записи службы WeChat. В основном включают в себя:
Информация о разработке официального аккаунта в основном Идентификатор разработчика (AppID)
и развиватьили пароль(AppSecret)
。
Некоторые интерфейсы должны использовать идентификатор разработки или идентификатор или пароль для отправки запросов на вызов.
Получатьпутьда:Бэкэнд официального аккаунта WeChat → развитие → Базовая конфигурация
。
толькоБелый список IP-адресов
вIPМожно назвать только адрес Получатьaccess_tokenинтерфейс
,где access_tokenда выполняет другие операции,Параметр «Отправить шаблонное сообщение» и т. д.
配置域名из页面访问путьда:Официальный аккаунтназад台 → настраивать → Официальный аккаунтнастраивать → Функциянастраивать
。
Необходимо настроить три основных доменных имени:
① Доменное имя компании
настраивать Доменное имя После компании при входе на страницу под доменным именем в WeChat она не будет переставляться. Когда пользователь вводит имя домена, запрос безопасности не появляется. Например, при открытии веб-страницы в WeChat и вводе формы не будет никаких запросов безопасности, таких как «Не вводите пароль QQ».
② Доменное имя безопасности интерфейса JS.
настраивать Доменное имя безопасности интерфейса JSназад,Официальный аккаунтразвивать может вызывать открытый JS-интерфейс WeChat под этим доменным именем. Например, чтобы получить access_token в предыдущей статье, вам нужно использовать это доменное имя.
③ Авторизованное доменное имя веб-страницы.
После того, как пользователь согласится авторизовать официальную учетную запись на странице веб-авторизации, WeChat передаст данные авторизации на страницу обратного вызова, чтобы обеспечить безопасность и надежность. Страница обратного вызова должна находиться под этим доменным именем.
Только те, кто добавил усовершенствований,можно использоватьwebразвиватьинструмент
进行对应Официальный Аккаунт развивается и отлаживается.
добавить вразвивать ВОЗ页面из访问путьда:Вичат Официальный аккаунтназад台 → развивать → развиватьинструмент → webразвиватьинструмент
。
5. Добавьте шаблон
существоватьДобавить функциональный плагин
в модуле,добавить вшаблон сообщения
Функция
Затем найдите подходящий шаблон в библиотеке шаблонов и добавьте его:
Среди них идентификатор шаблона даразвивать используется параметром.
О WeChat Официальный аккаунтизразвиватьтехнология,и путь его реализации,Все представлено на официальном сайте.
Официальная документация:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
Открыть официальный документ разработки,Обязательно прочтите перед первым разделом под названием «Развитие».,Необходимо прочитать главу усовершенствования и Глобальный код возврата иллюстрировать.。
развиватьчас,Не нарушайте соответствующие правила WeChat.,нет легко забанить,Тогда глобальный код возврата поможет быстро обнаружить проблему.
Открыть официальный документ разработки,Нет.5главаСтраница WeChat
середина,Нет.2ФестивальАвторизация веб-страницы
справочная документация.
прямая ссылка:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
Перед оглавлением в этой главе есть раздел, посвященный авторизации веб-страницы.
Нет.一点关于Авторизация веб-страницы回调域名изиллюстрировать,即前文середина关于域名из配置。 Нет.二点关于Авторизация веб-страницыиз两种scopeиз区别иллюстрировать,Основные два режима авторизации иллюстрировать,Форма авторизации для автоматического входа в систему,Эта форма может только Получать到用户изOpenID,Другой видда Получать Основная информация о пользователеиз形式,Эта форма откроет всплывающее окно,Пользователю необходимо вручную нажать кнопку входа в систему. Два метода реализации,основнойда修改登录链接вscopeпараметризценить。назад文详述。 Нет.三点关于Авторизация веб-страницыaccess_tokenиобычноaccess_tokenиз区别,Пожалуйста, обратитесь к документации. Фактически, основной токен авторизации веб-страницы иллюстрировать более безопасен.,должен пройтиcodeПриходить Получатьaccess_token,И разныеcodeПолучатьизaccess_tokenдругой,Каждый access_token действителен в течение 2 часов (7200 секунд).,Каждый access_token в течение этих 2 часов,Действительно только для одного и того же пользователя。而обычноaccess_token(即基础поддерживатьв“Получатьaccess_token”интерфейс Получать到из)может быть напрямую Получать,Можно повторно использовать в разных сценариях.,Срок действия также 2 часа.,Устаревшую информацию необходимо обновить.
В частности, процесс авторизации веб-страницы разделен на четыре этапа:
1. Попросите пользователя войти на страницу авторизации, чтобы согласиться на авторизацию и получить код.
2. Обменяйте код для авторизации веб-страницы access_token (отличный от access_token в базовой поддержке)
3. При необходимости,разработка может обновить авторизацию веб-страницы access_token,Избегайте истечения срока действия
4、проходить Авторизация веб-страницыaccess_tokenиopenidПолучать Основная информация о пользователе(поддерживатьUnionIDмеханизм)
Сначала пользователям необходимо получить доступ к следующей ссылке для входа в систему:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
по этой ссылке,Поля, обозначенные заглавными буквами, необходимо заменить.(То же самое ниже)。
Подробная информация о каждом параметре в приведенной выше ссылке следующая:
параметр | Это необходимо | иллюстрировать |
---|---|---|
appid | да | Уникальный идентификатор официального аккаунта |
redirect_uri | да | Адрес ссылки обратного вызова, перенаправленный после авторизации. Используйте urlEncode для обработки ссылки. |
response_type | да | Тип возвращаемого значения, можно указать только код |
scope | да | Область авторизации приложения может быть только snsapi_base (страница авторизации не всплывает, переходит напрямую и может получить только openid пользователя) или snsapi_userinfo (страница авторизации всплывает, и никнейм, пол и местоположение можно получить через openid Более того, даже если вы не подписаны на При определенных обстоятельствах, если пользователь разрешает это, его информация также может быть получена) |
state | нет | После перенаправления будет введен параметр состояния,развивать Могу заполнитьa-zA-Z0-9изпараметрценить,До 128 байт |
#wechat_redirect | да | Независимо от того, открываете ли вы его напрямую или выполняете перенаправление 302 на странице,,Необходимо ввести этот параметр |
После того, как пользователь подтвердит вход, код можно получить по адресу обратного вызова, перенаправленному после авторизации. Формат следующий:
redirect_uri/?code=CODE&state=STATE
Вот КОДДалее обмен на access_token должен быть параметром, а STATEдаразвивать или другой настраиваемой информацией.
Код получен выше. Далее вам нужно использовать этот код в обмен на access_token.
Ссылка на запрос выглядит следующим образом (метод GET):
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
Подробная информация о каждом параметре в приведенной выше ссылке следующая:
параметр | Это необходимо | иллюстрировать |
---|---|---|
appid | да | Уникальный идентификатор официального аккаунта、развивать ВОЗID |
secret | да | Официальный аккаунтизappsecret、развиватьили пароль |
code | да | 填写Нет.一步Получатьизcodeпараметр |
grant_type | да | Может быть только: код_авторизации |
После успешного запроса формат возвращаемого пакета данных JSON будет следующим:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
Различные поля этого пакета данных JSON следующие:
параметр | иллюстрировать |
---|---|
access_token | Сертификат вызова интерфейса авторизации веб-страницы. Обратите внимание: этот access_token отличается от базового поддерживаемого access_token. |
expires_in | Тайм-аут учетных данных вызова интерфейса Access_token, единица измерения (секунды) |
refresh_token | Пользователь обновляет access_token, который действителен в течение 30 дней. Когда время доступа access_token истекает, для обновления можно использоватьrefresh_token. |
openid | Уникальный идентификатор пользователя,пожалуйста Уведомление,существовать未сосредоточиться на Официальный аккаунт, когда пользователь посещает Официальный На веб-странице аккаунта также будет создан пользователь и Официальный. уникальный OpenID аккаунта |
scope | Область авторизации пользователя, разделенная запятыми (,) |
Следующие операции являются необязательными и обычно не используются:
использоватьrefresh_token
Получатьaccess_tokenсвязьследующее(GETСпособ):
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Подробная информация о каждом параметре в приведенной выше ссылке следующая:
параметр | Это необходимо | иллюстрировать |
---|---|---|
appid | да | Уникальный идентификатор официального аккаунта |
grant_type | да | Заполните какrefresh_token |
refresh_token | да | 填写проходитьaccess_tokenПолучать到изrefresh_tokenпараметр |
Правильно возвращенный формат JSON соответствует приведенному выше.
Некоторыйиллюстрировать: На этом этапе выполнения мы получили OpenID пользователя. Если вы выполняете только проверку уникальности пользователя, вы можете завершить ее здесь. Аналогично, для отправки шаблонных сообщений требуется только OpenID пользователя.
Если область авторизации веб-страницы snsapi_userinfo
, то в это время человек может пройти access_token
и openid
Получение информации о пользователе.
Ссылка на запрос выглядит следующим образом (метод GET、Необходимо использовать протокол https):
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
Параметриллюстрировать ссылку выше:
параметр | описывать |
---|---|
access_token | Интерфейс авторизации веб-страницы вызывает учетные данные, которые представляют собой access_token, полученный на предыдущем шаге. |
openid | Уникальный идентификатор пользователя |
lang | Вернуться к языковой версии страны и региона, упрощенный zh_CN, традиционный zh_TW, английский |
Формат пакета данных JSON, возвращаемого после успешного запроса, следующий:
{
"openid":" OPENID",
"nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
Подробности вышеуказанного пакета данных JSON следующие:
параметр | описывать |
---|---|
openid | Уникальный идентификатор пользователя |
nickname | Никнейм пользователя |
sex | Пол пользователя,ценитьдля1часдамужской,ценитьдля2часдаженщина,ценитьдля0часданеизвестный |
province | Провинция заполнена профилем пользователя |
city | Город, в котором обычные пользователи заполняют свои персональные данные |
country | Страна, например, Китай — CN. |
headimgurl | Аватар пользователя, последнее значение представляет размер квадратного аватара (доступны значения 0, 46, 64, 96 и 132, 0 представляет квадратный аватар размером 640*640), этот элемент пуст, если пользователь не есть аватар. Если пользователь меняет свой аватар, исходный URL-адрес аватара будет недействителен. |
privilege | Информация о привилегиях пользователя, массив json, например имя пользователя WeChat Woka (chinaunicom). |
unionid | Это поле появится только после того, как пользователь привяжет официальную учетную запись к учетной записи WeChat Open Platform. |
Вложение: Убедитесь, что сертификат авторизации (access_token) действителен.
Ссылка на запрос (метод GET, необходимо использовать протокол https):
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID
Параметриллюстрировать ссылку выше:
параметр | описывать |
---|---|
access_token | Сертификат вызова интерфейса авторизации веб-страницы. Обратите внимание: этот access_token отличается от базового поддерживаемого access_token. |
openid | Уникальный идентификатор пользователя |
Правильный результат возврата пакета данных JSON выглядит следующим образом:
{
"errcode":0,"errmsg":"ok"}
Пример возврата JSON при ошибке:
{
"errcode":40003,"errmsg":"invalid openid"}
Этот метод можно использовать для обнаружения истечения срока действия access_tokendanet, чтобы обеспечить высокую доступность проекта.
Открыть официальный документ разработки,Нет.4глава Управление сообщениями
, раздел 7 Интерфейс шаблона сообщения
справочная документация.
прямая ссылка:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
В официальной документации,Содержание, описанное в этом модуле, очень обширно.,да Для сторонних поставщиков услуг WeChat,Итак, есть некоторые вещи, которые людям не нужны.
Подводя итог фактическому процессу отправки шаблонного сообщения, основные процессы следующие:
Ссылка на запрос выглядит следующим образом (метод GET):
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
по этой ссылкеизпараметрподробныйиллюстрироватьследующее:
параметр | Это необходимо | иллюстрировать |
---|---|---|
grant_type | да | Получите access_token и заполните client_credential. |
appid | да | Уникальные учетные данные для сторонних пользователей |
secret | да | Уникальные учетные данные для сторонних пользователейключ,то есть appsecret |
Формат пакета данных JSON, возвращаемого успешным запросом, следующий:
{
"access_token":"ACCESS_TOKEN","expires_in":7200}
JSONпакетпараметриллюстрировать:
параметр | иллюстрировать |
---|---|
access_token | Полученные полномочия |
expires_in | Время действия ваучера, единица измерения: секунды. |
Ссылка на запрос выглядит следующим образом (метод POST):
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
Эта ссылка требует только access_token
Параметр, полученный на первом шаге access_token
。
Формат пакета данных POST — это формат JSON, пример следующий:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"pagepath":"pages/index?foo=bar"
},
"data":{
"first": {
"value":"Поздравляем с успешной покупкой!",
"color":"#173177"
},
"keyword1":{
"value":"шоколад",
"color":"#173177"
},
"keyword2": {
"value":"39,8 юаней",
"color":"#173177"
},
"keyword3": {
"value":"22 сентября 2014 г.",
"color":"#173177"
},
"remark":{
"value":"Добро пожаловать за покупкой снова!",
"color":"#173177"
}
}
}
Подробности каждого параметраиллюстрировать в этом пакете данных JSON следующие:
параметр | данет Обязательно | иллюстрировать |
---|---|---|
touser | да | приемникopenid |
template_id | да | Идентификатор шаблона, строка символов, полученная после добавления сообщения шаблона в предыдущей конфигурации. |
url | нет | Ссылка для перехода по шаблону (учетные записи за рубежом не имеют возможности перехода) |
miniprogram | нет | Прыжок Мини программа требует данных, не нужно прыгать Мини программе не нужно передавать эти данные. При ссылке и Мини Когда обе программы существуют, сначала перейдите к Mini. программа。 |
appid | да | Мини, куда можно перейти программаappid(Должен Мини programappid должен совпадать с официальным, отправившим шаблонное сообщение. аккаунтда привязать отношения ассоциации, мини-игры пока не поддерживаются) |
pagepath | нет | Требуется переход на Мини Конкретный путь к странице программы поддерживает параметр (пример страниц/index?foo=bar), для которого требуется Минимальный программа вышла и пока не поддерживает мини-игры. |
data | да | Данные шаблона. Количество данных здесь,Должен соответствовать параметру в шаблоне сообщения.,Как показано ниже. |
color | нет | Цвет шрифта содержимого шаблона. Если не заполнен, по умолчанию используется черный цвет. |
После успешного запроса формат возвращаемого пакета данных JSON будет следующим:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
В это время на мобильный телефон WeChat пользователя придет соответствующее напоминание.
На этом этапе описан основной процесс реализации да Авторизованного входа.Отправить шаблонное сообщение.
Ниже мы более подробно продемонстрируем процесс реализации вышеперечисленных функций в виде исходного кода проекта на основе реальных проектов.
Основная функция этого класса инструментов основана на авторизованном WeChat. входиз实现流程,进行链接пожалуйста求иданные Получать。
<?php
/** * Получить информацию о пользователе WeChat */
class GetWX
{
//Официальный аккаунтизразвиватьинформация private $appid = 'APPID';
private $appsecret = 'APPSECERT';
/** * Функция: авторизация пользователя и Tweet код * * @param $callback */
public function get_code($callback)
{
$appid = $this->appid;
$scope = 'snsapi_userinfo';
$state = md5(uniqid(rand(), TRUE));//Уникальный идентификатор ID никогда не будет повторяться
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
header("Location:$url");
}
/** * Функция: получить access_token через код. * * @param $code * @return mixed */
public function get_access_token($code)
{
$appid = $this->appid;
$appsecret = $this->appsecret;
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
$data = json_decode(file_get_contents($url));//Возвращённый массив json преобразуется в массив массивов
return $data;
}
/** * Функция: используйте access_tokenПолучить информацию о пользователе * * @param $access_token * @param $openid * @return mixed */
public function get_user_info($access_token, $openid)
{
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$data = json_decode(file_get_contents($url));//Возвращённый массив json преобразуется в массив массивов
return $data;
}
}
?>
Конкретный метод реализации этого класса инструментов не уникален. Ниже приведен второй полный пример.
Исходный код страницы обратного вызова входа в систему (login.php) выглядит следующим образом:
<?php
include 'getWX.php';
$getWX = new GetWX();
//Если код не GET, выполняем операцию входа в систему
if (!isset($_GET['code'])) {
//URL обратного вызова сервера WeChat, вот URL этой страницы
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//Получить код
$getWX->get_code($callback);
} //Получаем код, можно выполнять последующие операции
else {
}
Как показано в исходном коде выше,В это время посетите https://XXXX.cn/test/login.php.,Выполнить оператор if,Определить, нет ли кода в параметре ссылки,так Получать了当前链接изURLадрес(callbackпараметр),и передаем его методу get_code,Этот метод создаст ссылку для входа,и перейдите на эту страницу,Затем появляется страница авторизации входа.,Как показано ниже:
Клики пользователей соглашаться
之назад,Вернитесь к ссылке $callback. В это время,Ссылка содержит параметр кода,И разработать или настроить параметр состояния. Как показано ниже:
Мы временно используем дакодпараметр.
Далее используйте это codeВ обмен на access_token
,Продолжайте улучшать код login.php.,Подробности следующие:
<?php
include 'getWX.php';
$getWX = new GetWX();
//Если код не GET, выполняем операцию входа в систему
if (!isset($_GET['code'])) {
//URL обратного вызова сервера WeChat, вот URL этой страницы
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//Получить код
$getWX->get_code($callback);
} //Получаем код, можно выполнять последующие операции
else {
//Получаем код по ссылке
$code = $_GET['code'];
//Получаем авторизацию веб-страницы access_token и openid пользователя
$data = $getWX->get_access_token($code);
//Тестовый вывод
echo 'access_token:' . $data->access_token . '<br>';
echo 'expires_in:' . $data->expires_in . '<br>';
echo 'refresh_token:' . $data->refresh_token . '<br>';
echo 'openid:' . $data->openid . '<br>';
echo 'scope:' . $data->scope . '<br>';
}
Выходная информация следующая:
Получил это сверху access_token
и OpenID
,接下Приходить可以использовать这两个параметр Приходить Получать用户из基本информация。
Продолжайте улучшать login.php следующим образом:
<?php
include 'getWX.php';
$getWX = new GetWX();
//Если код не GET, выполняем операцию входа в систему
if (!isset($_GET['code'])) {
//URL обратного вызова сервера WeChat, вот URL этой страницы
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//Получить код
$getWX->get_code($callback);
} //Получаем код, можно выполнять последующие операции
else {
//Получаем код по ссылке
$code = $_GET['code'];
//Получаем авторизацию веб-страницы access_token и openid пользователя
$data = $getWX->get_access_token($code);
//Получить информацию о пользователе WeChat
$userInfo = $getWX->get_user_info($data->access_token, $data->openid);
//Тестовый вывод:
echo 'openid:' . $userInfo->openid . '<br>';
echo 'nickname:' . $userInfo->nickname . '<br>';
echo 'sex:' . $userInfo->sex . '<br>';
echo 'province:' . $userInfo->province . '<br>';
echo 'city:' . $userInfo->city . '<br>';
echo 'country:' . $userInfo->country . '<br>';
echo 'headimgurl:' . $userInfo->headimgurl . '<br>';
}
Результат выполнения показан на рисунке ниже:
На данный момент мы получили основную информацию о пользователе, а затем можем сохранить эту базовую информацию в базе данных, идентификатор пользователя и т. д. можно сохранить в сеансе или файле cookie и т. д., а также выполнить различные другие операции.
Инструменты:
<?php
/** * Получить информацию о пользователе WeChat * Этот исходный код взят из Интернета */
class GetWxUser
{
private $appid = '';
private $appsecret = '';
/** * 1、Получить информацию о пользователе WeChat,Определить, есть ли код,Есть код использования в обмене на access_token,не пошел Получить код。 * @return array Массив информации о пользователе WeChat */
public function get_user_all()
{
if (!isset($_GET['code'])) {
//Если кода нет, заходим в интерфейс WeChat Получить кодовый код
//URL обратного вызова сервера WeChat, вот URL этой страницы
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//Получить код
$this->get_code($callback);
} else {
//Получить Вернитесь сюда после кода
$code = $_GET['code'];
$data = $this->get_access_token($code);//Получаем авторизацию веб-страницы access_token и openid пользователя
$userInfo = $this->get_user_info($data['access_token'], $data['openid']);//Получить информацию о пользователе WeChat
return $userInfo;
}
}
/** * 2. Авторизация пользователя и получение код * @param string $callback URL-адрес ссылки обратного вызова сервера WeChat */
public function get_code($callback)
{
$appid = $this->appid;
$scope = 'snsapi_userinfo';
$state = md5(uniqid(rand(), TRUE));//Уникальный идентификатор ID никогда не будет повторяться
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
header("Location:$url");
}
/** * 3. Используйте код обмен на access_token * @param string для В обмен на код access_token, предоставленный WeChat * @return array access_tokenиuser массив openid */
public function get_access_token($code)
{
$appid = $this->appid;
$appsecret = $this->appsecret;
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
$user = json_decode(file_get_contents($url));
if (isset($user->errcode)) {
echo 'error:' . $user->errcode . '<hr>msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user), true);//Возвращенный массив json преобразуется в массив массивов
return $data;
}
/** * 4、использоватьaccess_tokenПолучить информацию о пользователе * @param string access_token * @param string openid пользователя * @return array Информационный массив пользователя */
public function get_user_info($access_token, $openid)
{
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$user = json_decode(file_get_contents($url));
if (isset($user->errcode)) {
echo 'error:' . $user->errcode . '<hr>msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user), true);//Возвращенный массив json преобразуется в массив массивов
return $data;
}
}
?>
Страница входа в систему login.php:
<?php
header("Content-Type: text/html;charset=utf-8");
//настраиватьчас区
date_default_timezone_set('Asia/Chongqing');
include 'getWXUser.php';
$getWxUser = new GetWxUser();
//URL домашней страницы
$homeUrl = 'https://mzxy.cxhit.cn';
//Если кода нет, заходим в интерфейс WeChat Получить кодовый код
if (!isset($_GET['code'])) {
//URL обратного вызова сервера WeChat, вот URL этой страницы
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
$getWxUser->get_code($callback);
} //Получить Вернитесь сюда после кода
else {
$code = $_GET['code'];
//Получаем авторизацию веб-страницы access_token и openid пользователя
$data = $getWxUser->get_access_token($code);
//Получить информацию о пользователе WeChat (массив)
$userInfo = $getWxUser->get_user_info($data['access_token'], $data['openid']);
//Сохраняем в базу данных
if ($userInfo['openid'] != '') {
saveUserInfo($userInfo['openid'], $userInfo['nickname'], $userInfo['sex'], $userInfo['province'], $userInfo['city'], $userInfo['country'], $userInfo['headimgurl']);
}
//Сохраняем в куки
setcookie('openid', $userInfo['openid'], time() + 3600 * 24 * 30, "/");
//возвращаемся на домашнюю страницу
header("Location:" . $homeUrl);
}
?>
ДолженSDKРазличныйпараметриз Получать,Исходный код выглядит следующим образом:
<?php
class JSSDK
{
private $appId;
private $appSecret;
public function __construct($appId, $appSecret)
{
$this->appId = $appId;
$this->appSecret = $appSecret;
}
public function getSignPackage()
{
$jsapiTicket = $this->getJsApiTicket();
// Уведомление URL Его необходимо получать динамически, а не hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$nonceStr = $this->createNonceStr();
// Здесь порядок параметров должен быть следующим key ценить ASCII Сортировать по коду в порядке возрастания
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}
private function createNonceStr($length = 16)
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
private function getJsApiTicket()
{
// jsapi_ticket Он должен храниться и обновляться глобально. В качестве примера следующий код записывается в файл.
$data = json_decode($this->get_php_file("jsapi_ticket.php"));
if ($data->expire_time < time()) {
$accessToken = $this->getAccessToken();
// Если в номере предприятия да используется следующее URL Получать ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$this->set_php_file("jsapi_ticket.php", json_encode($data));
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
public function getAccessToken()
{
// access_token Он должен храниться и обновляться глобально. В качестве примера следующий код записывается в файл.
$data = json_decode($this->get_php_file("access_token.php"));
if ($data->expire_time < time()) {
// Если в номере предприятия да используется следующееURLПолучатьaccess_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this->httpGet($url));
$access_token = $res->access_token;
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$this->set_php_file("access_token.php", json_encode($data));
}
} else {
$access_token = $data->access_token;
}
return $access_token;
}
private function httpGet($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// Чтобы обеспечить безопасность передачи данных между сторонним сервером и сервером WeChat, все интерфейсы WeChat вызываются с использованием https, а для включения проверки безопасности SSL необходимо использовать следующие 2 строки кода.
// Если ваш код не проходит проверку во время развертывания, перейдите к http://curl.haxx.se/ca/cacert.pem Загрузите новый файл идентификации сертификата.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
private function get_php_file($filename)
{
return trim(substr(file_get_contents($filename), 15));
}
private function set_php_file($filename, $content)
{
$fp = fopen($filename, "w");
fwrite($fp, "<?php exit();?>" . $content);
fclose($fp);
}
}
Здесь в качестве примера для демонстрации мы возьмем следующее шаблонное сообщение. шаблон Подробности
Необходимо помнить о содержании здесь, поскольку эта информация будет использоваться при построении JSON.
Затем определите функцию, основной функцией которой является реализация форматирования JSON отправляемых данных.
Исходный код функции:
//Шаблон сообщенияJSONформат
function json_tempalte($openid, $appid, $nickname, $time)
{
//Шаблон сообщения
$template = array(
'touser' => $openid, //Открытый идентификатор пользователя
'template_id' => 'XXXX', //существовать Официальный Идентификатор шаблона настроен под учетной записью
'url' => 'https://XXXX.cn', //Нажмите ссылку, которая приведет к сообщению шаблона
'miniprogram' => array(
'appid' => $appid,
'pagepath' => 'pages/main/login/login?foo=bar'
),
'data' => array(
'first' => array('value' => «Вы закончили сегодняшнее здоровье ежедневно?» Еще не завершено, пожалуйста, приходите как можно скорее~', 'color' => "#FF0000"),
'keyword1' => array('value' => $nickname, 'color' => '#173177'), //ключевое слово должно соответствовать настроенному сообщению шаблона
'keyword2' => array('value' => $time, 'color' => '#173177'),
'remark' => array('value' => 'Нажмите здесь, чтобы заполнить форму. Это уведомление генерируется вашей подпиской. Чтобы переключить личность, изменить время уведомления и отказаться от подписки, посетите модуль «Помощник по обучению» в строке меню. ', 'color' => '#FF0000'),
)
);
$json_template = json_encode($template);
return $json_template;
}
Эта функция возвращает результат пакета JSON.
Ключевой исходный код выглядит следующим образом:
include("jssdk.php");
$jssdk = new JSSDK("APPID", "APPSECRET");
//Определяем шаблон сообщения JSON
$json_template = json_tempalte('APPID', 'wxa0738e54aae84423', «Лу десяти лет» . '(старшекурсник)', date("Y-m-d"));
//ПолучатьAccessToken
$accessToken = $jssdk->getAccessToken();
//POST связь
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $accessToken;
//представлять на рассмотрение
list($returnCode, $returnContent) = http_post_json($url, $json_template);
//Печать журнала (формат JSON)
echo «Результат отправки следующий:» . $returnContent . '\n';
Среди них в приведенном выше коде http_post_json
Функция следующая:
//Отправляем POST-запрос
функция http_post_json($url, $jsonStr)
{
$ch = Curl_init();
Curl_setopt ($ ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
Curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ jsonStr);
Curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, массив(
'Тип контента: application/json; кодировка = utf-8',
'Длина контента:' . стрлен($jsonStr)
)
);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
локон_закрыть ($ ч);
возвращаемый массив ($httpCode, $response);
}
Эта функция сама по себе инкапсулирует запрос POST. Конечно, различные
После завершения выполнения пользователь может получить шаблон сообщения.
Пока о WeChat Авторизованный входи Вичатшаблон сообщения推送изосновнойиспользовать方法讲解完毕。
Хотя функция отправки шаблонных сообщений ежедневных напоминаний упоминалась в предыдущей статье, здесь она обсуждаться не будет.
Загрузка исходного кода:https://mianbaoduo.com/o/bread/YZuVk5dp
Вот и все.
Издатель: Full stack программист и руководитель стека, укажите источник для перепечатки: https://javaforall.cn/128618.html Исходная ссылка: https://javaforall.cn