generated from pkg/go-template
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
|
// Package wx 与Wechat Http Api交互
|
||
|
package wx
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"git.icechen.cn/monorepo/backend/pkg/api"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type code2SessionApiUrlResp struct {
|
||
|
ErrCode int `json:"errcode"`
|
||
|
ErrMsg string `json:"errmsg"`
|
||
|
OpenId string `json:"openid"`
|
||
|
UnionId string `json:"unionid"`
|
||
|
}
|
||
|
|
||
|
// Code2Session 登录凭证 code 后传到开发者服务器调用此接口完成登录流程
|
||
|
func Code2Session(appId, secret, jsCode string) (*code2SessionApiUrlResp, error) {
|
||
|
// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html ->> wx.login
|
||
|
const code2SessionApiUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code"
|
||
|
|
||
|
p := map[string]string{
|
||
|
"appid": appId,
|
||
|
"secret": secret,
|
||
|
"js_code": jsCode,
|
||
|
}
|
||
|
|
||
|
paramValueReplace := func() string {
|
||
|
url := code2SessionApiUrl
|
||
|
for k, v := range p {
|
||
|
url = strings.ReplaceAll(url, k, v)
|
||
|
}
|
||
|
return url
|
||
|
}
|
||
|
|
||
|
get, err := http.Get(paramValueReplace())
|
||
|
defer get.Body.Close()
|
||
|
|
||
|
if err != nil {
|
||
|
return nil, api.NewFError(err.Error())
|
||
|
}
|
||
|
|
||
|
resp, err := ioutil.ReadAll(get.Body)
|
||
|
if err != nil {
|
||
|
return nil, api.NewFError(err.Error())
|
||
|
}
|
||
|
|
||
|
if get.StatusCode != fiber.StatusOK {
|
||
|
return nil, api.NewFError(fmt.Sprintf("jscode2session statusCode:%v,resp:%v", get.StatusCode, string(resp)))
|
||
|
}
|
||
|
|
||
|
c := new(code2SessionApiUrlResp)
|
||
|
if err := json.Unmarshal(resp, c); err != nil {
|
||
|
return nil, api.NewFError(err.Error())
|
||
|
}
|
||
|
|
||
|
if c.ErrCode != 0 && c.ErrMsg != "" {
|
||
|
return nil, api.NewFError(fmt.Sprintf("jscode2session errCode:%v,errMsg:%v", c.ErrCode, c.ErrMsg))
|
||
|
}
|
||
|
|
||
|
return c, nil
|
||
|
|
||
|
}
|