微信平台开发01-服务器认证

[TOC]

1.背景


  • 最近去聊一个代购平台的项目,经过一段时间的纠结以后,将平台现有的技术架构推翻掉、重来;
  • 原本很复杂的O2O和app的入口,改成普通的微信平台入口,这样一来可以降低技术门槛,二来可以快速开发上线使用,对于项目成功实施比较有意义;
  • 对于技术的选择再次回到了完全控制,这也很重要,要去维护一个外包公司以任务书为目标实现的东西,确实再辛苦不过了;
  • 对于架构的重新设计让项目清晰、简单;
  • 而不是为了让项目看起来高大上,做过度的设计。
  • 微信开发,我们之前做过一些研究,但是有断时间没做,而且没有形成资料文档的内容,可能在技术上有荒废。重新上手需要些时间,所以再次来研究一次,并形成我们自己的研究内容积累下来。

2.问题


  • 微信开发第一步:服务号申请
  • 微信开发第二部:认证服务器

认证服务器就是在微信平台上登记我们自己服务程序运行的服务器信息,让微信把交互的消息推送到这个服务器的制定地址上来,然后我们再根据微信推送的消息内容进行后续的处理和反馈结果

所以从开发的角度来看,认证服务器就是我们进行开发的第一步。

3.分析

graph LR
微信平台-->服务器
服务器-->应用平台
应用平台-->微信平台

认证的流程

  • 第一步,在微信服务器登记服务所在的地址 http://ip或域名/服务程序名, 比如 http://www.aopinjie.com/weixin
  • 第二步,在自己的服务器上做一个程序,部署在80端口
  • 第三步,认证的时候,微信服务器会发一个GET请求过来,我们需要把获取到的参数中一个回写的参数反馈给微信平台;
  • 第四步,微信平台收到这个回写的字符串认为跟它发的一样,就可以完成认证。以后我们的代码只要是跑在这个服务器上的,应该都能在微信中得到推送消息。

微信官方给出的认证流程是:

1.将token、timestamp、nonce三个参数进行字典序排序
2.将三个参数字符串拼接成一个字符串进行sha1加密
3.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

4.解决

根据分析的流程,我们还是使用web.py来构建我们的服务器认证的响应程序
我们还是这样的写法,这个是通用的以后再有类似的内容就不再加入这个内容了。

server.py

import web 
from urls import Handlers
app = web.application(Handlers,globals(),autoreload = True)
if __name__ == "__main__":
    print "Wechat Server is started......"
    app.run() 

url.py

#-*-coding:utf-8-*-
Handlers=(
        "/echo","wechatEcho.List",
        "/","wechatEcho.List",
)

wechatEcho.py

#coding:UTF-8
__author__ = 'pcode@163.com'
import hashlib
import web
class List:
    def GET(self):
        i           = web.input()                                           #获取输入参数
        assert 'signature'  in i.keys() , "Missing signature property"
        assert 'timestamp'  in i.keys() , "Missing signature timestamp"
        assert 'nonce'      in i.keys() , "Missing signature nonce"
        assert 'echostr'    in i.keys() , "Missing signature echostr"

        signature   = i.signature                                           #获取签名
        timestamp   = i.timestamp                                           #获取时间戳
        nonce       = i.nonce                                               #获取随机数
        echostr     = i.echostr                                             #回写字符串
        token       = "yourtoken"                                           #微信平台提供的token,其实是自己录入的,为了显示高大上,还是搞复杂些吧。

        list        = [token,timestamp,nonce]                               #字典序排序
        list.sort()

        sha1        = hashlib.sha1()                                        #使用sha1加密算法
        map(sha1.update,list)                                               #
        hashcode    = sha1.hexdigest()                                      #验证签名
        if hashcode == signature:                                           #签名正确返回回写字符串
            return echostr

5.备注

  • 代码里增加了不少的断言,来确保参数正确;
  • 代码里完整的做了一个认证数字签名串的过程,简单起见,也可以不验证,直接响应,但是为了确保来源的可靠性,一般做验证比较好。
  • 在验证服务器的环节,微信会提交一些数据过来给我们的程序,特别注意token这个值,需要在微信平台自行设置,并且确保我们程序里面的token跟平台上设置的一样。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,657评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,152评论 25 707
  • 2016的尾巴里要谱写最性感的故事-主角是自己。 很多关键词的跃动 Cma的冲刺日历 事在人为,外在的环境和客观准...
    Dorisyoung阅读 179评论 0 0
  • 昨天同学帮我解决了一个技术问题,该问题是,如果在登录状况下就显示根控制器为欢迎界面,动画效果为图片由下往上移动,没...
    一米押金阅读 194评论 0 0
  • 路径一:跨越他择产业 路径二:跨越战略集团 路径三:跨越买方链 路径四:跨越互补性产品和服务项目 路径五:跨越针对...
    李渡阅读 2,528评论 0 0