Wechat-PHP-SDK
微信公众平台 PHP 开发包
Углубляет детализацию каждого интерфейса и поддерживает цепные вызовы. Приглашаем всех желающих внести свой вклад в проект.
Проект Weixin Developer SDK: https://github.com/dodgepudding/wechat-php-sdk
Блог проекта: http://binsee.github.io/wechat-php-sdk
Перед использованием необходимо активировать режим разработки для учётной записи в WeChat. Подробные шаги см. в инструкциях по использованию интерфейса WeChat Public Platform:
Документация по подключению к WeChat Pay:
https://mp.weixin.qq.com/cgi-bin/readtemplate?t=business/course2_tmpl&lang=zh_CN
WeChat Multi-Service: http://dkf.qq.com
wechat.class.php Официальная библиотека API класса qywechat.class.php Библиотека класса API корпоративного номера errCode.php|qyerrCode.php Глобальный класс кодов возврата old_version/wechatpay.class.php Версия библиотеки V2 для оплаты через WeChat
old_version/wechatext.class.php Не официальная расширенная библиотека API (прекращена поддержка)old_version/wechatauth.class.php Авторизация входа (прекращена поддержка)old_version/wechat.js Встроенный JS (устарело)Адаптация для фреймворка разработки Примеры вызовов createGroup($name$) — создать группу;
updateGroup($groupid$, $name$) — изменить название группы;
updateGroupMembers($groupid$, $openid$) — переместить пользователя в группу;
batchUpdateGroupMembers($groupid$, $openid_list$) — массово переместить пользователей в группу;
sendCustomMessage($data$) — отправить сообщение от службы клиентской поддержки;
getOauthRedirect($callback$, $state$, $scope$) — получить URL для перенаправления при авторизации через OAuth;
getOauthAccessToken() — получить токен доступа по коду, полученному через callback;
getOauthRefreshToken($refresh_token$) — продлить срок действия токена доступа с помощью refresh token;
getOauthUserinfo($access_token$, $openid$) — получить данные пользователя по токену доступа;
getOauthAuth($access_token$, $openid$) — проверить действительность токена доступа;
getSignature($arrdata$, 'sha1') — сформировать подпись;
generateNonceStr($length$ = 16) — сгенерировать случайную строку заданной длины;
setTMIndustry($id1$, $id2$ = '') — установить отрасль для шаблона сообщения;
addTemplateMessage($tpl_id$) — добавить шаблон сообщения;
sendTemplateMessage($data$) — отправить шаблонное сообщение;
Интерфейсы для работы с несколькими агентами клиентской поддержки:
getCustomServiceMessage($data$) — получить историю чата с клиентом;
transfer_customer_service($customer_account$) — переслать сообщение клиенту;
getCustomServiceKFlist() — получить основную информацию о нескольких агентах клиентской поддержки;
getCustomServiceOnlineKFlist() — получить информацию об агентах, которые сейчас работают с клиентами;
createKFSession($openid$, $kf_account$, $text$ = '') — создать чат с агентом клиентской поддержки;
closeKFSession($openid$, $kf_account$, $text$ = '') — закрыть чат с агентом;
getKFSession($openid$) — узнать статус чата;
getKFSessionlist($kf_account$) — получить список чатов агента;
getKFSessionWait() — получить список незанятых агентов;
addKFAccount($account$, $nickname$, $password$) — зарегистрировать нового агента;
updateKFAccount($account$, $nickname$, $password$) — обновить данные агента;
deleteKFAccount($account$) — удалить агента из системы;
setKFHeadImg($account$, $imgfile$) — загрузить аватар агента;
querySemantic($uid$, $query$, $category$, $latitude$ = 0, $longitude$ = 0, $city$ = '', $region$ = '') — интерфейс для семантического анализа запроса;
getDatacube($type$, $subtype$, $begin_date$, $end_date$ = '') — получить статистические данные;
Параметры для метода getDatacube:
Данные | $type$ | $subtype$ | Время |
---|---|---|---|
Анализ пользователей | user | summary | 7 дней |
Сводные данные о пользователях | user | cumulate | 7 дней |
Ежедневная статистика по групповым публикациям | article | summary | 1 день |
Общая статистика по групповым публикациям | article | total | 1 день |
Статистика чтения групповых публикаций | article | read | 3 дня |
Статистика чтения групповых публикаций по часам | article | readhour | 1 час |
Статистика пересылки групповых публикаций | article | share | 7 дней |
Статистика пересылки групповых публикаций по часам | article | sharehour | 1 час |
Общий обзор отправленных сообщений | upstreammsg | summary | 7 дней |
Отправка сообщений по часам | upstreammsg | hour | 1 час |
Отправка сообщений за неделю | upstreammsg | week | 30 дней |
Распределение отправленных сообщений по дням | upstreammsg | dist | 15 дней |
Распределение отправки сообщений по неделям | upstreammsg | distweek | 30 дней |
Распределение отправки сообщений по месяцам | upstreammsg | distmonth | 30 дней |
Обзор интерфейса | interface | summary | 30 дней |
Интерфейс: статистика по часам | interface | summaryhour | 1 час |
Важно: разница между значениями параметров $begin_date$ и $end_date$ должна быть меньше максимального временного диапазона. Например, если максимальный временной диапазон равен 1 дню, то значения $begin_date$ и $end_date$ должны отличаться не более чем на 1 день.*
Карточные интерфейсы:
createCard($data$) — создать карту;
updateCard($data$) — отредактировать карту;
delCard($card_id$) — удалить карту;
getCardInfo($card_id$) — запросить подробную информацию о карте;
getCardColors() — получить список доступных цветов;
getCardLocations() — получить список магазинов;
addCardLocations($data$) — импортировать список магазинов;
createCardQrcode($card_id$) — сгенерировать QR-код карты;
consumeCardCode($code$) — использовать код;
decryptCardCode($encrypt_code$) — расшифровать код;
checkCardCode($code$) — проверить валидность кода;
getCardIdList($data$) — запросить список карт;
updateCardCode($code$, $card_id$, $new_code$) — заменить код;
unavailableCardCode($code$, $card_id$ = '') — сделать карту недействительной (необратимо);
modifyCardStock($data$) — изменить количество карт в наличии;
activateMemberCard($data$) — активировать или привязать карту участника;
updateMemberCard($data$) — провести операцию с картой участника;
updateLuckyMoney($code$, $balance$, $card_id$ = '') — изменить сумму в красном конверте;
setCardTestWhiteList($openid$ = array(), $user$ = array()) — настроить белый список для тестирования карт.
Интерфейсные функции для «Потряси и выиграй»:
applyShakeAroundDevice($data$) — подать заявку на получение ID устройства;
updateShakeAroundDevice($data$) — редактировать примечания к устройству;
searchShakeAroundDevice($data$) — искать устройства в списке;
bindLocationShakeAroundDevice($device_id$, $poi_id$, $uuid$ = '', $major$ = 0, $minor$ = 0) — связать устройство с магазином;
bindPageShakeAroundDevice($device_id$, $page_ids$ = array(), $bind$ = 1, $append$ = 1, $uuid$ = '', $major$ = 0, $minor$ = 0) — связать устройство со страницей;
uploadShakeAroundMedia($data$) — загружать изображения для страницы «Потряси и выиграй»;
addShakeAroundPage($title$, $description$, $icon_url$, $page_url$, $comment$ = '') — добавлять страницу «Потряси и выиграй». updateShakeAroundPage($page_id, $title, $description, $icon_url, $page_url, $comment = '') — редактирование информации о странице, полученной в результате встряхивания
2. wechatext.class.php — неофициальное расширение API
Это неофициальное расширение класса библиотеки больше не обновляется, поскольку официальные API-интерфейсы для публичных аккаунтов предоставляют множество интерфейсов, и дальнейшее развитие этой библиотеки не имеет большого смысла.
Неофициальное расширение API требует настройки учётной записи и пароля платформы публичного аккаунта. Оно позволяет осуществлять двустороннюю связь с пользователями, которые уже подписаны на вас, но этот способ не гарантирует долгосрочную эффективность.
В методах класса упоминаются идентификаторы пользователей, представленные как FakeId. В классе wechatauth они обозначаются как Uin. Идентификатор пользователя, соответствующий номеру WeChat, должен быть получен через метод getInfo() путём извлечения значения Username из возвращаемого массива. Однако информация о пользователях, не являющихся подписчиками, недоступна.
Перед вызовом методов ниже необходимо выполнить методы login() и checkValid(). Некоторые учётные записи могут не пройти аутентификацию, возможно, потребуется вручную войти в систему и сохранить полученный файл cookie в программе.
Программа использует модифицированный HTTP-метод snoopy, совместимый с BAE/SAE облачными серверами, где он может не работать должным образом, так как curl-методы на этих серверах были переписаны, а некоторые header-параметры, такие как источник веб-сайта, не поддерживаются.
3. wechatauth.class.php — авторизация и вход
Этот класс больше не обновляется, так как официальные API-платформы для приложений предоставляют авторизованные интерфейсы входа, которые являются более стандартными и удобными. Пожалуйста, обратитесь к WeChat Open Platform.
Используя QR-коды авторизации, можно синхронизировать вход на сторонние веб-сайты. Сначала программа получает QR-код авторизации с помощью методов get_login_code и get_code_image. Затем пользователь сканирует QR-код с помощью мобильного приложения WeChat. После авторизации пользователь получает доступ к своей основной информации и данным профиля. Подробные шаги проверки см. в примере test3.php.
4. wechat.js — встроенный JavaScript
Эта версия JavaScript устарела и больше не поддерживается, поскольку официальная версия WeChat 6.0.2 предоставляет новый интерфейс JavaScriptAPI, который является более полным и удобным. Пожалуйста, посетите Вики WeChat Public Platform.
Через глобальную переменную dataForWeixin можно настроить контент, запускающий совместное использование:
var dataForWeixin={
appId:"",
MsgImg:"путь к изображению сообщения",
TLImg:"путь к графику временной шкалы",
url:"путь к URL",
title:"заголовок",
desc:"описание",
fakeid:"",
callback:function(){}
};
При неудачном вызове API можно использовать этот класс для получения описания ошибки на китайском языке. Обратите внимание, что для публичных аккаунтов используется errCode.php, а для корпоративных — qyerrCode.php.
include "errCode.php"; //или qyerrCode.php
$ret=ErrCode::getErrText(48001); //ошибка может быть получена через публичный класс API
if ($ret)
echo $ret;
else
echo "не найдено";
Позволяет вызывать официальный API и обеспечивает более гибкие возможности реагирования на сообщения. Поддерживает цепные вызовы.
— проверка доступа; — автоматическое реагирование (текст, изображение, аудио, видео, музыка, новости); — управление меню (поиск, создание, удаление); — управление отделами (создание, обновление, удаление, получение списков отделов); — управление членами (создание, обновление, удаление, получение информации о членах, получение списков членов отдела); — управление тегами (создание, обновление, удаление, получение членов, добавление членов, удаление членов, получение списков тегов). Управление медиафайлами (загрузка, получение)
Инициализация действий
$options = array(
'token'=>'tokenaccesskey', // Заполнить токен интерфейса приложения
'encodingaeskey'=>'encodingaeskey', // Заполнить ключ шифрования EncodingAESKey
'appid'=>'wxdk1234567890', // Заполнить app id для вызова функций высокого уровня
'appsecret'=>'xxxxxxxxxxxxxxxxxxx', // Заполнить секретный ключ для вызова функций высокого уровня
'agentid'=>'1', // Идентификатор приложения
'debug'=>false, // Переключатель отладки
'_logcallback'=>'logg', // Метод вывода отладочной информации, должен принимать строковый параметр
);
$weObj = new Wechat($options); // Создание экземпляра объекта
//TODO: Вызов различных методов экземпляра $weObj.
Пассивные методы интерфейса:
scancode_push
или scancode_waitmsg
(возвращается массив array ('ScanType': 'qrcode', 'ScanResult': '123123'));pic_sysphoto
, pic_photo_or_album
или pic_weixin
(структура массива описана в файле PHP);location_select
(структура массива описана в файле PHP);Предопределённые константы:
//// Типы сообщений, вызываются методом экземпляра getRevType().
const MSGTYPE_TEXT = 'text';
const MSGTYPE_IMAGE = 'image';
const MSGTYPE_LOCATION = 'location';
const MSGTYPE_LINK = 'link'; // Не поддерживается
const MSGTYPE_EVENT = 'event';
const MSGTYPE_MUSIC = 'music'; // Не поддерживается
const MSGTYPE_NEWS = 'news';
const MSGTYPE_VOICE = 'voice';
const MSGTYPE_VIDEO = 'video';
//// Типы событий, вызываются методом экземпляра getRevEvent().
const EVENT_SUBSCRIBE = 'subscribe'; // Подписка
const EVENT_UNSUBSCRIBE = 'unsubscribe'; // Отмена подписки
const EVENT_LOCATION = 'LOCATION'; // Отчёт о местоположении
const EVENT_ENTER_AGENT = 'enter_agent'; // Вход пользователя в приложение
const EVENT_MENU_VIEW = 'VIEW'; // Меню — нажатие на ссылку меню
const EVENT_MENU_CLICK = 'CLICK'; // Меню — нажатие кнопки меню для получения сообщения
const EVENT_MENU_SCAN_PUSH = 'scancode_push'; // Меню — сканирование QR-кода (клиент переходит по URL)
const EVENT_MENU_SCAN_WAITMSG = 'scancode_waitmsg'; // Меню — сканирование QR-кода (без перехода клиента по URL)
const EVENT_MENU_PIC_SYS = 'pic_sysphoto'; // Меню — выбор фото из системы
const EVENT_MENU_PIC_PHOTO = 'pic_photo_or_album'; // Меню — выбор фото из альбома
const EVENT_MENU_PIC_WEIXIN = 'pic_weixin'; // Меню — выбор фото из галереи WeChat
const EVENT_MENU_LOCATION = 'location_select'; // Меню — выбор местоположения
const EVENT_SEND_MASS = 'MASSSENDJOBFINISH'; // Отправка результата — завершение групповой рассылки
const EVENT_SEND_TEMPLATE = 'TEMPLATESENDJOBFINISH'; // Отправка результата — завершение отправки шаблонных сообщений
Активные методы интерфейса:
checkAuth($appid='', $appsecret='', $token='') — общая проверка подлинности, также используется для обмена ACCESS_TOKEN (только при необходимости вручную указать access_token используйте $token);
resetAuth($appid='') — очистка записи ACCESS_TOKEN;
resetJsTicket($appid='') — удаление JSAPI-сертификата TICKET;
getJsTicket($appid='', $jsapi_ticket='') — получение сертификата JSAPI TICKET;
getJsSign($url, $timestamp=0, $noncestr='', $appid='') — получение информации для использования подписи JsApi (можно предоставить только URL);
getSignature($arrdata, 'sha1') — создание подписи;
generateNonceStr($length=16) — генерация случайной строки;
createMenu($data, $agentid='') — создание меню (параметр: содержимое меню, идентификатор приложения для создания меню);
getMenu($agentid='') — получение содержимого меню (параметр: идентификатор приложения для получения меню);
deleteMenu($agentid='') — удаление меню (параметр: идентификатор приложения для удаления меню);
uploadMedia($data, $type) — загрузка медиафайлов (параметры: данные, тип файла);
getMedia($media_id) — получение медиафайла по идентификатору (параметр: ID медиафайла);
getServerIp() — получение списка IP-адресов сервера WeChat. Возврат массива array('127.0.0.1','127.0.0.1')
createDepartment($data) — создание отдела, параметр: массив («name» — «почтовая группа продуктов», «parentid» — 1, «order» — 1).
updateDepartment($data) — обновление отдела, параметр: массив (id — 1, name — почтовая группа продуктов, parentid — 1, order — 1).
deleteDepartment($id) — удаление отдела, параметр: идентификатор отдела для удаления.
moveDepartment($data) — перемещение отдела, параметр: массив (department_id — 5, to_parentid — 2, to_position — 1).
getDepartment() — получение списка отделов, возврат массива отделов. Где department — список отделов, упорядоченный по полю order от меньшего к большему.
createUser($data) — создание члена, параметры см. в описании метода внутри php-файла.
updateUser($data) — обновление члена, параметры см. в описании метода внутри php-файла.
deleteUser($userid) — удаление члена, параметр: UserID сотрудника.
deleteUsers($userids) — пакетное удаление членов, параметр: массив UserID сотрудников.
getUserInfo($userid) — получение информации о члене, параметр: UserID сотрудника.
getUserList($department_id,$fetch_child=0,$status=0) — получение членов отдела, параметры: идентификатор отдела, нужно ли рекурсивно получать дочерние отделы, тип получения.
0 — получить всех сотрудников, 1 — получить список сотрудников с пометкой внимания, 2 — получить список заблокированных сотрудников, 4 — получить список не отмеченных сотрудников. Статус можно комбинировать.
getUserListInfo($department_id,$fetch_child=0,$status=0) — получение подробной информации о членах отдела, параметры такие же, как и у предыдущего метода.
getUserId($code,$agentid) — получение UserID сотрудника и номера мобильного устройства по коду, параметры: значение кода, возвращаемое Oauth2.0 или при вторичной аутентификации, идентификатор приложения предприятия, на которое происходит переход.
sendInvite($userid,$invite_tips='') — приглашение члена поставить отметку.
createTag($data) — создать ярлык, параметр: массив (tagname — UI).
updateTag($data) — обновить ярлык, параметр: массив (tagid — 1, tagname — UI).
deleteTag($tagid) — удалить ярлык, параметр: ID ярлыка.
getTag($tagid) — получить ярлык члена, параметр: ID ярлыка.
addTagUser($data) — добавить ярлык члену, параметры см. в описании метода внутри php-файла.
delTagUser($data) — удалить ярлык члену, параметры см. в описании метода внутри php-файла.
getTagList() — получить список ярлыков, вернуть массив ярлыков.
sendMessage($data) — активный интерфейс отправки сообщений, параметры см. в описании метода внутри php-файла.
authSucc($userid) — вторичная аутентификация, параметр: UserID сотрудника.
getOauthRedirect($callback,$state='STATE',$scope='snsapi_base') — комбинированный интерфейс перенаправления авторизации.
Старая версия библиотеки классов WeChat Pay V2 была перемещена в каталог old_version. С августа 2014 года все запросы на оплату через WeChat относятся к версии V3. Однако время и способ обновления до версии V3 пока не подтверждены.
— Получение access_token (базовые права). — Вызов компонента адреса (права оплаты). — Генерация данных подписи заказа (права оплаты). — Успешный обратный вызов заказа (права оплаты). — Уведомление о доставке (права оплаты). — Запрос оплаты заказа (права оплаты).
Примечание: Базовые права: любой нормальный публичный аккаунт имеет эти права. Права меню: обычные бизнес-аккаунты и авторизованные подписки имеют эти права после аутентификации. Аутентифицированные права: разделены на подписки и бизнес-аутентификацию. Только аутентифицированные бизнес-аккаунты имеют эти права, если префикс является бизнес-аккаунтом. В противном случае это аутентифицированные подписки и бизнес-аккаунты. Права оплаты: только аутентифицированные бизнес-аккаунты могут запрашивать эти права.
$options = array(
'appid'=>'wxdk1234567890', //заполнить app id для вызова функций высокого уровня, запросить в режиме разработки WeChat
'appsecret'=>'xxxxxxxxxxxxxxxxxxx', //заполнить ключ для вызова функций высокого уровня
'partnerid'=>'88888888', //идентификатор продавца, используется только для оплаты, не заполнять
'partnerkey'=>'', //ключ продавца, используется только для оплаты, не заполнять
'paysignkey'=>'' //ключ подписи продавца, используется только для оплаты, не заполнять
);
$weObj = new Wechat($options); //создать экземпляр объекта
//TODO: вызвать различные методы экземпляра $weObj
Для разных фреймворков требуется адаптация для сохранения access_token и jsapi_ticket, поскольку механизмы кэширования различаются. Поэтому в WeChat.class.php и QYWechat.class.php были добавлены комментарии TODO для кода кэширования. Необходимо изменить код в соответствии с требованиями различных фреймворков, но это может быть довольно сложно, так как структура была изменена.
Были отменены обновления Thinkphp, и были добавлены перегруженные методы setCache, getCache и removeCache для класса WeChat, а также был изменён метод log для перегрузки. Эти четыре функции реализованы для настройки кэша, чтения кэша, очистки кэша и вывода журнала в различных средах разработки. Для адаптации Thinkphp можно использовать TPWechat.class.php в качестве примера. ``` }
die(json_encode($result));
}
$logincode = $wechat->get_login_code(); //获取授权码 $qrimg = $wechat->get_code_image(); //待输出的二维码图片
HTML часть смотрите в файле old_version/test/test3.php, основное — это периодический запрос через ajax, чтобы узнать, авторизация прошла успешно или нет.
## Демонстрация использования нового API для JS от WeChat:
смотрите каталог test/jsapi.
License
-------
Это программное обеспечение лицензируется по условиям GNU LGPL версии 2.1 или более поздней.
Подробности доступны по ссылке: http://creativecommons.org/licenses/LGPL/2.1/
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )