微信 jssdk 服务端认证代码

37 min read
package main

import (
	"encoding/json"
	"github.com/SmallForest/sfwechat/jssdk"
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.Use(Cors())
	r.GET("/jssdk", func(c *gin.Context) {
		url := c.DefaultQuery("url", "url")
		jssdk := jssdk.New("xxx", "xxx", url)
		config := jssdk.GetWechatConfig()

		var configJSON map[string]interface{}
		err := json.Unmarshal([]byte(config), &configJSON)
		if err != nil {
			c.JSON(500, gin.H{
				"status":  500,
				"message": "Error parsing JSON",
			})
			return
		}

		c.JSON(200, gin.H{
			"status":  200,
			"message": "ok",
			"data":    configJSON,
		})
	})

	r.Run(":52446")
}

// Cors 开启跨域函数
func Cors() gin.HandlerFunc {
	return func(c *gin.Context) {
		c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
		c.Writer.Header().Set("Access-Control-Expose-Headers", "Access-Control-Allow-Origin")
		c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")

		if c.Request.Method == "OPTIONS" {
			c.AbortWithStatus(204)
			return
		}

		defer func() {
			if err := recover(); err != nil {

			}
		}()

		c.Next()
	}
}

同时创建目录jssdk下的 ticket.txt 和 token.txt文件

这段代码是用于生成微信 JS-SDK 配置的,其中涉及到两个关键概念:tokenticket

  1. token(访问令牌):token 是一个用于调用微信 API 的访问令牌。在这段代码中,token 用于从微信服务器获取一个名为 ticket 的特殊字符串。token 有一定的有效期,通常为7200秒(2小时)。当 token 过期时,需要重新获取新的 token。在代码中,token 会被存储在一个名为 token.txt 的文件中,以便在未过期时可以重复使用。

  2. ticket(临时票据):ticket 是一个用于生成 JS-SDK 配置的临时票据。它用于生成签名(signature),从而验证客户端页面对微信 JS-SDK 的合法使用。ticket 也具有有效期,通常为7200秒(2小时)。当 ticket 过期时,需要使用新的 token 来获取新的 ticket。在代码中,ticket 会被存储在一个名为 ticket.txt 的文件中,以便在未过期时可以重复使用。

在这段代码中,tokenticket 的作用如下:

  • token 的主要作用是访问微信 API,用于获取 ticket。在这个过程中,token 会被用于访问微信服务器上的一个特定的 URL,该 URL 返回一个包含 ticket 的响应。
  • ticket 的主要作用是生成微信 JS-SDK 的配置,包括签名(signature)。使用 ticket、随机字符串(nonceStr)、时间戳(timestamp)和当前页面的 URL,代码会生成一个签名,这个签名用于验证页面对微信 JS-SDK 的合法使用。

总之,tokenticket 是用于生成微信 JS-SDK 配置的关键组成部分。token 用于访问微信 API 并获取 ticket,而 ticket 用于生成 JS-SDK 配置,确保客户端对微信 JS-SDK 的合法使用。