1. Шаги:
Следующие общие шаги для меня в то время для создания и следуют двум основным линиям, которыеНаписание файлов кода и регистрационных файловСамое главное, вам необходимо внимательно прочитать документы по разработке официального аккаунта Sina Cloud и WeChat. 1. Зарегистрируйтесь в Sina Cloud (требуется аутентификация личности)»> Создайте облачное приложение»>Написание файлов кода и регистрационных файлов··>git загрузить код в репозиторий sae ··>проверить подключение 2. Зарегистрировать общедоступную платформу WeChat··>выполнить базовую конфигурацию для разработчиков··>проверить токен··>(использовать тестовый инструмент для проверки интерфейса)··>включить
2. Понимание
Для понимания всего процесса, переключение на чужую картинку можно на самом деле понять по нашему обычному серфингу в интернете.Браузер вводит URL-адрес для отправки запроса --> сервер получает запрос --> возвращает отображаемую html-страницу или данные json, xml --> браузер отображает ее после обработки, просто введите URL-адрес этого действияПубличный аккаунт WeChatэто сделано,флоскуркаОн отвечает за то, что сервер получает запрос на обработку запроса, обработка запроса может быть различной, например, вы можете отправлять фотографии подписчикам в соответствии с некоторой обработкой изображений, а затем возвращать или идентифицирующую информацию в соответствии с потребностями. третья сторона для получения данных API обратно, короче говоря, креативно Расскажите мне, что вы об этом думаете.
3. Начните практическую практику
i.----Sina Cloud Steps-----
1. Во-первых, зайдите в Sina Cloud: http://t.cn/RC4mL5Y, чтобы зарегистрировать учетную запись на официальном сайте.На самом деле, вы авторизованы для входа в свою учетную запись Weibo.Если вам это нужно, нажмите ссылка выше, чтобы зарегистрироваться и войти, чтобы вы и я оба. Там будут награды для каждого из них, и еще одна вещь, которая будет многословной, это то, что у новых пользователей будет определенное количество Юндо для вас, чтобы попробовать, но если вы проходите аутентификацию личности, даже если вы не используете услугу, Yundou будет автоматически потребляться каждый день, будьте осторожны, используйте ее как можно скорее или подождите, пока вам не потребуется повторно подтвердить свою личность. 2. Вы можете нажатьоблачное приложение, затем введитеконсоль,Создайтеновое приложение
3. Выберите python, можно выбрать только Python 2.7.Если вы изучаете Python 3, я предлагаю вам сначала прочитать эту статью о разнице между py2 и 3 в учебнике для новичков.Не пугайтесь из-за проблемы с версией:
Различия между версиями Python 2.x и 3.x
http://www.runoob.com/python/python-2x-3x.html
4. Я использую git для управления кодом и загрузки (без причины, просто потому, что я использую только git), а затем вскользь заполняю доменное имя второго уровня, следуя принципу недублируемой доступности, и имя приложения также заполняется случайно, пока вы счастливы.
5. После того, как приложение будет успешно создано, создайте новую папку локально на своем компьютере и свяжите репозиторий sae.Если вы не знакомы с операциями git, не бойтесь, я подготовил для вас электронную книгу github:
Learn-github-from-zero: http://pan.baidu.com/s/1eSw61Tg Извлеките пароль: ishd
6. Теперь предположим, что вы создали папку, используйте команду git в этой папке, чтобы клонировать созданное вами хранилище облачных приложений, затем добавьте два файла и напишите следующее содержимое соответственно, файл config.yaml должен объявить вас Имя приложения и номер версии, index.wsgi, предназначены для регистрации созданного вами фляжного приложения в облачном приложении для запуска (насколько я понимаю)
В папке vendor хранятся сторонние библиотеки, недоступные в среде python на облачных приложениях.Для установки сторонних библиотек нужно указать папку для установки, а затем git загрузить код Команда: pip install -t vendor ПАКЕТ ...
7. Следующим шагом будет написание кода для проверки подключения.Создайте новый py-файл (у меня это weixin.py) в папке, которую вы создали, сначала создайте простейшее приложение flask для тестирования и загрузите код в git.Оплатите внимание сюда. ,Имя создаваемого файла должно совпадать с именем файла импорта в index.wsgi.(см. рисунок выше), следующим образом
# -*- coding: utf-8 -*-
# filename: weixin.py
from flask import Flask
app = Flask(__name__)
@app.route('/test/')
def test():
return '<h1 style ="color:red">喂喂,我已经收到你发来的请求啦</h1>'
скопировать код
8. Введите URL своего доменного имени второго уровня в браузере, обратите внимание, добавьте тестовый путь, не говоря уже о том, что вы знакомы с детской обувью flask. Это показывает, что приложение Sina Cloud может нормально получать запросы и возвращать информацию.
ii. ---- Шаги официальной учетной записи WeChat -----
1. Предпосылка заключается в том, что вы должны сначала иметь общедоступную учетную запись WeChat, найтибазовая конфигурация, Заполните URL-адрес вторичного доменного имени вашего Sina Cloud, то есть URL-адрес запроса. Токен заполняется по мере необходимости, он предназначен для проверки и отправляется после его заполнения.проверка токена не удалась, код в облачном приложении должен быть улучшен.
2. Затем зайдите в файл weixin.py и напишите проверочный код в соответствии со следующей блок-схемой.Токен, который я здесь использую, заполнен в базовой конфигурации.
# -*- coding: utf-8 -*-
# filename: weixin.py
from flask import Flask, request, make_response
import time, hashlib
@app.route('/wechat/', methods=['GET', 'POST'])
def wechat():
# 微信验证token
if request.method == 'GET':
token = ' 你的token''
query = request.args
signature = query.get('signature', '')
timestamp = query.get('timestamp', '')
nonce = query.get('nonce', '')
echostr = query.get('echostr', '')
s = [timestamp, nonce, token]
s.sort()
s = ''.join(s)
if hashlib.sha1(s).hexdigest() == signature:
return make_response(echostr)
скопировать код
3. Вернитесь к базовой конфигурации общедоступной платформы WeChat, отправьте ее, и токен будет проверен (Sahua..)
Реализовать ответ в виде текста и изображения
1. Принцип:
Когда официальная учетная запись WeChat получает информацию о подписчике на переднем плане, она отправляет часть информации xml на URL-адрес запроса.В это время фляга на сервере анализирует xml, а затем упаковывает информацию для ответа в указанный xml информацию для возврата. Определите тип сообщения в соответствии с проанализированным MsgType, текст — «текст», изображение — «изображение», и выполняется соответствующая обработка.
2. Напишите код, сначала напишите два объекта модели, представляющие тело полученного сообщения и тело возвращенного сообщения.
# -*- coding: utf-8 -*-
# filename: receive.py
import xml.etree.ElementTree as ET
'''
该文件的类是接受体模型
'''
#进行消息类型判断,返回相应的接收体
def parse_xml(web_data):
if len(web_data) == 0:
return None
xmlData = ET.fromstring(web_data)
msg_type = xmlData.find('MsgType').text
if msg_type == 'text':
return TextMsg(xmlData)
elif msg_type == 'image':
return ImageMsg(xmlData)
#消息基类
class Msg(object):
def __init__(self, xmlData):
self.ToUserName = xmlData.find('ToUserName').text
self.FromUserName = xmlData.find('FromUserName').text
self.CreateTime = xmlData.find('CreateTime').text
self.MsgType = xmlData.find('MsgType').text
self.MsgId = xmlData.find('MsgId').text
#文本消息类
class TextMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.Content = xmlData.find('Content').text.encode("utf-8")
#图片消息类
class ImageMsg(Msg):
def __init__(self, xmlData):
Msg.__init__(self, xmlData)
self.PicUrl = xmlData.find('PicUrl').text
self.MediaId = xmlData.find('MediaId').text
скопировать код
# -*- coding: utf-8 -*-
# filename: reply.py
import time
'''
该文件的类是发送体模型,传参数进来即返回要发送的xml信息
'''
class Msg(object):
def __init__(self):
pass
def send(self):
return "success"
class TextMsg(Msg):
def __init__(self, toUserName, fromUserName,content):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] =int(time.time())
self.__dict['Content'] = content
def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{Content}]]></Content>
</xml>
"""
return XmlForm.format(**self.__dict)
class ImageMsg(Msg):
def __init__(self, toUserName, fromUserName, mediaId):
self.__dict = dict()
self.__dict['ToUserName'] = toUserName
self.__dict['FromUserName'] = fromUserName
self.__dict['CreateTime'] = int(time.time())
self.__dict['MediaId'] = mediaId
def send(self):
XmlForm = """
<xml>
<ToUserName><![CDATA[{ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{FromUserName}]]></FromUserName>
<CreateTime>{CreateTime}</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<Image>
<MediaId><![CDATA[{MediaId}]]></MediaId>
</Image>
</xml>
"""
return XmlForm.format(**self.__dict)
скопировать код
3. Основной файл написан, код аннотирован, просто читаем код
# -*- coding: utf-8 -*-
# filename: weixin.py
from flask import Flask, request, make_response
import time, hashlib
import xml.etree.ElementTree as ET
import reply
import receive
app = Flask(__name__)
@app.route('/test/')
def test():
return '<h1 style ="color:red">喂喂,我已经收到你发来的请求啦</h1>'
@app.route('/wechat/', methods=['GET', 'POST'])
def wechat():
# 微信验证token
if request.method == 'GET':
token = '你的token'
query = request.args
signature = query.get('signature', '')
timestamp = query.get('timestamp', '')
nonce = query.get('nonce', '')
echostr = query.get('echostr', '')
s = [timestamp, nonce, token]
s.sort()
s = ''.join(s)
if hashlib.sha1(s).hexdigest() == signature: #哈希加密跟signature进行比对
return make_response(echostr)
else:
rec_msg = receive.parse_xml(request.stream.read()) #判断当前的消息类型,获取到接收实例
if rec_msg.MsgType == 'text':
content = unicode(rec_msg.Content,"utf-8") #转换编码为unicode,方便提取需要的文字进行判断
if content.startswith(u"笑话",0,2): #如果是以笑话两字开头,则进行相应回复
rep_text_msg = reply.TextMsg(rec_msg.FromUserName, rec_msg.ToUserName, "哈哈,我给你讲个笑话吧哈哈哈 \n %s"%getTime() )
return rep_text_msg.send() #返回需要返回的xml信息
else:
rep_text_msg = reply.TextMsg(rec_msg.FromUserName,rec_msg.ToUserName,"复述:%s \n %s"%(rec_msg.Content,getTime()))
return rep_text_msg.send()
elif rec_msg.MsgType =="image": #我这里的处理是,如果是图片,就返回同样的MediaId,即是回复同样的图片
rep_img_msg = reply.ImageMsg(rec_msg.FromUserName,rec_msg.ToUserName,rec_msg.MediaId)
return rep_img_msg.send()
else:
return "success" #微信公众号规定,超过5秒未进行回复,则发起重请求,所以如果是无法识别的消息,则返回“success”,
# 就不会在消息界面提示公众号异常,提升用户体验。
#获取时间戳
def getTime():
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
скопировать код
4, git отправить код, тест
Суммировать:
Практические знания, казалось бы простые строчки кода, для новичков необходимо постоянно сверяться с документами и материалами, и постоянно проводить пробы и ошибки, я даже подготовил для вас учебник по git, какой у вас резон? это из? Тщательно продумайте официальную документацию, нет ничего более стандартного, чем документация. В этой статье реализована только общая идея ответа на сообщения и оценки сообщений, и вас ждут более интересные функции. Это сложно кодировать, если вы думаете, что это хорошо, пожалуйста, лайкните.
Ссылаться на:
Flask+SAE используется при разработке общедоступной платформы WeChat для реализации простой функции пассивного ответа на сообщение.
http://www.jianshu.com/p/ff3bd799e5d1