go + uniapp 通过 微信 code 获取 appid 等信息 无废话

go + uniapp 通过 微信 code 获取 appid 等信息 无废话

  • login.vue 通过 uni.login 获取 code
uni.login({
	"provider": "weixin",
	"onlyAuthorize": true, // 微信登录仅请求授权认证
	success: (event) => {
		// 登录成功
		console.log(event);

		const {
			code
		} = event;
		// 向后端发送服务 获取 APPID
		weixinLogin(code).then((res)=> {
			console.log(res);
		})
	}
})
  • weixinLogin 把 code 发送给后端
  • 请求 api/user.js
import request from '@/utils/request/index.js'; // 封装的request.js文件的位置

// 微信登录获取 AppID
export const weixinLogin = (code) => {
	return request(`/api/user/wxlogin/${code}`, 'POST')
}
  • 封装的 utils/request.js
const url_all = {
	// 'DEV': 'http://localhost:9999', // 开发
	'DEV': 'http://192.168.137.33:9999', // 安卓模拟器 手机测试的局域网地址
	// 'PRO': 'http://111.111.111.111:8080', // 生产
}

let BASEURL = url_all['DEV'] // 调整当前环境
/*
* 全局请求封装
* @param path 请求路径
* @param method 请求类型(GET/POST/DELETE等)
* @oaram data 请求体数据
* @param loading 请求未完成是是否显示加载中,默认为true
*/
export default (path, method, data = {}, loading = true) => {
	// 获取存储token
	const token = uni.getStorageSync("token");
	if (loading) {
		uni.showLoading({
			title: "加载中",
			mask: true
		});
	};
	//根据token进行调用函数
	if (token != '') {
		return tokenRequest(path, method, data, loading, token)
	} else {
		return noTokenRequest(path, method, data, loading)
	}
};

// 无token时发送请求函数
function noTokenRequest(path, method, data, loading) { 
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASEURL + path,
			method: method,
			data,
			success(response) {
				// console.log('%c响应拦截:', ' background:green', response);
				/* if (response.data.code === 3001) {
					// logout()
				} */
				/* if (response.data.code !== 20) {
					uni.showToast({
						icon: "none",
						duration: 4000,
						title: response.data.msg
					});
				} */
				// console.log(response.data)
				resolve(response.data);
			},
			fail(err) {
				uni.showToast({
					icon: "none",
					title: '服务响应失败'
				});
				console.error(err);
				reject(err);
			},
			complete() {
				uni.hideLoading();
			}
		});
	});
}


// 有token时发送请求函数
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) {
				// console.log('%c响应拦截:', ' background:green', response);
				if (response.data.code === 40101) {
					// logout()
				}
				// console.log(response.data)
				resolve(response.data);
			},
			fail(err) {
				uni.showToast({
					icon: "none",
					title: '服务响应失败'
				});
				console.error(err);
				reject(err);
			},
			complete() {
				uni.hideLoading();
			}
		});
	});
}

  • go -> GetWeiXinOpenID.go
func (db userDB) GetWeiXinOpenID(ctx *gin.Context) {
	code := ctx.Params.ByName("code")
	//小程序appid
	var appid = "" //小程序id
	//小程序secret
	var secret = "" //密钥
	//wx接口路径
	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")
	}
}
  • 封装的 response
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)
}

  • go -> router.go
userFun := userController.UserFunction()
userGroup := r.Group("api/user/")
userGroup.POST("/wxlogin/:code", userFun.GetWeiXinOpenID)
  • go -> mian.go
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)
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uniapp中设置微信小程序获取用户信息,需要先在小程序管理后台中开启获取用户信息权限,并获取到对应的AppIDAppSecret。 然后在uniapp的manifest.json文件中,将微信小程序的AppIDAppSecret配置进去,如下所示: ``` "mp-weixin": { "appid": "your_appid", "appsecret": "your_appsecret" } ``` 接着,在需要获取用户信息的页面中,可以通过uni.getUserInfo()方法来获取用户信息,示例代码如下: ``` uni.getUserInfo({ provider: 'weixin', success: function (res) { console.log(res.userInfo); } }); ``` 其中,provider参数指定获取用户信息的平台,这里填写weixin表示获取微信小程序中的用户信息。成功获取到用户信息后,可以通过res.userInfo来获取到用户的昵称、头像等信息。 需要注意的是,获取用户信息需要用户授权,因此在进行获取用户信息的操作时,需要先判断用户是否已经授权,可以使用uni.getSetting()方法来获取用户授权信息,示例代码如下: ``` uni.getSetting({ success: function (res) { if (res.authSetting['scope.userInfo']) { // 用户已经授权,可以直接获取用户信息 uni.getUserInfo({ provider: 'weixin', success: function (res) { console.log(res.userInfo); } }); } else { // 用户未授权,需要引导用户授权 uni.authorize({ scope: 'scope.userInfo', success() { // 用户已经授权,可以直接获取用户信息 uni.getUserInfo({ provider: 'weixin', success: function (res) { console.log(res.userInfo); } }); } }); } } }); ``` 以上是uniapp设置微信小程序获取用户信息的基本步骤和示例代码,希望能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她似晚风般温柔789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值