zoukankan      html  css  js  c++  java
  • [Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服

    在开发GO小程序或者公众号接口的时候,需要对接微信消息的token签名验证 , 这时候需要开发者验证来自微信 , 并返回指定的字符串

    微信文档里给的是PHP版本的代码 , 下面这个是go版本的代码 , 使用的gin框架

    这个是入口的路由 ,根据自己的代码来写就可以 , 注意发来的是GET请求

    package router
    
    import (
        "github.com/gin-gonic/gin"
        "github.com/taoshihan1991/imaptool/controller"
    )
    
    func InitApiRouter(engine *gin.Engine){
        engine.GET("/micro_program",controller.GetCheckWeixinSign)
    }

    验证代码 , 这里只有一个需要把微信公众号后台填写的token , 自己换上 , 其他都是对方发来的消息

    package controller
    
    import (
        "crypto/sha1"
        "encoding/hex"
        "github.com/gin-gonic/gin"
        "github.com/taoshihan1991/imaptool/config"
        "log"
        "sort"
    )
    
    func GetCheckWeixinSign(c *gin.Context){
        token:="xxxxxxxx"//自己填的token
        signature:=c.Query("signature")
        timestamp:=c.Query("timestamp")
        nonce:=c.Query("nonce")
        echostr:=c.Query("echostr")
        //将token、timestamp、nonce三个参数进行字典序排序
        var tempArray  = []string{token, timestamp, nonce}
        sort.Strings(tempArray)
        //将三个参数字符串拼接成一个字符串进行sha1加密
        var sha1String string = ""
        for _, v := range tempArray {
            sha1String += v
        }
        h := sha1.New()
        h.Write([]byte(sha1String))
        sha1String = hex.EncodeToString(h.Sum([]byte("")))
        //获得加密后的字符串可与signature对比
        if sha1String == signature {
            c.Writer.Write([]byte(echostr))
        } else {
            log.Println("微信API验证失败")
        }
    }

    在公众号后台验证时 , 弹出来绿色的验证成功标识后就可以了

  • 相关阅读:
    Zookeeper
    RPC
    RabbitMQ学习总结
    ActiveMQ学习总结
    mybatis自动映射和手动映射
    oracle instantclient_12_2安装
    EFK(Elasticsearch+Filebeat+Kibana)收集容器日志
    prometheus-operator监控Kubernetes
    编译安装 keepalived-2.0.16.tar.gz
    Kubernetes pod平滑迁移
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13666311.html
Copyright © 2011-2022 走看看