个人公众号服务端开发Demo

公众号出来很久了,也可以个人申请。知道公众号的服务端开发其实很简单,接口调用封装,数据存取,不外如是。

人一旦懒了,真的是 “无可救药” 了。。。现简单描述晚到的公众号HelloWorld

  • 思路

公众号里面简单的文章展示,静态博客展示这种好像没啥特别的,就跳过了。

在聊天框输入参数, 传到云服务器处理,然后请求个三方API获取信息,封装返回。嗯,这就算个基本的Demo了

  • 准备

1, 得申请个公众号,个人的,免费

2, 最好买一台云服务器,双十一的阿里云最低100¥/Year,heihei

  • Let‘s go

按照 微信的公众号对接的文档来就可以了,直接贴代码

main.py

# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle

urls = (
    ‘/wx‘, ‘Handle‘,
)

if __name__ == ‘__main__‘:
    app = web.application(urls, globals())
    app.run()

handle.py

# -*- coding: utf-8 -*-
# filename: handle.py

import hashlib
import web
import reply
import receive
import requests
import re
import logging

MY_TOKEN = "XXXXX" # 按照在公众号上的设置对应
URL_PHONENUM_INFO = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(filename=‘root.log‘, level=logging.INFO, format=LOG_FORMAT)

# 调用查询号码省份运营商的API,简单暴力正则匹配结果返回
def getCurrentPhoneNumInfo(num):
    logging.info("getCurrentPhoneNumInfo[%s]", num)
    try:
        if re.match("^1[3|5|7|8]\d{9}$", num) == None:
            return "Error phone number format."
        else:
            r = requests.get(URL_PHONENUM_INFO + num)
            m = re.search("carrier\:\‘(.*)\‘.*", r.text, re.M)
            result = m.group(1)
            logging.info("result=%s" , result)
            return result.encode("UTF-8") # python2的转码问题总是会坑到一批新人
    except Exception as e:
        logging.error(e)
        return "API error"

class Handle(object):

     # 文档中的Get不是为了对话框交互准备的,此处删除   

    def POST(self):
        try:
            webData = web.data()
            logging.warn("Handle Post webdata is %s", webData)
            #后台打日志
            recMsg = receive.parse_xml(webData)
            if isinstance(recMsg, receive.Msg) and recMsg.MsgType == ‘text‘:
                toUser = recMsg.FromUserName
                fromUser = recMsg.ToUserName
                receiveContent = recMsg.Content
                logging.warn("receive content:" + receiveContent)
                content = getCurrentPhoneNumInfo(receiveContent)
                replyMsg = reply.TextMsg(toUser, fromUser, content)
                return replyMsg.send()
            else:
                logging.error("格式不支持,暂且不处理")
                return "success"
        except Exception, Argment:
            return Argment

receive.py

# -*- 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  # 暂只处理text格式的消息,demo嘛
    if msg_type == ‘text‘:
        return TextMsg(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")

reply.py

# -*- coding: utf-8 -*-
# filename: reply.py
import time
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)

效果图

【客户端--公众号】

【服务端日志】

原文地址:https://www.cnblogs.com/Hughzm/p/9966186.html

时间: 2024-08-29 00:36:17

个人公众号服务端开发Demo的相关文章

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462

微信公众号积分系统开发模式详解

微信公众号积分系统开发(李想.185.6504.8478)微信公众号积分系统是什么?微信公众号积分系统有什么用?微信公众号积分模式系统简介:O2O电子商务模式需具备五大要素:独立网上商城.国家级权威行业可信网站认证.在线网络广告营销推广.全面社交媒体与客户在线互动.线上线下一体化的会员营销系统.一种观点是,一家企业能兼备网上商城及线下实体店两者,并且网上商城与线下实体店全品类价格相同,即可称为O2O:也有观点认为,O2O是B2C( Business To Customers)的一种特殊形式. 在

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三

微信开放平台 公众号第三方平台开发 教程一 平台介绍

微信现在火,火的如火如荼,给我们这些第三方的开发者带来了不少机会,我相信现在有不少人在基于微信的公众平台在做二次开发,我将会写一系列的文章,来介绍微信的另一种开发模式- 基于微信开发平台的公众号第三方平台开发,从基本的注册开始介绍,一步一步到所有的接口开发,并且针对与微信的开放平台的第三方平台的所有的接口我已经全部封装成了.net的SDK,并且完全免费和开发,供所有开发者使用. 什么是公众号第三方平台,与现有的公众平台有什么区别? 官方介绍:公众号第三方平台的开放,是为了让公众号运营者,在面向垂

如何进行SuperMap iServer服务端开发

有时候在进行地图应用开发时,可能单纯的客户端无法满足要求(如功能和性能等因素),这时就需要进行iServer的服务端开发.SuperMap iServer 6R/7c的服务端开发步骤如下: 一.在Eclipse中新建一个Dynamic Web Project 此过程截图略去 二.引用iServer所需的各类jar包 经测试后发现,必须引用iServer/WEB-INF/lib下的所有jar包,否则运行时会出现一些奇怪的错误.这些jar包所在的位置为[iServer安装目录]\webapps\is

不要害怕服务端开发(一)

经历了前端技术的变更,发现我再也不想去追前端技术了,同学们做java的现在还是做java,我之前做flash的现在没饭吃了,去年改做h5,行业不好混啊,java稳如狗. 之前一直想学服务端开发,现在改变了工作环境,稍微有点时间了,加上最近上班的工作实在是闲,上头布置的游戏前端demo,用3d写了一个,然后用2d写了一个,后面又用h5写了一个. 也找不到好的形容词去形容现在的状态,因为还在试用期,所以不敢太冒进,一直停留在写demo的进度上. 昨天开始,学着用nodejs写来静态服务器. 然后今天

Android WebView与服务端交互Demo

使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互.我这里客户端使用的工具是Eclipse,服务端使用MyEclipse. 实现效果图: 客户端: 点击登录按钮后,页面跳转,而在服务端Console中看到如下(只看最后一行即可): 可以看到服务端收到了客户端发过来的用户名:yao. 源代码: 客户端: activity_main: <RelativeLayout xmlns:android

公众号第三方平台开发 教程六 代公众号使用JS SDK说明

公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号授权第三方平台 公众号第三方平台开发 教程四 代公众号发起网页授权说明 公众号第三方平台开发 教程五 代公众号处理消息和事件 公众号第三方平台开发 教程六 代公众号使用JS SDK说明 另,感谢一下这个大虾的博客,这几篇东西都是在他的博文基础上完成的,他的博客里也有一些接口代码可以下载 微信开发系列