微信公众号接入服务器验证(Go实现)

1 基本流程

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

2 请求参数

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

3 注册页面填写

  1. URL填写:http://IP地址:监听端口
  2. Token填写自行设定的值

4 代码说明

  • 监听于3456端口
  • Token为iwuqing

5 代码

package main

import (
    "crypto/sha1"
    "encoding/hex"
    "fmt"
    "net/http"
    "sort"
)

func main()  {
    // 绑定路由
    http.HandleFunc("/", checkout)
    // 启动监听=j
    err := http.ListenAndServe(":3456", nil)
    if err != nil {
     fmt.Println("服务器启动失败!")
    }
}
func checkout(response http.ResponseWriter, request *http.Request)  {
    //解析URL参数
    err := request.ParseForm()
    if err != nil {
        fmt.Println("URL解析失败!")
        return
    }
    // token
    var token string = "iwuqing"
    // 获取参数
    signature := request.FormValue("signature")
    timestamp := request.FormValue("timestamp")
    nonce := request.FormValue("nonce")
    echostr := request.FormValue("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 {
        _, err := response.Write([]byte(echostr))
        if err != nil {
            fmt.Println("响应失败。。。")
        }
    } else {
        fmt.Println("验证失败")
    }
}

GitHub地址

https://github.com/iwuqing/WeChat-with-Go

原文地址:https://www.cnblogs.com/iwuqing/p/10296391.html

时间: 2024-10-08 16:19:52

微信公众号接入服务器验证(Go实现)的相关文章

Thinkphp5 微信公众号token验证不成功的原因

最近要启动微信项目,上个月就开始了解微信的开发,这个月要启动项目,配置微信公众号信息一直失败.为此,我甚至手工写了微信提交过来的记录,如: &timestamp=1510210523&nonce=2414550015&signature=30b9eeb6b1134d0a53623375c48ca734c41facb5&echostr=6863786913073725439 我眼睛看着验证信息没错,输出的echostr跟get提交来的一模一样,但是还是会出错.忍无可忍,一直无

自己的服务器通过微信公众号Token验证测试的代码(Python版)

我在阿里云租了一个云服务器,然后想把这个作为我的微信公众号的后台,启用微信公众号开发者需要正确的响应微信服务器的Token验证,为此把这个验证的Python代码贴出来,只要在服务器上运行这段代码,注意把Token的值改成你自己的值,然后在微信后台填对你的服务器的公网IP,提交就可以通过验证了 #coding=utf-8 html = '''True ''' import socket import signal import errno import re import os import ha

微信公众号服务器验证Token的完整步骤

服务器验证Token验证分为以下及步骤 一,在微信公众号平台上设置 1.1打开微信公众号平台 1.2打开”开发“中的<基本配置> 1.3点击基本配置页面里的修改配置 1.4输入URL: url填写:http://外网IP:端口号/wx .外网IP请到腾讯云购买成功处查询, http的端口号固定使用80,不可填写其他. Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事.这个token只用于验证开发者服务器.(注:Token可以随便写  写完记住留着

asp.net mvc 微信公众号token验证

本人的公众号要申请成为开发者,必须经过token认证.微信公众号的官方代码只列出了PHP代码的实例,明显是歧视.net用户.我用的asp.net mvc中的web api,结果调了好久都没有成功,最后发现只要下面几句即可: public void Get() { string temp = HttpContext.Current.Request.QueryString["echostr"]; HttpContext.Current.Response.Write(temp); HttpC

django搭建微信公众号后台——验证(7.19)

php研究了好几个框架,感觉还是django强大,用起来也顺手,虽然django在微信后台这方面用得没有那么普及,但还是打算试一试,拿我自己的公众号试手. 今天主要是创建项目然后验证通过,代码还是放在pythonanywhere上. 具体怎么创建就不写了,之前有过一篇文章,这里开发用了星星的wechat-python-sdk. 在微信后台填了网址之后,在urls.py设置路由 url(r'^$', index, name='index'), 在views.py里进行验证: #-*- coding

php:微信公众号token验证失败原因、验证码显示不出来的问题

ob_clean(); 问题描述: 用微信官方提供的demo验证token是成功的,但是放到自己网站的框架上进行token验证老是提示"token验证失败",经过检查(用生成日志的方式一步步检查的),地址,token信息,微信....等待账号信息是没有任何问题的. 解决方案: 最终在echo $_GET['echostr'];前添加了一句代码ob_clean();把问题搞定. 问题分析: 因为用的是框架,在echo $_GET['echostr'];之前可能有一些你不知道的输出到&qu

微信公众号token 验证

1. 首先给出测试项目的整体目录: 2. CoreServlet类: 当get请求的时候会执行get方法,post请求的时候会执行post方法,分别来处理不同的请求 package com.zjn.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import j

微信公众号服务器验证的坑

微信服务器给我们的服务器发送类似如下url: signature=158518cb0a9ef397f2cbbb9e26b497c4b5fec8e5&echostr=5838479218127813673&timestamp=1413975482&nonce=1359376876 一定要注意:我们返回给微信服务器的echostr是数字,不是字符串,即 5838479218127813673是一串数字 原文地址:https://www.cnblogs.com/wt11/p/859814

微信公众号接入

1.如何申请一个微信测试公众号 点击进入微信公众帐号测试号申请系统用微信扫码登录,就申请到一个微信测试公众号了,就是这么简单. 记录一下appID和appsecret,微信开发的时候会用到,本人的是: appID:wx4cff8e15a7a0801dappsecret:4d7cb4b8b54412d9ef0c6a7c011cd570 2.进行微信公众号验证 <?php define("APPID","wx4cff8e15a7a0801d");//填写自己的AP