本文我将分享给大家关于微信小游戏推送的一些接入开发经验,首先微信小游戏的消息推送是他们开放平台推出的 一种主动推送服务,基于该推送服务,开发者及时获取开放平台相关信息,无需调用API。 这里我给大家分享下开发者服务器接收消息推送的经验。
1. 如何接入接入消息推送功能(go语言代码实现)
2. 使用安全模式接受微信消息推送并返回消息(go语言代码实现)
这里我就以小游戏礼包的这种推送方式来举例,其他的消息推送大同小异,你只需要修改包体的格式即可。 有任何疑问都可以在文章下方留言交流。
小游戏礼包
功能介绍
小游戏开发者的游戏内道具,可通过接入平台「礼包系统」,在微信平台各场景发放游戏礼包。 发放场景包括:游戏圈、活动运营工具、发现-游戏-福利中心、广告、搜索等
道具礼包发货基于微信小游戏统一的消息推送能力,因此在使用礼包中心的发货回调时,需要开发者服务器处理好消息推送的协议。 注意:MP配置消息回调地址只有1个,所有消息推送场景都会使用该通道,所以需要先根据MsgType与Event来判断消息类型,进行相应的处理。
下面是发送和返回的格式:
更多详情可以查看文档: 小游戏礼包 | 微信开放文档
开发者服务器接收消息推送
接下来我们着重讲下小游戏安全模式下的数据链路:
消息推送服务器配置
消息推送服务于小程序、公众号、小游戏、视频号小店、第三方平台,这里介绍小程序平台的配置
填写相关信息
登陆小程序管理后台,在「开发」-「开发管理」-「消息推送配置」中,需填写以下信息:
- URL服务器地址:开发者用来接收微信消息和事件的接口 URL,必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口。
- Token令牌:用于签名处理,下文会介绍相关流程。
- EncodingAESKey:将用作消息体加解密密钥。
- 消息加解密方式:
- 明文模式:不使用消息加解密,明文发送,安全系数较低,不建议使用。
- 兼容模式:明文、密文共存,不建议使用。
- 安全模式:使用消息加解密,纯密文,安全系数高,强烈推荐使用。
- 数据格式:消息体的格式,可选XML或JSON。
发起验证的工具大家可以使用 微信调试工具
验证逻辑go代码实现
其中,signature签名的生成方式是:
- 将Token、timestamp、nonce三个参数进行字典序排序。
- 将三个参数字符串拼接成一个字符串进行sha1计算签名,即可获得signature。 开发者需要校验signature是否正确,以判断请求是否来自微信服务器,验签通过后,请原样返回echostr字符串。
验证接口的核心逻辑如下:
func (c *ThirdPartyServiceController) WechatVerify() {keys := make([]string, 0)keys = append(keys, c.GetString("timestamp"))keys = append(keys, c.GetString("nonce"))keys = append(keys, beego.AppConfig.String("miniwechat_token")) //配置文件提前配置好小游戏的token,从小游戏后台可以获取sort.Strings(keys)signstr := keys[0] + keys[1] + keys[2]mysign := Sha1Signature(signstr)sign := c.GetString("signature") if sign == mysign {c.Ctx.WriteString(c.GetString("echostr"))return}c.Ctx.WriteString(c.GetString("echostr"))
}
签名函数实现如下:
func Sha1Signature(text string) string {hash := sha1.New()hash.Write([]byte(text))return fmt.Sprintf("%x", hash.Sum(nil))
}