微信小程序 登录获取 openid 和 session_key Go服务

微信小程序 登录获取 openid 和 session_key

背景

最近在开发一款旅游相关的个人小程序,正好借着机会写一写相关小程序开发过程中遇到的问题和重点内容,做好自己的笔记,也帮助小白省去找资料的痛苦

开发流程

步骤

1、 wx.login 获取 code
2、 调用后端接口,传入 code,获取 openid 和 session_key
3、 将 openid 和 session_key 存储到本地

调用 wx.login 获取 code

wx.login({
  success(res) {
    if (res.code) {
      // 发起网络请求
      wx.request({
        url: '服务端接口地址',
        data: {
          code: res.code
        },
        success(res){
          console.log("服务端返回 session_key 和 openid", res.data)
        },
        fail(res){}
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

后端接口

gin 创建路由

// gin 创建路由
router := gin.Default()
router.GET("/login", GetOpenidAndSessionKey)
router.Run(":8080")

获取 openid 和 session_key

// 获取 openid 和 session_key 请求方式根据自己习惯编写
func GetOpenidAndSessionKey(c *gin.Context) {
    // get 请求方式获取 code
    code := c.Query("code")
    appid := "小程序 appid"
    secret := "小程序 secret"
    url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", appid, secret, code)
    resp, err := http.Get(url)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{
            "code": 500,
        })
    }

    // 读取返回数据
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{
            "code": 500,
        })
    }

    // 解析返回数据
    type OpenidAndSessionKey struct {
        Openid     string `json:"openid"`
        SessionKey string `json:"session_key"`
    }
    var data OpenidAndSessionKey
    err = json.Unmarshal(body, &data)
    if err != nil {
    }

    // 返回 openid 和 session_key
    c.JSON(http.StatusOK, gin.H{
        "code": 200,
        "data": data
    })
posted @ 2024-12-19 11:16  影的记忆  阅读(54)  评论(0编辑  收藏  举报