文档章节

微信公众号开发小记——2.80端口上的服务

duoduo3_69
 duoduo3_69
发布于 2016/04/15 17:52
字数 979
阅读 55
收藏 1
点赞 1
评论 0

描述

微信公众号开发基本分为2大种类型

1.用户直接做了某些操作(回复信息、订阅、扫码、发语音、点按钮等),此时这些信息微信会发送到微信服务器的80端口,这是一种开发类型; 2.通过连接(按钮、文章)引导用户到另一个网站,网站通过oauth实现微信的三方登录做到用户打通,然后提供更多服务

注意第二种类型的其他网站可以跟第一种类型(只提供80端口服务)的网站是一个server

80端口的服务开发

代码位置weixin_server tag:80-port-20160415

wechat对象以及缓存access_token

wechat sdk操作都需要一个wechat的东西,生成这玩意儿需要加载一个wechat_config,config里面包含了你的appid,appsecret,以及你消息加密解密的配置,为了简少根据加密方式造成的代码变更,我在配置里面添加了settings.WEIXIN_ENCRYPT_MODE,这样直接填写你的加密模式,就可以在任何用到wechat的地方直接import一个wechat变量,之所以要用get_wechat的方式实时生成是为了做access_token的缓存,下面会讲。

from .wechat import get_wechat

wechat = get_wechat()

微信在做一些操作是需要用到access_token(生成二维码等),而每天access_token接口的调用上限为2000,需要自己做缓存, sdk文档讲了几种方式,我觉得放在cache中拿比较妥当。

代码我不贴了,这是位置 weixin/config.py weixin/wechat.py

handler各种微信post到80的事件

微信会在用户对公众号交互时像我们的服务器80端口post一些事件,sdk文档 message源码,大体看了下我写了个mixin

# -*- coding: utf-8 -*-
from weixin.wechat import get_wechat
from wechat_sdk.messages import MESSAGE_TYPES, EventMessage

wechat = get_wechat()

REVERSED_MESSAGE_TYPES = {value:key for key, value in MESSAGE_TYPES.iteritems()}

class WeixinDispatchMixin(object):

    def dispatch_weixin(self, request, *args, **kwargs):
        content = request.body
        signature = request.GET.get('signature', '')
        msg_signature = request.GET.get('msg_signature', '')
        timestamp = request.GET.get('timestamp', '')
        nonce = request.GET.get('nonce', '')
        try:
            wechat.parse_data(
                    content,
                    msg_signature=msg_signature,
                    timestamp=timestamp,
                    nonce=nonce)
        except ParseError:
            return HttpResponse('Invalid Body Text')
        handler_name = self.get_weixin_handler_name(request, wechat, *args, **kwargs)
        handler = getattr(self, handler_name, self.http_method_not_allowed)
        return handler(request, wechat, *args, **kwargs)

    def get_weixin_handler_name(self, request, parsed_wechat, *args, **kwargs):
        message = parsed_wechat.message
        if isinstance(message, EventMessage):
            event_name = REVERSED_MESSAGE_TYPES[type(message)]
            event_detail_name = 'weixin_handler_{}_{}'.format(event_name, message.type)
            if hasattr(self, event_detail_name):
                event_name = event_detail_name
                return event_name
        return u'weixin_handler_{}'.format(REVERSED_MESSAGE_TYPES.get(type(message), 'unsupport'))

mixin参考django的dispatch,这样在继承的类里面直接实现weixin_handler_xxx方法即可,然而event有更多的类型,如果是通用处理则直接实现weixin_handler_event,如果要更加细化,例如扫码的event,则实现weixin_handler_event_scan方法,可以参考weixin_server/views.py

菜单儿

菜单可以直接在admin定制,由于菜单类似一种配置,同一时间最多且只有1个,我就把edx的config_model拿过来了,自己定制了下admin,这样你可以直接在admin里面修改菜单,微信会生效。微信菜单会缓存5分钟,你可以取消关注,然后在关注查看菜单变化效果。

菜单这块儿的代码有点意思,感兴趣的可以看下。

weixin/models.py weixin/admin.py

生成二维码

二维码的逻辑略有不同(相对于sdk的其他response_xxx),所以我写了个qrcode.py封装了一下,注意永久二维码只能生产10万张,业务场景不要乱用,二维码的这些id、url都是需要做本地存储的,我没接model就丢到缓存里了。

© 著作权归作者所有

共有 人打赏支持
duoduo3_69
粉丝 90
博文 57
码字总数 83746
作品 0
青岛
程序员
微信公众号开发小记——4.两种邀请用户的方式 扫码&&链接

描述 假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式...

D咄咄
2017/11/29
0
0
微信公众号开发小记——2.80端口上的服务

描述 微信公众号开发基本分为2大种类型 1.用户直接做了某些操作(回复信息、订阅、扫码、发语音、点按钮等),此时这些信息微信会发送到微信服务器的80端口,这是一种开发类型; 2.通过连接(...

D咄咄
2017/11/29
0
0
微信公众号开发小记——1.接入微信服务器

描述 由于马上要做一波公众号开发,今天先调研,把基本的服务器接起来。微信公众号服务器在接入的时候要做一些烦躁的事情,改配置的时候要进行握手,api调用要做一些烦躁的加密解密检查,而且...

D咄咄
2017/11/29
0
0
微信公众号开发小记——1.接入微信服务器

描述 由于马上要做一波公众号开发,今天先调研,把基本的服务器接起来。微信公众号服务器在接入的时候要做一些烦躁的事情,改配置的时候要进行握手,api调用要做一些烦躁的加密解密检查,而且...

duoduo3_69
2016/04/08
279
0
大前端 Android 开发日记 10:微信分享

大前端 Android 开发日记 10:微信分享 Blog | Phodal Geek's Life2017-12-241 阅读 Android 与之前的微博分享相比,微信分享就没有那么容易了——微信官方的 SDK 太差劲了。文章也写得像一坨...

Blog | Phodal Geek's Life
2017/12/24
0
0
数字化平台之微信平台策略

当下,互联网技术正在深刻地重构我们的社会,各大企事业单位——大到万人集团公司,小到图文复印店——都在争先恐后地从所谓的“传统行业”中脱胎换骨一番以完成数字化转型。 image 在这个过...

ThoughtWorks中国
2017/11/30
0
0
大前端 Android 开发日记九:微博分享

大前端 Android 开发日记九:微博分享 Blog | Phodal Geek's Life2017-12-241 阅读 Android 早期在评估的时候,使用的是第三方 SDK —— shareSDK。可是,这个第三方 SDK 需要注册相应的账号...

Blog | Phodal Geek's Life
2017/12/24
0
0
重磅!个人开发者可以开发上线小程序了

最新消息!今天,小程序新增六大新能力:个人开发者开放、公众号自定义菜单跳小程序、公众号模版消息可打开相关小程序、模板消息跳小程序 、绑定时可发送模板消息、兼容线下二维码、app分享用...

anda0109
2017/03/28
0
0
从零开始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程

笔者决定在嵌入式企鹅圈2016年的首篇文章中,发表微信硬件物联领域极具实践价值的文章,它将能指引和帮助任何有兴趣于物联网开发的童鞋们快速掌握微信硬件开发流程,只需一个小时,而再不需要...

yueqian_scut
2016/01/11
0
0
移动支付系统搭建代理,移动扫码支付系统贴牌开发有哪些优势

移动扫码支付成为了主流的支付模式,那么移动扫码支付存在哪些优势?我们有可以从中获取哪些收益点? 移动扫码支付优势——减少商家运营成本,提高运营效率——增加消费群体的粘性,绑定老顾...

qq_38621102
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

pbgo: 基于Protobuf的迷你RPC/REST框架

https://www.oschina.net/p/pbgo

chai2010
39分钟前
0
0
rsync工具介绍、常用选项以及通过ssh同步

linux下的文件同步工具 rsync rsync是非常实用的一个同步工具,可以从a机器到b机器传输一个文件,也可以备份数据,系统默认没有这个工具,要使用命令 yum install -y rsync 安装。 rsync的命...

黄昏残影
54分钟前
0
0
OSChina 周四乱弹 —— 表妹要嫁人 舅妈叮嘱……

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @哈哈哈哈哈嗝:一定要听——The Pancakes的单曲《咁咁咁》 《咁咁咁》- The Pancakes 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :...

小小编辑
今天
311
4
流利阅读笔记30-20180719待学习

重磅:让人类得老年痴呆的竟是它? Lala 2018-07-19 1.今日导读 去年奥斯卡最佳动画长片《寻梦环游记》里有一句经典台词:“比死亡更可怕的,是遗忘”。在电影中,年迈的曾祖母会重复说一样的...

aibinxiao
今天
3
0
1.16 Linux机器相互登录

Linux机器之间以密码方式互相登录 运行命令#ssh [ip address],标准命令:#ssh [username]@ip, 如果没有写用户名,则默认为系统当前登录的用户 命令#w查看系统负载,可查看到连接到该主机的...

小丑鱼00
今天
0
0
about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
3
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部