Golang通过⼩程序获取openid的⽅法⽰例
为什么要获取⼩程序的 openid
在开发⼩程序的过程中,⼩程序可以通过官⽅提供的登录能⼒⽅便地获取提供的⽤户⾝份标识,快速建⽴⼩程序内的⽤户体系。那么这个⽤户⾝份标识就是 openid。
⼩程序获取 openid 的流程
那么⼩程序获取 openid 的流程具体如下,这⾥我简化了⼀下,因为我们只需要获取到 openid 即可,具体可以参考
我们需要在⼩程序中调⽤ wx.login() 获取 code 码,然后将这个 code 码发送给后端,后端带着这个 code 码和
appid,appsecret 向接⼝发起 http 请求获取 openid。
注意事项
在开发的⼩程序中的 AppID ⼀定要和后端使⽤的 AppID 保持⼀致,否则会获取 openid 失败
我们请求的 API 为,
请求地址为:
所需的四个参数为:
属性类型默认值必填说明
appid string是⼩程序 appId
secret string是⼩程序 appSecret
js_code string是登录时获取的 code
grant_type string是授权类型,此处只需填写
authorization_code
js_code 就是我们通过 wx.login 得到的 code,grant_type 为 authorization_code,只剩下 appid 和 secret 需要我们登录⾥⾯
⼩程序代码演⽰
为了⽅便操作,我们在 index 页⾯编写了⼀个 button,通过 button 触发事件
<!--index.wxml-->
<view class="container">
<button bindtap="onGetOpenId">点击获取openid</button>
</view>
然后编写事件函数:
//index.js
Page({
onGetOpenId() {
wx.login({
success: res => {
if (de) {
url: "localhost:2020/openid",
method: "POST",
data: {
code: de
},
success: res => {
console.log(res);
}
});
}
}
});
}
});
那么,在⼩程序中发送 http 请求强制要求地址必须为 https,由于我们在开发中,我们可以把强制 https 的设置关闭
Go 语⾔后端代码演⽰
⼩程序发过来的数据和去 API 获取的数据都是放在 http body ⾥,所以我们要从 body 获取package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/openid", getOpenID)
http.ListenAndServe(":2020", nil)
}
func getOpenID(writer http.ResponseWriter, request *http.Request) {
if request.Method != http.MethodPost {
return
}
var codeMap map[string]string
err := json.NewDecoder(request.Body).Decode(&codeMap)
if err != nil {
return
}
defer request.Body.Close()
code := codeMap["code"]
openid, err := sendWxAuthAPI(code)
if err != nil {
return
}
写文章的小程序
fmt.Println("my openid", openid)
}
const (
code2sessionURL = "api.weixin.qq/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
appID = "你的AppID"
appSecret = "你的AppSecret"
)
func sendWxAuthAPI(code string) (string, error) {
url := fmt.Sprintf(code2sessionURL, appID, appSecret, code)
resp, err := http.DefaultClient.Get(url)
if err != nil {
return "", err
}
var wxMap map[string]string
err = json.NewDecoder(resp.Body).Decode(&wxMap)
if err != nil {
return "", err
}
defer resp.Body.Close()
return wxMap["openid"], nil
}
运⾏结果
运⾏代码,在⼩程序中点击:
结果:
到此这篇关于Golang通过⼩程序获取openid的⽅法⽰例的⽂章就介绍到这了,更多相关Golang获取openid内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论