Автор: @jeff_kit
Данный SDK поддерживает отправку сообщений и OAuth интерфейс для публичных аккаунтов WeChat и корпоративных аккаунтов. В этом документе и SDK предполагается, что пользователь уже имеет базовые знания о разработке публичных аккаунтов WeChat, а также может использовать документацию публичных и корпоративных аккаунтов для поиска соответствующих деталей интерфейса.
pip install wechat
git clone git@github.com:jeffkit/wechat.git
cd wechat
python setup.py install
Для обработки сообщений, отправленных пользователями через публичные аккаунты WeChat, данный SDK предоставляет микрофреймворк. Разработчику необходимо унаследовать класс wechat.official.WxApplication, реализовать методы, соответствующие различным типам сообщений, и интегрировать этот класс с предпочитаемым веб-фреймворком.
WxApplication выполняет проверку легитимности запросов и распространение сообщений внутри системы, а также структурирует входящие сообщения. Разработчик может сосредоточиться на бизнес-логике.
Основные методы класса WxApplication:
Метод process класса WxApplication принимает следующие параметры:
В конце метод process возвращает строку (xml или echoStr).
После настройки URL и токена в настройках публичного аккаунта WeChat сервер WeChat будет обращаться к этому URL методом GET. Разработчик должен вызвать метод app.process(query, xml=None), чтобы вернуть echoStr.
qs = 'nonce=1221&signature=19selKDJF×tamp=12312'
query = dict([q.split('=') for q in qs.split('&')])
app = YourApplication()
echo_str = app.process(query, xml=None)
# Вернуть echo_str в WeChat
Когда пользователь отправляет сообщение публичному аккаунту WeChat, сервер WeChat вызывает URL обратного вызова. Разработчик должен проверить легитимность каждого запроса и обработать сообщение. Для этого нужно вызвать метод app.process.
qs = 'nonce=1221&signature=19selKDJF×tamp=12312'
query = dict([q.split('=') for q in qs.split('&')])
body = '<xml> ..... </xml>'
app = YourApplication()
result = app.process(query, xml=body)
# Вернуть result в WeChat
Рассмотрим пример кода подкласса WxApplication, который возвращает текст, полученный от пользователя:
from wechat.official import WxApplication, WxTextResponse, WxMusic,\
WxMusicResponse
class WxApp(WxApplication):
SECRET_TOKEN = 'test_token'
WECHAT_APPID = 'wx1234556'
WECHAT_APPSECRET = 'sevcs0j'
def on_text(self, text):
return WxTextResponse(text.Content, text)
Необходимо настроить несколько параметров класса, которые можно найти на странице разработчика в разделе управления публичными аккаунтами WeChat. Первые три параметра не обязательны, но их нужно передать при вызове метода process.
Затем разработчик должен реализовать каждый метод on_xxx класса WxApplication. Существует соответствующий метод для каждого типа сообщения и события.
Все методы on_xxx перечислены ниже:
Определение метода on_xxx:
def on_xxx(self, req):
return WxResponse()
Метод on_xxx принимает параметр req, экземпляр класса WxRequest, представляющий сообщение от пользователя. Он возвращает экземпляр подкласса WxResponse.
req — это экземпляр класса WxRequest, который представляет сообщение от пользователя. Его атрибуты соответствуют атрибутам XML сообщения. Разные типы сообщений имеют несколько общих атрибутов:
Разные типы сообщений имеют разные атрибуты. Имя атрибута соответствует имени тега XML. Например, у сообщения типа text есть атрибут Content, а у сообщения image есть атрибуты PicUrl и MediaId. Более подробную информацию о сообщениях можно найти в официальной документации WeChat для публичных аккаунтов (http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html).
Метод on_xxx должен возвращать экземпляр подкласса класса WxResponse. Подклассы WxResponse и их конструкторы:
WxTextResponse("hello", req)
WxImageResponse(WxImage(MediaId='xxyy'),req)
WxVoiceResponse(WxVoice(MediaId='xxyy'),req)
WxVideoResponse(WxVideo(MediaId='xxyy', Title='video', Description='test'),req)
WxMusicResponse(WxMusic(Title='hey jude',
Description='dont make it bad',
PicUrl='http://heyjude.com/logo.png',
Url='http://heyjude.com/mucis.mp3'), req)
WxNewsResponse(WxArticle(Title='test news',
Description='this is a test',
Picurl='http://smpic.com/pic.jpg',
Url='http://github.com/jeffkit'), req)
Ниже на примере Django объясняется, как реализовать функцию (view) для обработки обратного вызова от WeChat, используя пример кода из WxApp:
from django.http import HttpResponse
def wechat(request):
app = WxApp()
result = app.process(request.GET, request.body)
return HttpResponse(result)
Конфигурация urls.py:
urlpatterns = patterns('',
url(r'^wechat/', 'myapp.views.wechat'),
)
from flask import request
from flask import Flask
app = Flask(__name__)
@app.route('/wechat')
def wechat():
app = WxApp()
return app.process(request.args, request.data)
Хорошо. Это всё. WxApplication не зависит от веб-фреймворка, и вы можете использовать его с любым фреймворком.
Ладно, на самом деле, вы можете написать функцию ответа on_xxx в любом месте. Затем, перед использованием, сообщите WxApplication, какую функцию вы хотите использовать для ответа на соответствующее событие. Например, в Django:
# Напишите свою собственную функцию обработки сообщений в любом месте.
# @any_decorator # Добавьте любой декоратор.
def my_text_handler(req):
return WxTextResponse(req.Content, req)
# Используйте это в веб-приложении следующим образом:
def wechat_view(request):
app = WxApplication() # Просто создайте экземпляр базового класса.
app.handlers = {'text': my_text_handler} # Установите свой собственный обработчик
result = app.process(request.GET, request.body,
token='xxxx', app_id='xxxx', aes_key='xxxx')
return HttpResponse(result)
Да, можно настроить обработчики сообщений, а если вы хотите настроить обработчики событий, вам нужно изменить app.event_handlers. Формат данных такой же. Конкретные ключи для типов сообщений и событий можно найти непосредственно в исходном коде.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )