热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang微信公众平台之消息接入

API文档上的内容注册公众平台什么的就不说了,消息接入部分,文档地址:http:mp.weixin.qq.comwikiindex.php?title%E6%B6%88%E6%81%

API文档上的内容

注册公众平台什么的就不说了,消息接入部分,文档地址:

http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97#.E7.94.B3.E8.AF.B7.E6.B6.88.E6.81.AF.E6.8E.A5.E5.8F.A3

简言之就是,提交申请,微信服务器将发送GET请求到你所填写的URL上,这个GET请求附带四个参数:

参数 描述
signature 微信加密签名
timestamp 时间戳
nonce 随机数
echostr 随机字符串

过程很简单,校验数据,确认请求来自微信服务器,则原样返回echostr参数内容,接入生效。

校验流程:

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

GO搭建一个web服务器

https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/03.2.md上的内容,代码直接拿过来用了:

package main

import (
"fmt"
"net/http"
"log"
)

func sayhelloName(w http.ResponseWriter, r
*http.Request) {
fmt.Fprintf(w,
"Hello!")
}

func main() {
http.HandleFunc(
"/", sayhelloName) //设置访问的路由
err := http.ListenAndServe(":80", nil) //设置监听的端口
if err != nil {
log.Fatal(
"ListenAndServe: ", err)
}
}

当然我这里删掉了不少东西,只留下最简单的框架,端口也改成了80,因为文档里要求80端口。

这样一个简单的服务器,跑起来,浏览器中输入http://localhost,会输出Hello!

这个框架保持不变,我们所需要修改的部分就是sayhelloName,不过根据用途改个名字好些,checkSignature吧。

实现checkSignature

接下来的事就水到渠成了,跟着校验流程实现checkSignature

第一步:必然,先把GET请求附带的数据取出来

r.ParseForm()
var token string="你的token"
var signature string=strings.Join(r.Form["signature"],"")
var timestamp string=strings.Join(r.Form["timestamp"],"")
var nonce string=strings.Join(r.Form["nonce"],"")
var echostr string=strings.Join(r.Form["echostr"],"")

第二步:字典排序

tmps:=[]string{token,timestamp,nonce}
sort.Strings(tmps)

第三步:sha1加密

func str2sha1(data string)string{
t:sha1.New()
io.WriteString(t,data)
return fmt.Sprintf("%x",t.Sum(nil))
}

第四步:对比signature

完整的代码如下:

func checkSignature(w http.ResponseWriter,r *http.Request){
r.ParseForm()
var token string="你的token"
var signature string=strings.Join(r.Form["signature"],"")
var timestamp string=strings.Join(r.Form["timestamp"],"")
var nonce string=strings.Join(r.Form["nonce"],"")
var echostr string=strings.Join(r.Form["echostr"],"")
tmps:
=[]string{token,timestamp,nonce}
sort.Strings(tmps)
tmpStr:
=tmps[0]+tmps[1]+tmps[2]
tmp:
=str2sha1(tmpStr)
if tmp==signature{
fmt.Fprintf(w,echostr)
}
}

推荐阅读
  • C# 微信公众平台开发(1)
    题记:最近公司需要开发微信服务号,由本人负责,以前虽然听过微信开发,但并没有认真的去了解,项目开发中,也边看文档边开发,记录自己的项目开发经验;1、注册帐号--填写服务器配置在https:mp.w ... [详细]
  • 微信公众平台消息接口PHP版
    使用前提条件:拥有一个公网上的HTTP服务器主机空间,具有创建目录、上传文件等权限。推荐新浪的SAE。http:sae.sina.com.cn首先请注册微信公众平台的账号,注册地址:http ... [详细]
  • 微信公众平台开发获取关注者列表
    微信小程序|微信开发微信公众平台微信小程序-微信开发本文介绍在微信公众平台上如何使用高级接口开发获取关注者列表的功能。防丢器源码,vscode快速生成,vm虚拟机能装ubuntu, ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 微信公众平台里怎么实现微信拼团功能
    这篇文章将为大家详细讲解有关微信公众平台里怎么实现微信拼团功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以 ... [详细]
  • 用firebug给firefox添加信任链接
      在前文“firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?”我们使用了导入证书的方法添加信任链接,有网友反映说证书导入不成功,这里用另外一种方法来实现:用firebug给firef ... [详细]
  • 建立服务器与微信公众平台的链接,首先要有一个默认首页提供程序的链接支持,该方法主要是获取微信提供过来的4个参数,供比较是否可链接使用。 其次,要有一个服务器地址与一个token(为英文或 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • 事件推送应该是微信公众平台里面比较难处理的一个功能,事件比较多而且很分散,不知道啥时候有事件过来。在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者的 ... [详细]
  • 1.装置并引入JS-SDK依靠包这里是JS-SDK申明文档1.1npm下载依靠包npminstallweixin-js-sdk--save1.2.在须要用到jssdk的模块引入im ... [详细]
  • 因项目需要,在开发微信服务号过程中需要用到银联支付,本人在PC端浏览器以及手机浏览器(QQ浏览器)测试均能正常跳转,过程中会出现证书安全性的提示。是不是因为微信无法弹出证书安全性提示所以不能跳转,有没 ... [详细]
author-avatar
谭小牙笑不漏齿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有