各位大神 想请教下 如何将阿里阿里icon矢量图标标iconfont.css改为iconfont.wxss

详解CSS中iconfont的使用
WEB前端开发 & 08-04 16:37:02 & 作者:佚名 &
这篇文章主要介绍了详解CSS中iconfont的使用,阿里巴巴的iconfont库非常有人气,同时也介绍了iconfont的一些缺点,需要的朋友可以参考下
初识iconfont
就算我们一开始不懂这个英文不懂是干嘛的,对于iconfont,英文从后往前读应该叫做:字体图标。这里面已经包含两个概念,首先必须是字体,第二,就是图标。我们都知道网页中的字体我们可以控制大小、样式、变形、拉伸、默认字体等属性,所以这个iconfont必须是以文字嵌入到样式中,所以想到的必须是font;既然是图标那么它就必须有一个路径来引入进来,首先我们一开始想到的img这个标签,既然又是文字又是图标,我们能想到的就只有这个@font-facecss3属性。
还有这个iconfont后来词语,并不是一开始就出现的,网页制作者或者学者想要叫起来更爽口所赋予的一个表现层的东西。
所以,当我们看见的图标教程如下:
第一步:使用font-face声明字体
@font-face&{font-family:&'iconfont'; &&
&&&&src:&url('iconfont.eot');&&&
&&&&src:&url('iconfont.eot?#iefix')&format('embedded-opentype'),&&&
&&&&url('iconfont.woff')&format('woff'),&&&
&&&&url('iconfont.ttf')&format('truetype'),&&&
&&&&url('iconfont.svg#uxiconfont')&format('svg');&&&
第二步:定义使用iconfont的样式
.iconfont{ &&
&&&&font-family:&iconfont&&!important; &&
&&&&font-size:16px;font-style:normal; &&
&&&&-webkit-font-smoothing:& &&
&&&&-webkit-text-stroke-width:&0.2px; &&
&&&&-moz-osx-font-smoothing:&}&&
第三步:挑选相应图标并获取字体编码,应用于页面
&i&class=&iconfont&&#x33&/i&&&
但是,Iconfont存在一些弊端:
&&& 浏览器将其视为文字进行抗锯齿优化,有时得到的效果并没有想象中那么锐利。 尤其是在不同系统下对文字进行抗锯齿的算法不同,可能会导致显示效果不同。&&& Icon Font 作为一种字体,Icon 显示的大小和位置可能要受到font-size、line-height、word-spacing等等 CSS 属性的影响。 Icon 所在容器的 CSS 样式可能对 Icon 的位置产生影响,调整起来很不方便。&&& 使用上存在不便。首先,加载一个包含数百图标的 Icon Font,却只使用其中几个图标,非常浪费加载时间。 如果是自己制作 Icon Font 以及把多个 Icon Font 中用到的图标整合成一个 Font 也非常不方便。当然使用阿里UX矢量图标库可以解决这个问题&&& 为了实现最大程度的浏览器支持,可能要提供至少四种不同类型的字体文件。包括TTF、WOFF、EOT 以及一个使用 SVG 格式定义的字体。如果是自己制作的话,可能要头疼死
大家感兴趣的内容
12345678910
最近更新的内容他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)小程序中图标引入方式 - 简书
小程序中图标引入方式
@(C-工作问题)
小程序开发
微信小程序开发,如果想使用像web端那样的字体图标,也是可以的,但是也只是支持Unicode,不支持彩色图标,在网上也查了很多,其实也有很多都相似,这里大概也就三种方法可以供参考,
这个我并不知道是什么,但是好像只需要转换下就可以了,也还是很简单的,
下载好所需的文件,例如iconfont的字体图标
iconfont.png
下载好的代码里面的代码格式如下
zhuanhuan.png
3.在这个平台上转换一下格式为base64位,转换的格式为
jieguo.png
下载好的文件里面包含的有style.css 文件,打开文件,复制里面的代码
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=6'); /* IE9*/
src: url('iconfont.eot?t=6#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-charset=utf-8;base64,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') format('woff'),
url('iconfont.ttf?t=6') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=6#iconfont') format('svg'); /* iOS 4.1- */
.iconfont {
font-family:"iconfont" !
font-size:16
font-style:
-webkit-font-smoothing:
-moz-osx-font-smoothing:
.icon-kefu:before { content: "\e625"; }
.icon-shenfenzheng:before { content: "\e626"; }
.icon-quanping:before { content: "\e627"; }
.icon-duigou:before { content: "\e628"; }
.icon-shuoming:before { content: "\e629"; }
5.复制上面的代码到小程序的工程里面(需要在那个文件里面目录里面使用图标,就复制到哪里,如想要在index.wxss的目录使用,就在index.wxss里面复制,也可以在app.wxss里面全局使用)
[图片上传失败...(image-a98c56-6)]
第二种方法是以文件引入的方式
也就是上面的转换好的文件style.css 改写后缀为iconfont.wxss 因为微信只认wxss结尾的style文件
文件结构可以以下图所示
文件结构.png
需要在哪个文件中用到图标就在哪里引入,一般都是放在app.wxss根目录下,供全局使用,引入方式为
/**app.wxss**/
iconfont.wxss 的引入方式
@import "/lib/style/iconfont.wxss";
.container {
height: 100%;
flex-direction:
align-items:
justify-content: space-
padding: 200rpx 0;
box-sizing: border-
直接使用style.css,不转换base64位
在下载好图标后,打开里面的找到style.css ,直接修改后缀为iconfont.wxss 然后移动到相应的目录结构,在app.wxss直接引入文件即可
这个是最为方便的一个做法,但是还没有验证是否可以审核。还待考察。
CSS 绝对底部 - 前端 - 掘金来自国外的设计达人,纯CSS,可以实现: 当正文内容很少时,底部位于窗口最下面。当改变窗口高度时,不会出现重叠问题。甚至,创造该CSS的人还专门成立一个网站介绍这个CSS底部布局方案。不知道他有没有去申请专利:)&!DOCTYPE htm...
众所周知, 小程序的有一个1M大小的限制. 而优美的界面离不了各种图形. 如果将这些图形集成到小程序中. 其臃肿的体积是让微信官方不想接受的. 作为前端开发, 阿里给我早就了iconfont开源图标库. 那能不能把这些图标字体引入到小程序中. 让水火不容的AT来一次拥抱. ...
声明:文章来源网络转载,我在这做了一个整合,方便大家查阅,持续更新。 01:概述 文 | 周中坚 美团点评工程师,4年 Web 前端开发经验,主要负责过会员卡、外卖、预订、商家平台等业务的前端开发,现在是美团点评点餐团队的一员。 如果你看过《张小龙首次全面阐述小程序》这篇文...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
刚写demo写到这里,一直用的图片,花了几分钟琢磨了一下字体文件引入方式;在这里做个分享也方便自己以后使用记录,请大家多多指教! 小程序引入外部文件的方式是:@import &*/*.wxss&; 如果所有页面都要使用的话:@import&/lib/style/font.w...
简单好用的, 可自定义选中和非选中状态样式的 下拉列表菜单选择筛选条件的控件
喜欢的朋友们可以 star 一下, 以资鼓励
多谢 github地址
https://github.com/CoderPeak/CFDropDownMenuView 效果图 如何使用 ---...
长期久坐久站的程序员、IT工程师、教师、孕妇等都是静脉血栓的高危人群。本篇文章主要介绍血栓的概念、类型和危害,下一篇主要介绍如何预防血栓,让久坐久站的程序员、IT工程师、教师等高危人情终身远离血栓,远离猝死。
血栓是隐蔽杀手,猝死的真凶,所有人都应具备防栓意识。...
夜很晚了 不该写东西了 瞌睡无处安放了 青春放浪不羁 四处逃窜 恐惧是枷锁 希望被禁锢着 总有一天 我会收不了、憋不住 打破这无耻的恐惧 去看看我想看的天和地 晚安 至23的我
?本文相关链接: 子曰少怀说说你的历史观:历史是什么? 简友周洪健从《微虫世界》到《中国的一日》看我的历史观 简友谷离子我愿背负起历史使命,为姜伯约谱写一曲最动听的乐章 我的前两期文章你读的历史,都被历史观左右着1 你读的历史,都被历史观左右着2
从学术的角度来讲,历史观...
(一) 当色子落下 你的命运 早已了无牵挂 面前的筹码 你不要惆怅 因为 这是一笔血债血偿 难道不是吗 身上的 锦鲤 是否在岁月中 又深陷 皮肤里了吗 (二) 你不要太狂妄自大 你的左手早在十年前 被砍于脚下 不要忘记 那时的绝望自己 它仿佛是用 真理 会告诉你 如何用冷静...微信小程序wxss样式文件中引用iconfont素材a year ago赞赏2 人赞赏4收藏分享举报文章被以下专栏收录Python Tornado 开发微信公众号{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&Python Tornado 微信公众号开发&,&permission&:&COLUMN_PUBLIC&,&memberId&:,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&Python Tornado 开发微信公众号&,&urlToken&:&sufaith&,&id&:20109,&imagePath&:&v2-66d7dc371e2de66f93b5f6e5904cf7cf.jpg&,&slug&:&sufaith&,&applyReason&:&0&,&name&:&Python开发微信公众号&,&title&:&Python开发微信公众号&,&url&:&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fsufaith&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:2465,&avatar&:{&id&:&v2-66d7dc371e2de66f93b5f6e5904cf7cf&,&template&:&https:\u002F\u002Fpic1.zhimg.com\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-66d7dc371e2de66f93b5f6e5904cf7cf_l.jpg&,&articlesCount&:21},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-418de1cce366dc4d8fdb05_r.jpg&,&lastUpdated&:,&imagePath&:&v2-418de1cce366dc4d8fdb05.png&,&permission&:&ARTICLE_PUBLIC&,&topics&:[625],&summary&:&由于公司之前的微信公众号项目中icon图标大部分采用iconfont,为保持风格一致,在开发微信小程序时, 也以同样的方式\u003Cb\u003E引入iconfont\u003C\u002Fb\u003E, 结果icon图标无法显示! 引用如下:\u003Cb\u003E原因: \u003C\u002Fb\u003E小程序的wxss文件font-face的url\u003Cb\u003E不接受http地址作为参数\u003C\u002Fb\u003E,可以\u003Cb\u003E接受base64\u003C\u002Fb\u003E,因此可以先将…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T20:18:44+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:2065507,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&微信小程序wxss样式文件中引用iconfont素材&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:20109,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-418de1cce366dc4d8fdb05_r.jpg&,&author&:{&bio&:&web、android、python 从业者&,&isFollowing&:false,&hash&:&08e89ef4f98c2d7b2b97a179b6b2a4f7&,&uid&:592260,&isOrg&:false,&slug&:&sufaith&,&isFollowed&:false,&description&:&终身学习者&,&name&:&sufaith&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fsufaith&,&avatar&:{&id&:&ba1252d3aafdfdbdbe6054e&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:513243}],&title&:&微信小程序wxss样式文件中引用iconfont素材&,&author&:&sufaith&,&content&:&\u003Cp\u003E由于公司之前的微信公众号项目中icon图标大部分采用iconfont,为保持风格一致,在开发微信小程序时, 也以同样的方式\u003Cb\u003E引入iconfont\u003C\u002Fb\u003E, 结果icon图标无法显示! 引用如下:\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887daf796438_b.jpg\& data-rawwidth=\&751\& data-rawheight=\&213\& class=\&origin_image zh-lightbox-thumb\& width=\&751\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887daf796438_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='751'%20height='213'&&\u002Fsvg&\& data-rawwidth=\&751\& data-rawheight=\&213\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&751\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887daf796438_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887daf796438_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E\u003Cb\u003E原因: \u003C\u002Fb\u003E小程序的wxss文件font-face的url\u003Cb\u003E不接受http地址作为参数\u003C\u002Fb\u003E,可以\u003Cb\u003E接受base64\u003C\u002Fb\u003E,因此可以先将字体文件下载后,转换为base64,然后引用。\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E解决方案如下: \u003C\u002Fb\u003E\u003C\u002Fp\u003E\u003Cblockquote\u003E\u003Cb\u003E一.下载阿里巴巴矢量库中自己项目的iconfont字体文件.\u003C\u002Fb\u003E\u003C\u002Fblockquote\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-dde09bee6a5c4a28de4819_b.jpg\& data-rawwidth=\&591\& data-rawheight=\&239\& class=\&origin_image zh-lightbox-thumb\& width=\&591\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-dde09bee6a5c4a28de4819_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='591'%20height='239'&&\u002Fsvg&\& data-rawwidth=\&591\& data-rawheight=\&239\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&591\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-dde09bee6a5c4a28de4819_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-dde09bee6a5c4a28de4819_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-e6cef0a438aeaf5e9e1c8e5_b.jpg\& data-rawwidth=\&682\& data-rawheight=\&322\& class=\&origin_image zh-lightbox-thumb\& width=\&682\& data-original=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-e6cef0a438aeaf5e9e1c8e5_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='682'%20height='322'&&\u002Fsvg&\& data-rawwidth=\&682\& data-rawheight=\&322\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&682\& data-original=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-e6cef0a438aeaf5e9e1c8e5_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-e6cef0a438aeaf5e9e1c8e5_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003Cb\u003E\u003Cblockquote\u003E二. 打开这个网站, \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Ftransfonter.org\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EOnline @font-face generator\u003C\u002Fa\u003E 上传字体,选择base64编码,Convert后下载.\u003C\u002Fblockquote\u003E\u003C\u002Fb\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-bf38a8a3b601a1fa8f67_b.jpg\& data-rawwidth=\&832\& data-rawheight=\&618\& class=\&origin_image zh-lightbox-thumb\& width=\&832\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-bf38a8a3b601a1fa8f67_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='832'%20height='618'&&\u002Fsvg&\& data-rawwidth=\&832\& data-rawheight=\&618\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&832\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-bf38a8a3b601a1fa8f67_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-bf38a8a3b601a1fa8f67_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-05f16e11a639ceac8b6342fda2365bd6_b.jpg\& data-rawwidth=\&755\& data-rawheight=\&346\& class=\&origin_image zh-lightbox-thumb\& width=\&755\& data-original=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-05f16e11a639ceac8b6342fda2365bd6_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='755'%20height='346'&&\u002Fsvg&\& data-rawwidth=\&755\& data-rawheight=\&346\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&755\& data-original=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-05f16e11a639ceac8b6342fda2365bd6_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-05f16e11a639ceac8b6342fda2365bd6_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-830e7cdde5ed1cb0118add8c9b8e1679_b.jpg\& data-rawwidth=\&507\& data-rawheight=\&232\& class=\&origin_image zh-lightbox-thumb\& width=\&507\& data-original=\&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-830e7cdde5ed1cb0118add8c9b8e1679_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='507'%20height='232'&&\u002Fsvg&\& data-rawwidth=\&507\& data-rawheight=\&232\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&507\& data-original=\&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-830e7cdde5ed1cb0118add8c9b8e1679_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-830e7cdde5ed1cb0118add8c9b8e1679_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cblockquote\u003E\u003Cb\u003E三. 将下载好的文件夹中stylesheet.css样式表中的内容拷贝, 粘贴至小程序的wxss文件中,即可引用该iconfont字体图标.\u003C\u002Fb\u003E\u003C\u002Fblockquote\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-6a3f0a13cd5cb5dde299fcbed059f4c2_b.jpg\& data-rawwidth=\&662\& data-rawheight=\&335\& class=\&origin_image zh-lightbox-thumb\& width=\&662\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-6a3f0a13cd5cb5dde299fcbed059f4c2_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='662'%20height='335'&&\u002Fsvg&\& data-rawwidth=\&662\& data-rawheight=\&335\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&662\& data-original=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-6a3f0a13cd5cb5dde299fcbed059f4c2_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-6a3f0a13cd5cb5dde299fcbed059f4c2_b.jpg\&\u003E\u003C\u002Ffigure\u003E\u003Cfigure\u003E\u003Cnoscript\u003E\u003Cimg src=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-6ed51be06eeec6d689785_b.jpg\& data-rawwidth=\&464\& data-rawheight=\&129\& class=\&origin_image zh-lightbox-thumb\& width=\&464\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-6ed51be06eeec6d689785_r.jpg\&\u003E\u003C\u002Fnoscript\u003E\u003Cimg src=\&data:image\u002Fsvg+utf8,&svg%20xmlns='http:\u002F\u002Fwww.w3.org\u002FFsvg'%20width='464'%20height='129'&&\u002Fsvg&\& data-rawwidth=\&464\& data-rawheight=\&129\& class=\&origin_image zh-lightbox-thumb lazy\& width=\&464\& data-original=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-6ed51be06eeec6d689785_r.jpg\& data-actualsrc=\&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-6ed51be06eeec6d689785_b.jpg\&\u003E\u003C\u002Ffigure\u003E&,&updated&:new Date(&T12:18:44.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:10,&collapsedCount&:0,&likeCount&:4,&state&:&published&,&isLiked&:false,&slug&:&&,&lastestTipjarors&:[{&isFollowed&:false,&name&:&燕儿&,&headline&:&既见君子,云胡不喜&,&avatarUrl&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-bbed95a7fe4e41acfcc60_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&xu-song-yan-97&,&bio&:&。&,&hash&:&5eac72faa93a&,&uid&:60,&isOrg&:false,&description&:&既见君子,云胡不喜&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxu-song-yan-97&,&avatar&:{&id&:&v2-bbed95a7fe4e41acfcc60&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&isFollowed&:false,&name&:&触不到你的目光&,&headline&:&吸引力法则&,&avatarUrl&:&https:\u002F\u002Fpic2.zhimg.com\u002F5a584f56d95a953c754a6_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&hong-bu-dao-ni-de-mu-guang&,&bio&:&移动端开发工程师&,&hash&:&b739a6fae763c4c&,&uid&:038000,&isOrg&:false,&description&:&吸引力法则&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fhong-bu-dao-ni-de-mu-guang&,&avatar&:{&id&:&5a584f56d95a953c754a6&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-418de1cce366dc4d8fdb05_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&微信小程序&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&Icon Font&}],&adminClosedComment&:false,&titleImageSize&:{&width&:701,&height&:168},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&column&:{&slug&:&sufaith&,&name&:&Python开发微信公众号&},&tipjarState&:&activated&,&tipjarTagLine&:&真诚赞赏,手留余香&,&sourceUrl&:&&,&pageCommentsCount&:10,&tipjarorCount&:2,&annotationAction&:[],&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T20:18:44+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:&&,&isFollowing&:false,&hash&:&ad68a24f92c95eaa550c9&,&uid&:88,&isOrg&:false,&slug&:&towry&,&isFollowed&:false,&description&:&&,&name&:&木头脑袋不开窍&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Ftowry&,&avatar&:{&id&:&v2-1ab59fc3657&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&80ec329a5bc7cbbf&,&uid&:568600,&isOrg&:false,&slug&:&zhang-bo-xuan-73&,&isFollowed&:false,&description&:&&,&name&:&张博轩&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fzhang-bo-xuan-73&,&avatar&:{&id&:&3fcdec73ab5ffe24d28d902f&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&软件开发&,&isFollowing&:false,&hash&:&1ebc804e8&,&uid&:271800,&isOrg&:false,&slug&:&dev-57-90&,&isFollowed&:false,&description&:&&,&name&:&dev&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fdev-57-90&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&移动端开发工程师&,&isFollowing&:false,&hash&:&b739a6fae763c4c&,&uid&:038000,&isOrg&:false,&slug&:&hong-bu-dao-ni-de-mu-guang&,&isFollowed&:false,&description&:&吸引力法则&,&name&:&触不到你的目光&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fhong-bu-dao-ni-de-mu-guang&,&avatar&:{&id&:&5a584f56d95a953c754a6&,&template&:&https:\u002F\u002Fpic2.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&\u003Cimg src=\&http:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887dafx112.png\& data-rawwidth=\&751\& data-rawheight=\&213\& class=\&origin_image inline-img zh-lightbox-thumb\& data-original=\&http:\u002F\u002Fpic1.zhimg.com\u002Fv2-c203ffbc887daf796438_r.png\&\u003E由于公司之前的微信公众号项目中icon图标大部分采用iconfont,为保持风格一致,在开发微信小程序时, 也以同样的方式\u003Cb\u003E引入iconfont\u003C\u002Fb\u003E, 结果icon图标无法显示! 引用如下:\u003Cb\u003E原因: \u003C\u002Fb\u003E小程序的wxss文件font-face的url\u003Cb\u003E不接受http地址作为参数\u003C\u002Fb\u003E,可以\u003Cb\u003E接受base64\u003C\u002Fb\u003E,因此可以先将…&,&reviewingCommentsCount&:0,&meta&:{&previous&:{&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002F50\u002Fv2-53cfce8d19b1f6c732f87e9e049e0201_xl.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&微信开发&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&微信平台开发&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&Python 框架&}],&adminClosedComment&:false,&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&author&:{&bio&:&web、android、python 从业者&,&isFollowing&:false,&hash&:&08e89ef4f98c2d7b2b97a179b6b2a4f7&,&uid&:592260,&isOrg&:false,&slug&:&sufaith&,&isFollowed&:false,&description&:&终身学习者&,&name&:&sufaith&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fsufaith&,&avatar&:{&id&:&ba1252d3aafdfdbdbe6054e&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&column&:{&slug&:&sufaith&,&name&:&Python开发微信公众号&},&content&:&本教程针对的是已掌握\u003Cb\u003EPython\u003C\u002Fb\u003E语言基本用法并且掌握其任一\u003Cb\u003EWeb\u003C\u002Fb\u003E框架的用户。\u003Cbr\u003E本教程使用的Python版本为\u003Cb\u003E3.5.0\u003C\u002Fb\u003E, Web框架为\u003Cb\u003ETornado\u003C\u002Fb\u003E, IDE开发工具为\u003Cb\u003EPyCharm\u003C\u002Fb\u003E,整个开发过程是在\u003Cb\u003EWindows\u003C\u002Fb\u003E环境下测试开发,最终上线部署至\u003Cb\u003Ecentos\u003C\u002Fb\u003E服务器。\u003Cbr\u003E备注:(1) 如果您是python小白,建议参考 \u003Ca href=\&https:\u002F\u002Fzhuanlan.zhihu.com\u002FPython%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B\& class=\&internal\&\u003EPython入门教程\u003C\u002Fa\u003E\u003Cbr\u003E(2) 对tornado框架还不熟悉的同学,建议参考 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fwww.tornadoweb.cn\u002Fdocumentation\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003ETornado中文文档\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ch2\u003E\u003Cb\u003E本教程整体框架如下:\u003C\u002Fb\u003E\u003C\u002Fh2\u003E1. Python开发环境和项目的初始化搭建;\u003Cbr\u003E2. 微信公众号注册及开发模式校验配置;\u003Cbr\u003E3. 接收关注\u002F取关事件推送和自动回复;\u003Cbr\u003E4. IOLoop定时获取access_token和jsapi_ticket;\u003Cbr\u003E5. 自定义菜单及点击菜单时获取openid;\u003Cbr\u003E6. 菜单中网页的开发, JS-SDK的使用;\u003Cbr\u003E7. 完成测试,发布上线,部署至centos服务器。\u003Cp\u003E思维导图如下:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic2.zhimg.com\u002Fv2-53cfce8d19b1f6c732f87e9e049e0201_b.png\& data-rawwidth=\&1163\& data-rawheight=\&265\& class=\&origin_image zh-lightbox-thumb\& width=\&1163\& data-original=\&http:\u002F\u002Fpic2.zhimg.com\u002Fv2-53cfce8d19b1f6c732f87e9e049e0201_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cp\u003E整体项目结构如下:\u003C\u002Fp\u003E\u003Cp\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic2.zhimg.com\u002Fv2-df583ab5d_b.png\& data-rawwidth=\&475\& data-rawheight=\&708\& class=\&origin_image zh-lightbox-thumb\& width=\&475\& data-original=\&http:\u002F\u002Fpic2.zhimg.com\u002Fv2-df583ab5d_r.png\&\u003E\u003C\u002Ffigure\u003E下面我们正式进入详细的开发流程\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch2\u003E\u003Cb\u003E一. Python开发环境和项目的初始化搭建\u003C\u002Fb\u003E\u003C\u002Fh2\u003E\u003Cp\u003E\u003Cbr\u003E\u003Cb\u003E1. 安装python及pip,并配置环境变量,安装tornado框架\u003C\u002Fb\u003E\u003Cbr\u003EPython及pip安装参考教程\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fwww.cnblogs.com\u002Fyuanzm\u002Fp\u002F4089856.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003Ewindows下面安装Python和pip终极教程\u003C\u002Fa\u003E\u003Cbr\u003E(1) 下载Python包并安装 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fwww.python.org\u002Fdownloads\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E点此下载\u003C\u002Fa\u003E\u003Cbr\u003E(2) 将python配置到系统环境变量\u003Cbr\u003E(3) 下载pip包并安装 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fpypi.python.org\u002Fpypi\u002Fpip%23downloads\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E点此下载\u003C\u002Fa\u003E\u003Cbr\u003E(4) 将pip配置到系统环境变量\u003Cbr\u003E(5) 使用pip安装tornado框架 指令为: \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-text\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003Epip install tornado\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cb\u003E2. 选择一款开发Python的IDE\u003C\u002Fb\u003E\u003Cbr\u003E本教程使用的是\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fwww.baidu.com\u002Flink%3Furl%3DjhcEkUl2vSsJoCBiCmqRy4bQix1E2KNJDXYIAPONLACGydIeMGgnQUaPN29YPPN8\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EPyCharm\u003C\u002Fa\u003E\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fwww.jetbrains.com\u002Fpycharm\u002Fdownload\u002F%23section%3Dwindows\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E点击下载\u003C\u002Fa\u003E\u003Cbr\u003E附带: \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fblog.csdn.net\u002Fu\u002Farticle\u002Fdetails\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EPyCharm 专业版注册码\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cb\u003E3. 选择一个代码托管平台\u003C\u002Fb\u003E\u003Cbr\u003E本教程使用的是开源中国Git@osc代码托管平台 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fgit.oschina.net\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E码云 - 开源中国代码托管平台\u003C\u002Fa\u003E,请自行注册,并配置账户下的SSH密钥,关于Git的使用,请参考教程 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fwww.liaoxuefeng.com\u002Fwiki\u002Fbb000\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EGit教程 - 廖雪峰的官方网站\u003C\u002Fa\u003E\u003Cbr\u003E\u003Cb\u003E4.
创建Web项目\u003C\u002Fb\u003E\u003Cbr\u003E使用Tornado搭建项目入口,端口号为8000,项目搭建至完成微信校验所需的基本代码如下:\u003Cbr\u003E项目整体目录\u003Cbr\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic3.zhimg.com\u002F212faaa3f82b14bd0ca35a42_b.png\& data-rawwidth=\&392\& data-rawheight=\&356\& class=\&content_image\& width=\&392\&\u003E\u003C\u002Ffigure\u003E\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003E为了方便调试,编写了日志管理文件 \u003Ci\u003Elogger_helper.py\u003C\u002Fi\u003E\u003C\u002Fb\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E备注: 为防止日志输出报错, 请各位同学注意修改日志输出目录为自己定义的文件目录\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Elogging\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Elogging\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELogger\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Elogging.handlers\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ETimedRotatingFileHandler\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&sd\&\u003E'''日志管理类'''\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Einit_logger\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogger_name\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogger_name\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Enot\u003C\u002Fspan\u003E \u003Cspan class=\&ow\&\u003Ein\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELogger\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Emanager\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EloggerDict\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EgetLogger\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogger_name\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetLevel\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EINFO\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E# 设置最低级别\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# logger1.setLevel(logging.DEBUG)
# 设置最低级别\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Edf\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'%Y-%m-\u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%d\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E %H:%M:%S'\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eformat_str\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'[\u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%(asctime)s\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E]: \u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%(name)s\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E \u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%(levelname)s\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E \u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%(lineno)s\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E \u003C\u002Fspan\u003E\u003Cspan class=\&si\&\u003E%(message)s\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Eformatter\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EFormatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformat_str\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Edf\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# handler all\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Etry\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ETimedRotatingFileHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u002Fusr\u002Fweb_wx\u002Flog\u002Fall.log'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ewhen\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'D'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Einterval\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EbackupCount\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E7\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eexcept\u003C\u002Fspan\u003E \u003Cspan class=\&ne\&\u003EException\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ETimedRotatingFileHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'F:\\program\\web_wx\\core\\log\\\u002Fall.log'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ewhen\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'D'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Einterval\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EbackupCount\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E7\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetFormatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetLevel\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EDEBUG\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EaddHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ehandler1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# handler error\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Etry\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler2\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ETimedRotatingFileHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u002Fusr\u002Fweb_wx\u002Flog\u002Ferror.log'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ewhen\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'D'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Einterval\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EbackupCount\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E7\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Eexcept\u003C\u002Fspan\u003E \u003Cspan class=\&ne\&\u003EException\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler2\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ETimedRotatingFileHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'F:\\program\\web_wx\\core\\log\\error.log'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ewhen\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'D'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Einterval\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EbackupCount\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E7\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetFormatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehandler2\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetLevel\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EERROR\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EaddHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ehandler2\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&c1\&\u003E# console\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Econsole\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EStreamHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Econsole\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetLevel\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EDEBUG\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# 设置日志打印格式\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Econsole\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EsetFormatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eformatter\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&c1\&\u003E# 将定义好的console日志handler添加到root logger\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EaddHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Econsole\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n
\u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogging\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EgetLogger\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elogger_name\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elogger1\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&n\&\u003Elogger\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Einit_logger\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'runtime-log'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003E__name__\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'__main__'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edebug\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'test-debug'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Einfo\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'test-info'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ewarn\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'test-warn'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogger\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eerror\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'test-error'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003E微信服务端校验的接口文件\u003Ci\u003E wxauthorize.py\u003C\u002Fi\u003E\u003C\u002Fb\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-pytb\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&x\&\u003Efrom core.logger_helper import logger\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Eimport hashlib\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003Eimport tornado.web\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&x\&\u003Eclass WxSignatureHandler(tornado.web.RequestHandler):\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
\&\&\&\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
微信服务器签名验证, 消息回复\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003E
check_signature: 校验signature是否正确\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
\&\&\&\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003E
def data_received(self, chunk):\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
pass\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003E
def get(self):\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
try:\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
signature = self.get_argument('signature')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
timestamp = self.get_argument('timestamp')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
nonce = self.get_argument('nonce')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
echostr = self.get_argument('echostr')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
logger.debug('微信sign校验,signature='+signature+',&timestamp='+timestamp+'&nonce='+nonce+'&echostr='+echostr)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
result = self.check_signature(signature, timestamp, nonce)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
if result:\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
logger.debug('微信sign校验,返回echostr='+echostr)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
self.write(echostr)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
else:\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
logger.error('微信sign校验,---校验失败')\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
except Exception as e:\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
logger.error('微信sign校验,---Exception' + str(e))\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&x\&\u003E
def check_signature(self, signature, timestamp, nonce):\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
\&\&\&校验token是否正确\&\&\&\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
token = 'test12345'\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
L = [timestamp, nonce, token]\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
L.sort()\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
s = L[0] + L[1] + L[2]\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
sha1 = hashlib.sha1(s.encode('utf-8')).hexdigest()\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
logger.debug('sha1=' + sha1 + '&signature=' + signature)\u003C\u002Fspan\u003E\n\u003Cspan class=\&x\&\u003E
return sha1 == signature\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003E配置Tornado的url路由规则 \u003Ci\u003Eurl.py\u003C\u002Fi\u003E\u003C\u002Fb\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Ecore.server.wxauthorize\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EWxSignatureHandler\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Etornado.web\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&sd\&\u003E'''web解析规则'''\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&n\&\u003Eurlpatterns\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&p\&\u003E[\u003C\u002Fspan\u003E\n
\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003Er'\u002Fwxsignature'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EWxSignatureHandler\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E
\u003Cspan class=\&c1\&\u003E# 微信签名\u003C\u002Fspan\u003E\n
\u003Cspan class=\&p\&\u003E]\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003E基本配置文件 \u003Ci\u003Erun.py\u003C\u002Fi\u003E\u003C\u002Fb\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-python\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Eos\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Etornado.httpserver\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Etornado.ioloop\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Etornado.web\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Etornado.options\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Edefine\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eoptions\u003C\u002Fspan\u003E\n\u003Cspan class=\&kn\&\u003Efrom\u003C\u002Fspan\u003E \u003Cspan class=\&nn\&\u003Ecore.url\u003C\u002Fspan\u003E \u003Cspan class=\&kn\&\u003Eimport\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eurlpatterns\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&n\&\u003Edefine\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'port'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Edefault\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003EC\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ehelp\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'run on the given port'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Etype\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&nb\&\u003Eint\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&k\&\u003Eclass\u003C\u002Fspan\u003E \u003Cspan class=\&nc\&\u003EApplication\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Etornado\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eweb\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EApplication\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003E__init__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E):\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Esettings\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&nb\&\u003Edict\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Etemplate_path\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eos\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Epath\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ejoin\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eos\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Epath\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edirname\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__file__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E \u003Cspan class=\&s2\&\u003E\&core\u002Ftemplate\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Estatic_path\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eos\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Epath\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ejoin\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eos\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Epath\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Edirname\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__file__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E \u003Cspan class=\&s2\&\u003E\&core\u002Fstatic\&\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E),\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Edebug\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&bp\&\u003ETrue\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Elogin_url\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'\u002Flogin'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ecookie_secret\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E\u003Cspan class=\&s1\&\u003E'MuG7xxacQdGPR7Svny1OfY6AymHPb0H\u002Ft02+I8rIHHE='\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E\n
\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&nb\&\u003Esuper\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EApplication\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&bp\&\u003Eself\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003E__init__\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eurlpatterns\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E**\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Esettings\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&k\&\u003Edef\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Emain\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E():\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Etornado\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eoptions\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eparse_command_line\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehttp_server\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Etornado\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ehttpserver\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EHTTPServer\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EApplication\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E())\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Ehttp_server\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elisten\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eoptions\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eport\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E)\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Etornado\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eioloop\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EIOLoop\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ecurrent\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Estart\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003E__name__\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&s1\&\u003E'__main__'\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E:\u003C\u002Fspan\u003E\n
\u003Cspan class=\&n\&\u003Emain\u003C\u002Fspan\u003E\u003Cspan class=\&p\&\u003E()\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E\u003Cbr\u003E\u003Cb\u003E(5) 同步项目文件至Git托管平台\u003C\u002Fb\u003E\u003Cbr\u003E项目入口文件及微信校验文件已编写好,使用Git同步代码至托管平台,接下来需要配置端口映射,使外网能访问到我们的本地项目,便于完成微信服务端校验.\u003Cbr\u003E\u003Cbr\u003E\u003Cb\u003E5. 使用花生壳,配置本地测试所需端口映射\u003C\u002Fb\u003E\u003Cbr\u003E微信公众号开发需要配置服务端URL, 验证URL的有效性,这个URL必须以http:\u002F\u002F或https:\u002F\u002F开头,分别支持80端口和443端口,我们目前测试阶段都是在自己电脑上测试(本地测试),为了满足不断修改代码能够即时生效, 因此需要一个外网ip端口映射到本地(内网穿透),我本人使用的是花生壳内网穿透服务,下面是花生壳的使用流程:\u003Cbr\u003E(1) 花生壳的账户注册 \u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002Fhsk.oray.com\u002F\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E花生壳软件-内网也能用!内网动态域名\u003C\u002Fa\u003E,注册成功后,会赠送一个免费域名,这个域名同时也配备了一个公网ip\u003Cbr\u003E(2) 进入到花生壳管理界面, 选择内网穿透菜单,进入到配置界面\u003Cbr\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic3.zhimg.com\u002Ff4e18b04d072b61085ecd_b.png\& data-rawwidth=\&1283\& data-rawheight=\&411\& class=\&origin_image zh-lightbox-thumb\& width=\&1283\& data-original=\&http:\u002F\u002Fpic3.zhimg.com\u002Ff4e18b04d072b61085ecd_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E(3) 选择 右边的\&编辑\&操作,弹出编辑映射面板,在\&内网主机\&一项,填上自己本地电脑的ip地址,端口填写自己将要创建的web应用端口,我本地项目用的端口号为8000,此处填写8000即可\u003Cbr\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic2.zhimg.com\u002Ff1f31abdc59_b.png\& data-rawwidth=\&1256\& data-rawheight=\&582\& class=\&origin_image zh-lightbox-thumb\& width=\&1256\& data-original=\&http:\u002F\u002Fpic2.zhimg.com\u002Ff1f31abdc59_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch2\u003E二. 微信公众号注册及开发模式校验配置\u003C\u002Fh2\u003E\u003Cp\u003E\u003Cbr\u003E\u003Cb\u003E1. 微信公众号注册\u003C\u002Fb\u003E\u003Cbr\u003E官网链接\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fmp.weixin.qq.com\u002F\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttps:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003Emp.weixin.qq.com\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E,依次填写信息进行注册\u003Cbr\u003E\u003Cb\u003E2.微信公众开发模式校验配置\u003C\u002Fb\u003E\u003Cbr\u003E(1)登录微信公众号后, 进入基本配置,如下:\u003Cbr\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic4.zhimg.com\u002Fbbde7a8487_b.png\& data-rawwidth=\&317\& data-rawheight=\&209\& class=\&content_image\& width=\&317\&\u003E\u003C\u002Ffigure\u003E\u003Cfigure\u003E\u003Cimg src=\&http:\u002F\u002Fpic4.zhimg.com\u002F2f0bcd6fddf_b.png\& data-rawwidth=\&973\& data-rawheight=\&806\& class=\&origin_image zh-lightbox-thumb\& width=\&973\& data-original=\&http:\u002F\u002Fpic4.zhimg.com\u002F2f0bcd6fddf_r.png\&\u003E\u003C\u002Ffigure\u003E\u003Cb\u003EURL \u003C\u002Fb\u003E填写为: 花生壳的域名+我们项目中微信校验的接口名:\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=http%3A\u002F\u002FXXXXXXX.imwork.net\u002Fwxsignature\& class=\& external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003E\u003Cspan class=\&invisible\&\u003Ehttp:\u002F\u002F\u003C\u002Fspan\u003E\u003Cspan class=\&visible\&\u003EXXXXXXX.imwork.net\u002Fwxsi\u003C\u002Fspan\u003E\u003Cspan class=\&invisible\&\u003Egnature\u003C\u002Fspan\u003E\u003Cspan class=\&ellipsis\&\u003E\u003C\u002Fspan\u003E\u003C\u002Fa\u003E

我要回帖

更多关于 阿里妈妈矢量图标 的文章

 

随机推荐