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验证失败")
        }
    }

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

  • 相关阅读:
    查找和排序-6.快速排序
    查找和排序-5.插入排序
    PAT (Basic Level) Practice (中文)1093、1094
    srand((unsigned)time(NULL))详解
    fscanf()库函数
    C++ fopen函数用法
    简单计数排序
    数据结构:堆排序
    数据结构:归并排序
    团体程序设计天梯赛-练习集(八)(DFS,7-37 整数分解为若干项之和、7-22 龟兔赛跑)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/13666311.html
Copyright © 2011-2022 走看看