微信公众号开发教程详细完整第1篇

摘要:
从2014年12月到2014年12月份,我接触了微信公众号的开发,一年多来我一直在做很多公众号。各种奇妙的功能都被发掘出来了。本教程一开始可能是非常基础的。开发过一两次微信公众号的同学可以在后续教程中留下你想让我做什么功能,我会尽快更新。如果你想访问微信的公众号平台,你首先应该成为一名开发者。您可以在下一个微信公众号预览中直接前往百度了解具体流程|消息处理。

| 版权声明:本文为博主原创文章,未经博主允许不得转载。

从2014.12月份左右接触微信公众号开发,短短续续也有了一年多在这期间做了不知道多少个公众号,各种奇葩的功能都有涉猎。从一无所知的小白,到对整个微信公众号生态的理解,不知道经历了多少个日日夜夜,鬼知道我经历了什么。此次教程不谈什么微信公众号O2O(基本死光了)也不谈什么分答,大字(基本被微信封的差不多了),这次我们只是对微信公众号的二次开发者们,希望对你们有所帮助,也希望有更多的朋友一起探讨,讨论。

下面说一下这个教程的前言:首先此次教程非常详细基本上包含了微信公众号平台大部分的功能。编程语言上面我选择了golang,至于为什么?因为之前基本上用java和python都写过了再写一次感觉烦的要死。正好最近一年大部分时间都在用go语言编程。所以选择了go。针对go我选择了一个开源的框架gin。(https://github.com/gin-gonic/gin) 也许有人看到这就放弃了。但是相信我语言并不是编程最重要的,只要你理解了原理,语言永远只是工具。这个教程很可能初期会很基础,有做过一两次微信公众号开发的同学可以在其后的教程中留下你们希望我来做什么功能,我会尽快更新。下面进入正题。

接入微信公众号平台(开发者模式)

如果想接入微信的公众号,首先要成为开发者,具体的流程大家直接百度就可以了。成为开发者后在微信公众号的后台(https://mp.weixin.qq.com)

  开发->基本配置->服务器配置

微信公众号开发教程详细完整第1篇第1张

注意:启用并设置服务器配置后,用户发给公众号的消息以及开发者需要的事件推送,将被微信转发到该URL中

  URL:这个是你服务的访问地址必须是域名一级二级无所谓但是注意端口

  Token:这个是用来验证消息来源是微信的参数 要和你服务中的token一致

  EncodingAESKey: 点击随机生成即可

  消息加解密方式:为了方便我们先选择明文

这是点击提交按钮后,微信服务器将发送GET请求到填写的服务器地址URL上并携带signature、timestamp、nonce、echostr四个参数。这是我们就需要在自己的服务中验证URL的有效性。下面我展示部分DEMO 虽然都是go语言的但是我尽量加上备注。

首先是路由,我才用的是gin当中的分组路由模式:

	//微信服务器连接
	weChatCoreGroupR := e.Group("/weChatCore")
	{
		weChatCoreGroupR.GET("", handler.GetWeChatCore)
		weChatCoreGroupR.POST("", handler.PostWeChatCore)
	}

其中的GetWeChatCore就是接受服务器发送请求的函数。

func GetWeChatCore(c *gin.Context) {
	//接受微信传过来的参数
	signature := c.Query("signature")
	timestamp := c.Query("timestamp")
	nonce := c.Query("nonce")
	echostr := c.Query("echostr")
	//获取所有微信公众号信息
	results, err := store.GetAdapterWechatAccounts(c)
	if err != nil {
		//错误返回
		AbortWithError(c, 400, errors.ErrorCode["NOT_EXIST"],
			errors.ErrorMessage["NOT_EXIST"])
	}
	//验证微信连接
	for _, v := range *results {
		if wechatUtil.SignAccount(v.Token, timestamp, nonce, signature, echostr) {
			c.String(200, echostr)
			break
		}
	}
}

这段代码中的获取所有微信公众号信息下的函数results, err := store.GetAdapterWechatAccounts(c) 其实就是从数据库中查询你的微信公众账号信息。这里我是因为有多个账号信息所以需要没别比对。SignAccount这个函数就是验证的过程:

//验证微信来源
func SignAccount(token, timestamp, nonce, signature, echostr string) bool {
	s := []string{token, timestamp, nonce}
	sort.Sort(sort.StringSlice(s))//将token、timestamp、nonce三个参数进行字典序排序
	s0 := strings.Join(s, "")//将三个参数字符串拼接成一个字符串
	t := sha1.New()//sha1加密
	io.WriteString(t, s0)
	s1 := fmt.Sprintf("%x", t.Sum(nil))
	if signature == s1 {//与signature对比
		return true
	}
	return false
}

这样就大功告成了,但有一点要注意的就是:

  若确认此次GET请求来自微信服务器,请原样返回echostr参数内容

这里说的返回事返回一个string类型的echostr  不是json 注意!

恭喜你到这里基本就完成了和微信服务器的对接工作。下面我说一些需要注意的点:

1.当你的服务跑起来了,然后你高高兴兴的跑去微信后台去编辑你的服务器配置,出现各种失败的情况。别着急!

2.检查token是否一样 URL是否正确 token一定要和你本地的token是一样的。

3.多提交几遍,也许就好了。微信公众号的坑多着呢。。。

| 下期预告

  微信公众号中消息的处理。

免责声明:文章转载自《微信公众号开发教程详细完整第1篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle10.2.0.2+SDE for oracle 10安装ubuntu一些基本软件安装方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信内 H5 页面自定义分享

起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等)。问题是点击微信的原生分享时,会把携带的这些参数一起分享出去,等于把用户信息泄露了。所以为了解决这个问题,只能实现自定义微信分享的功能,可以自定义分享的地址、标题、图标还有简介。 事先需要做的: 1.微信公众号:必须是经过...

C# 时间戳(TimeStamp)与时间(DateTime)的互相转换

  什么是时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。   时间戳在线转换网址:https://tool.lu/timestamp,时间戳的转换网址有很多,经常用的还有站长工具。 下附代码,在控制台中粘贴在启动类即可使用,需引用(using System)命名空...

MongoDB中的_id和ObjectId

ObjectId是"_id"的默认类型。它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它。 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时。MongoDB从一开始就设计用来作为分布式数据库,处理多个节 点是一个核心要求。后面会讲到O...

一行js代码实现时间戳转时间格式

前端开发过程中,常常需要将时间戳转化为标准时间格式供用户浏览。不借助方法库的情况下,如何又快又好的实现呢?下面介绍两种方法。 老方法 平常用的基本是这个方法,用Date方法依次将年月日时分秒一个个算出来,然后拼接成需要的时间格式字符串。 function transformTime(timestamp = +new Date()) { if (ti...

微信开发-ACCESS TOKEN 过期失效解决方案

微信开发-ACCESS TOKEN 过期失效解决方案 起因:因为access_token的重要性,开发过微信的都知道,但是他有自己的生命周期,官方解释为:"有效期为7200秒",一天调用2000次。流量一高,就over了,没办法,龙哥不帮我们解决问题,我们就要自己解决,不能等死。 解决思路很简单:建立公共access token数据,有效期内不重新创建ac...

微信小程序开发实战-天气小程序

园龄6年8个月了,还一篇文章都没写过,惭愧! 最近周末做了个天气预报小程序,在这里整理一下开发过程和注意点,给对小程序开发感兴趣的伙伴们提供点参考。 废话不多说,先上图最终效果: 下面进入正文: 第一步  准备 0. 把微信小程序开发文档过一遍。https://developers.weixin.qq.com/miniprogram/dev/framew...