go + uniapp 通过 微信 code 获取 appid 等信息 无废话
- login.vue 通过 uni.login 获取 code
uni.login({
"provider": "weixin",
"onlyAuthorize": true,
success: (event) => {
console.log(event);
const {
code
} = event;
weixinLogin(code).then((res)=> {
console.log(res);
})
}
})
- weixinLogin 把 code 发送给后端
- 请求 api/user.js
import request from '@/utils/request/index.js';
export const weixinLogin = (code) => {
return request(`/api/user/wxlogin/${code}`, 'POST')
}
const url_all = {
'DEV': 'http://192.168.137.33:9999',
}
let BASEURL = url_all['DEV']
export default (path, method, data = {}, loading = true) => {
const token = uni.getStorageSync("token");
if (loading) {
uni.showLoading({
title: "加载中",
mask: true
});
};
if (token != '') {
return tokenRequest(path, method, data, loading, token)
} else {
return noTokenRequest(path, method, data, loading)
}
};
function noTokenRequest(path, method, data, loading) {
return new Promise((resolve, reject) => {
uni.request({
url: BASEURL + path,
method: method,
data,
success(response) {
resolve(response.data);
},
fail(err) {
uni.showToast({
icon: "none",
title: '服务响应失败'
});
console.error(err);
reject(err);
},
complete() {
uni.hideLoading();
}
});
});
}
function tokenRequest(path, method, data, loading,token) {
return new Promise((resolve, reject) => {
uni.request({
url: BASEURL + path,
method: method,
data,
header: {
"token": token
},
success(response) {
if (response.data.code === 40101) {
}
resolve(response.data);
},
fail(err) {
uni.showToast({
icon: "none",
title: '服务响应失败'
});
console.error(err);
reject(err);
},
complete() {
uni.hideLoading();
}
});
});
}
func (db userDB) GetWeiXinOpenID(ctx *gin.Context) {
code := ctx.Params.ByName("code")
var appid = ""
var secret = ""
var url = "https://api.weixin.qq.com/sns/jscode2session"
data := make(map[string]string)
data["appid"] = appid
data["secret"] = secret
data["js_code"] = code
data["grant_type"] = "authorization_code"
request, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
query := request.URL.Query()
query.Add("appid", appid)
query.Add("secret", secret)
query.Add("js_code", code)
query.Add("grant_type", "authorization_code")
var encode string = query.Encode()
s := strings.Split(encode, "&")
reData := make(map[string]string)
for i := range s {
reData[strings.Split(s[i], "=")[0]] = strings.Split(s[i], "=")[1]
}
println(reData)
if encode != "" {
response.Success(ctx, gin.H{"data": reData}, "SELECT SUCCESS")
}
}
package response
import (
"github.com/gin-gonic/gin"
"net/http"
)
func Response(ctx *gin.Context, httpStatus int, code int, data gin.H, msg string) {
ctx.JSON(httpStatus, gin.H{"code": code, "data": data, "msg": msg})
}
func Success(ctx *gin.Context, data gin.H, msg string) {
Response(ctx, http.StatusOK, 200, data, msg)
}
func File(ctx *gin.Context, data gin.H, msg string) {
Response(ctx, http.StatusNotFound, 404, data, msg)
}
userFun := userController.UserFunction()
userGroup := r.Group("api/user/")
userGroup.POST("/wxlogin/:code", userFun.GetWeiXinOpenID)
package main
import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"github.com/spf13/viper"
"go-app/common"
"os"
)
func main() {
InitConfig()
common.InitDB()
r := gin.Default()
config := cors.DefaultConfig()
config.AllowAllOrigins = true
config.AllowMethods = []string{"GET", "POST", "OPTIONS"}
config.AllowHeaders = []string{"token", "tus-resumable", "upload-length", "upload-metadata", "cache-control", "x-requested-with", "*"}
r.Use(cors.New(config))
r = CollectRoute(r)
port := viper.GetString("server.port")
if port != "" {
panic(r.Run(":" + port))
}
r.Run()
}
func InitConfig() {
workDir, _ := os.Getwd()
viper.SetConfigName("application")
viper.SetConfigType("yml")
viper.AddConfigPath(workDir + "/config")
err := viper.ReadInConfig()
if err != nil {
panic(err)
}
}