美文网首页python学习前端首页投稿(暂停使用,暂停投稿)
Python微信后台开发--环境搭建与接入指南

Python微信后台开发--环境搭建与接入指南

作者: PorridgeEater | 来源:发表于2016-03-13 22:29 被阅读8883次

0x00 背景及介绍


申请一个微信公众平台订阅号,将后台接入到服务器上,验证服务器地址的有效性,实现简单的业务逻辑,根据用户发送不同类型的消息做出不同的反应。

0x01 语言和框架


0x02 参考文档


0x03 服务器配置


  • 系统:CentOS
  • 配置过程:
    1. 更新系统
yum update
  1. 安装python依赖包
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  1. 安装python和pip及更新
yum install python
yum install python-pip
(sudo) pip install --upgrade pip
  1. 安装Django框架
pip install Django
  1. 安装wechat-python-sdk开发包
pip install wechat-sdk
  1. 新建一个Django实例
django-admin.py startproject PROJECT_NAME
cd PROJECT_NAME
python manage.py startapp APP_NAME
python manage.py makemigrations
python manage.py migrate
  1. 添加url规则(urls.py)
urlpatterns = [
        url(r'^wechat/', views.wechat_home),
]
  1. 编写views逻辑(views.py)
#-*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from django.http.response import HttpResponse, HttpResponseBadRequest
from django.views.decorators.csrf import csrf_exempt
from wechat_sdk import WechatConf
from wechat_sdk import WechatBasic
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import (TextMessage, VoiceMessage, ImageMessage, VideoMessage, LinkMessage, LocationMessage, EventMessage, ShortVideoMessage)
conf = WechatConf(
        token='YOUR_TOKEN_HERE',
        appid='YOUR_APPID',
        appsecret='YOUR_APPSECRET',
        encrypt_mode='YOUR_MODE',
        encoding_aes_key='YOUR_AES_KEY'
)
@csrf_exempt
def wechat_home(request):
        signature = request.GET.get('signature')
        timestamp = request.GET.get('timestamp')
        nonce = request.GET.get('nonce')
        wechat_instance = WechatBasic(conf=conf)
        if not wechat_instance.check_signature(signature=signature, timestamp=timestamp, nonce=nonce):
            return HttpResponseBadRequest('Verify Failed')
        else:
            if request.method == 'GET':
                response = request.GET.get('echostr', 'error')
            else:
                try:
                    wechat_instance.parse_data(request.body)    
                    message = wechat_instance.get_message()         
                    if isinstance(message, TextMessage):            
                        reply_text = 'text'
                    elif isinstance(message, VoiceMessage):         
                        reply_text = 'voice'
                    elif isinstance(message, ImageMessage):         
                        reply_text = 'image'
                    elif isinstance(message, LinkMessage):          
                        reply_text = 'link'
                    elif isinstance(message, LocationMessage):      
                        reply_text = 'location'
                    elif isinstance(message, VideoMessage):         
                        reply_text = 'video'
                    elif isinstance(message, ShortVideoMessage):    
                        reply_text = 'shortvideo'
                    else:
                        reply_text = 'other'
                    response = wechat_instance.response_text(content=reply_text)
                except ParseError:  
                    return HttpResponseBadRequest('Invalid XML Data')
            return HttpResponse(response, content_type="application/xml")
  1. 开启django app,后台挂载在80端口
sudo python manage.py runserver 0.0.0.0:80 &

0x04 微信后台配置


  • 记录APPID和APPSecret填入views.py的conf属性
  • 填写服务器配置
    • 注意URL最后带上/,否则django会报POST URL error
    • 自定义token,填入views.py的conf属性
    • 自定义EncodingAESKey,填入views.py的conf属性
基本配置

0x05 遇到的坑


  1. runserver后本地能够访问,外网不能访问
  • 绑定ip到0.0.0.0,设置为对公监听即可
  1. 输入中文无法响应
  • import os后设置编码为utf8
  1. 端口号被占用
  • ps aux | grep manage后然后kill -9 相应进程号

0x06 后记


  • 能够识别不同的消息类型并进行相应回复


    实现效果图
  • 代码的功能还有待完善,结构和逻辑也可以再设计得更清晰一些

相关文章

  • Python微信后台开发--环境搭建与接入指南

    0x00 背景及介绍 申请一个微信公众平台订阅号,将后台接入到服务器上,验证服务器地址的有效性,实现简单的业务逻辑...

  • 微信开发之环境搭建

    微信开发之环境搭建 接入指南 接入概述 接入微信公众平台开发,开发者需要按照如下步骤完成: 1、填写服务器配置 2...

  • tinker

    #微信热修复框架Tinker 接入指南----------> Tinker简介:By腾讯微信团队开发,技术原理简介...

  • 微信服务号开发

    微信服务号开发 整体流程 域名报备,服务器搭建 Python开发环境和项目的初始化搭建; 微信公众号注册及开发模式...

  • android 微信 支付 接入流程总结

    [TOC] 客户端微信支付 android 接入微信指南android 资源下载页微信支付 开发文档 登录微信官方...

  • 使用Java开发微信公众平台(二)——消息的接收与响应

    上一篇文章中,我们学习了使用Java语言开发微信公众平台的第一部分——环境搭建与开发接入。那么,本篇文章,我们将在...

  • tornado后台热加载配置

    后台使用tornado4开发,需要搭建一个后台开发环境,让代码修改后自动重启 热加载; 1.简介 Python后端...

  • 微信小程序开发资料

    1、W3Cschool微信小程序开发文档2、微信官方教程3、官方工具4、设计指南5、运营规范6、接入指南7、支付文...

  • 五分钟搭建内网开发公众号环境

    为什么要搭建环境?相信开发过微信公众号的小伙伴,都深知调用微信授权必须要在微信 公众号后台配置域名后才可以正确调用...

  • Python学习一之开发环境搭建

    一、搭建Python开发环境 环境准备 win10 自备 idea idea安装传送阵 Python开发环境搭建步...

网友评论

  • b4ac4214af9e:想请问怎么自定义菜单栏?
  • 1bb0b83874b9:这个问题作者有遇到过么?刚开始运行是正常的,但是后来莫名其妙就变成这样了,只要一给公众号发信息就会出现这个错误。
    Exception happened during processing of request from ('101.226.65.107', 49443)
    Traceback (most recent call last):
    File "/usr/lib/python3.5/socketserver.py", line 625, in process_request_thread
    self.finish_request(request, client_address)
    File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request
    self.RequestHandlerClass(request, client_address, self)
    File "/usr/lib/python3.5/socketserver.py", line 681, in init
    self.handle()
    File "/usr/local/lib/python3.5/dist-packages/django/core/servers/basehttp.py", line 140, in handle
    self.raw_requestline = self.rfile.readline(65537)
    File "/usr/lib/python3.5/socket.py", line 575, in readinto
    return self._sock.recv_into(b)
    ConnectionResetError: [Errno 104] Connection reset by peer
  • 6cb4a7efdf06:encrypt_mode='YOUR_MODE', 这里填啥呢?
    PorridgeEater:normal/compatible/safe,分别对应“基本配置”中消息加密方式的明文/兼容/安全
  • 019a8f9bbff7:代码都显示不全,看不到后半部分,怎么办呢
    PorridgeEater:github上有源码
  • 八宝粥BBZ:赞一个,今天正好想到这个,就看到作者的文章了

本文标题:Python微信后台开发--环境搭建与接入指南

本文链接:https://www.haomeiwen.com/subject/pnfflttx.html