在学习go语言的过程中,go语法确实有点怪怪的,然后看着一些简单学习代码,也学不下,没办法找点项目来搞搞,今天刚开的微信公众号,顺便也开了一下小程序,然后曾这今年25岁,赶紧又开了一把腾讯的学生服务器,需要的都准备好,接下来我们就开始实现微信公众号开发实战。

1.1 公众号设置

注册大家都知道在搜索微信公众号就可以了,开通一个订阅号,剩下的就按要求填写即可。

我们需要成为开发者,所以管理页面,往下拉,就可以看到开发:

之后又一个权限允许,允许了之后就可以看到权限列表,我们现在可以先浏览一下,不过基本的获取消息还是有权限的。

1.2 第一个服务器程序

开启了权限之后,我们要进行配置服务器,微信公众号的流程是这样的:

就是这么简单,微信公众平台就是使用http跟我们自己的服务器通信的,所以我们先写一个测试我们服务器的程序。

我们就用go语言来实现,也刚好正在学习go,之前用c/c++实现,真的是太难了,要不就直接用nginx,要不就自己手撕,手撕太累,所以要开发速度还是要用go。

go封装的太厉害,我们相用http的时候,算了,直接看程序把,在程序中注释

package mainimport ("fmt""net/http"
)//http.ResponseWriter : 回复http的对应
//http.Request : http请求的对象
func sayHello(w http.ResponseWriter, r *http.Request) {fmt.Println("http url ", r)            //打印http的请求url_, _ = w.Write([]byte("hello world") )     //这个就是往网页端输出的值
}func main() {fmt.Println("服务器程序")http.HandleFunc("/", sayHello)        // 匹配url的/就会调用sayHellohttp.HandleFunc("/wx", sayHello)    // 匹配url的/wx就会调用sayHelloerr := http.ListenAndServe(":80", nil)   //这个就是绑定服务器的80端口if err != nil {fmt.Println("ListenAndServer  error", err)}}

功能比较简单,我们就来试试看看结果:
注意:绑定80端口需要管理员权限,我就试了很多次,发现竟然失败,那时候还没把错误打印出现,还以为端口占用了,一直查都没有被占用,无奈只能加错误打印,才看到权限不够


使用go run运行

我们看看结果:

这样就能访问到服务器了。

1.3 获取token

服务器测试完成之后,我们接下来进行配置服务器,让微信公众平台,跟服务器之间的通道建立起来。

打开基本配置信息,看到服务器配置,我这里还是没配置的,所以我也是第一次配置,比较喜欢一边写一边做笔记,这样写完了笔记也自然做完了,就跟写文档一样。

接下来点击修改配置,填写内容:

可以点击提交,但是会收到token验证失败,这时候肯定会失败,因为微信公众平台会发一个验证给我们的服务器,我们服务器需要也按照对应的逻辑给公众号平台回复,所以需要看一下公众号开发文档,看看这是什么协议:
1开启公众号开发者模式

微信官方给出的逻辑图,我们下面分步骤做:

  1. 尝试获取4个字段
  2. 赋值一个token
  3. token,timestamp,nonce按字典排序的字符串list
  4. 哈希算法加密list得到hashcode
  5. 判断hashcode是否等于signature
  6. 如果等于就返回echostr

如果不知道微信公众平台发过来的是什么参数,可以使用万能的打印方式,就可以看到微信公众平台发了啥:

这下子是不是就明白了,我们就把这4个字段提取回来,就可以完成第一步了。

接下来代码就是按7个步骤实现:

package mainimport ("fmt""net/http""sort""crypto/sha1"
)const (token = "xxxxx"    //跟微信公众平台的token一样即可
)//http.ResponseWriter : 回复http的对应
//http.Request : http请求的对象
func sayHello(w http.ResponseWriter, r *http.Request) {fmt.Println("http url ", r)            //打印http的请求urldefer r.Body.Close()//1.尝试获取4个字段nonce := r.URL.Query().Get("nonce")timestamp := r.URL.Query().Get("timestamp")signature := r.URL.Query().Get("signature")echostr := r.URL.Query().Get("echostr")// if nonce != nil && timestamp != nil && signature != nil && echostr != nil {//  fmt.Printf("字段提取成功")// } else {//     return// }//2. 赋值一个token//3.token,timestamp,nonce按字典排序的字符串liststrs := sort.StringSlice{token, timestamp, nonce} // 使用本地的token生成校验sort.Strings(strs)str := ""for _, s := range strs {str += s}// 4. 哈希算法加密list得到hashcodeh := sha1.New()h.Write([]byte(str))hashcode := fmt.Sprintf("%x", h.Sum(nil)) // h.Sum(nil) 做hash  79efadd80a344c0b73b3bd2c403184f7425a5a67//5. 判断hashcode是否等于signaturefmt.Println("url once my_signature signature", nonce, hashcode, signature)if hashcode != signature {return }// 6. 如果等于就返回echostr_, _ = w.Write([]byte(echostr) )      //这个就是往网页端输出的值
}func main() {fmt.Println("服务器程序")http.HandleFunc("/", sayHello)        // 匹配url的/就会调用sayHellohttp.HandleFunc("/wx", sayHello)    // 匹配url的/wx就会调用sayHelloerr := http.ListenAndServe(":80", nil)   //这个就是绑定服务器的80端口if err != nil {fmt.Println("ListenAndServer  error", err)}}

是不是很简单,服务器后台运行了这个程序之后,我们就可以在微信公众平台点提交了,这样就可以看到提交成功。

成功的样子是这样的:

好像打码了也看不到,提交成功自己的可以看到了,不着急。

go项目实战 <微信公众号后台开发>(一、获取token)相关推荐

  1. Yii2.0实现微信公众号后台开发

    2019独角兽企业重金招聘Python工程师标准>>> 研读 微信公众平台开发者文档 ,然后再阅读本文,效果更佳! 接入微信 Yii2后台配置 1.在app/config/param ...

  2. python 公众号菜单_Python微信公众号后台开发003:自定义菜单

    有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...

  3. Python微信公众号后台开发003:自定义菜单

    有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...

  4. python公众号教学_Python微信公众号后台开发教程

    本篇文章开启Python开发微信公众号后台 准备: 云服务平台:(我用的是京东云的) 公众号:自己注册一个就行 Git:代码管理平台 了解平台 进入公众号后台,查看开发相关项 基本配置(服务器配置等) ...

  5. JAVA微信公众号后台开发 接口接入

    前期准备 注册一个公众号,完成认证,阅读开发手册,选取开发工具,配置环境等等. 微信公众号开发标准 通过阅读文档我们了解到微信服务器向开发者提供接口,具体的流程如下 由上图可以看出,开发者需要做的:接 ...

  6. [基于Python的微信公众号后台开发:2]文字消息的接收与解密

    文章目录 1.服务器安装pycryptodome 2.下载微信官方提供的解密SDK 3.上传SDK到服务器 4.开始测试 5.发送消息到公众号 6.测试解密:把所有参数套入官方给的Sample.py文 ...

  7. python微信集成_Python微信公众号后台开发005:集成智能聊天机器人​

    ​给公众号集成一个智能聊天机器人 一.前述 ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei). 二.具 ...

  8. 微信公众号或者小程序获取token

    errcode":40164,"errmsg":"invalid ip 118.178.180.95 ipv6 ::ffff:118.178.180.95, n ...

  9. Python多线程与多进程微信公众号后台开发

    目录 前言 一.线程与进程 1.什么是线程 2.什么是进程 3.进程与线程的关系 4.总结 5.CPU密集型与IO密集型 二.Python的多线程和多进程 1.GIL(Global Interpret ...

  10. 微信公众号后台服务开发(一):自动消息回复

    微信公众号后台服务开发 简述 微信平台提供的自动回复机制 后台服务开发 配置指定服务器 消息自动回复功能开发 简述 使用Java SpringBoot框架搭建微信工作号后台实现自定义逻辑自动回复 先注 ...

最新文章

  1. 新书上市 | 《复分析:可视化方法》
  2. 汇编中的通用寄存器、标志寄存器、段寄存器
  3. Android中通过SeekBar手动控制ProgressBar与模拟下载自动更新进度条
  4. sourcetree,创建工作流报错:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解决办法...
  5. 关于seata分布式事务框架的几个问题
  6. 思想一碰就冒火: 开源贡献须耐心, 选择框架要谨慎
  7. Bash学习系列---第2/3部分
  8. 学习笔记-数据结构与算法之栈与队列
  9. pythoncharm设置翻译器_pyCharm 设置调试输出窗口中文显示方式(字符码转换)
  10. java将录音转换成文字,除了把录音转换成文字,原来录音转文字助手还有这么多实用功能...
  11. 2020计算机组成原理性考答案,中国文化通论、计算机组成原理试题
  12. linux kernel 摄像头驱动
  13. 字符串类型变量的相关内置函数详解
  14. 唯品会web前端实习生一面二面经
  15. 如何使用idea生成Doc文档
  16. 顶刊TIP 2022!阿里提出:从分布视角出发理解和提升对抗样本的迁移性
  17. 统计指标 --- 集中趋势
  18. 算法设计与分析第一章作业
  19. Linux服务器CPU使用率过高
  20. MySQL报错no connection established

热门文章

  1. 浏览器下载2014正式版官方免费下载
  2. python 下载安装 教程
  3. NLP笔记之文本聚类
  4. MATLAB矩阵及其运算
  5. python中的字体英文名,CSS 中文字体的英文名称
  6. Windows Phone 地图定位 及导出GPX文件
  7. 【“玩物立志”-scratch少儿编程】迷宫游戏-图片素材
  8. 《英雄联盟》捞月狗数据初探
  9. 【新农合专题】新农合系统资料汇总贴(新增134个)
  10. Camtasia2022电脑屏幕录像使用录屏教程