微信小程序 登录获取 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
})