Wangjili
文章58
标签12
分类9
微信小程序开发

微信小程序开发

本文记录微信小程序的开发。

由于微信小程序在今年改了很多开发功能,包括一些接口的调用等,然后我近期正好要开发一个小程序,因此重新学习了相关开发技术,在这里记录一些改动比较大的地方。官方文档

开发

先说一下我开发用的框架。我的整个项目前端用到的编程语言或框架是tarojstaro-uireactjs+typescript;服务端用Golang编程语言+Ginweb框架开发的;数据库是mongodb,缓存服务是redis。下面主要说一下如何接入微信登录和消息订阅。

绑定微信登录

有一个需求是获取微信用户的基本信息,在旧版中调用微信的APIwx.getUserInfo即可获得,但是在新版中这个接口虽然也可以使用,但是返回的是一组默认值(它返回的信息所有人都是一样的,没什么意义)。如果我们想获得用户的信息,官网的做法有两种,一种是调用用户插件,这种方式我没有实现。我直接给代码。

// 在组件中使用如下按钮,点击后,会有一个弹窗,现实当前用户的头像,
const Demo = ()=>{
    return  <View
                style={{
                    display: "flex",
                    alignItems: "center",
                    justifyContent: "center",
                }}
            >
                <Button
                    openType="chooseAvatar"
                    style={{ padding: "0" }}
                    onChooseAvatar={getAvUrl}
                >
                    <AtAvatar image={avUrl}>头像</AtAvatar>
                </Button>
            </View>
}

一般我们需要绑定微信用户,然后实现业务逻辑,这个时候我们就想把每个微信用户在当前小程序中生成一个唯一的ID,然后根据ID操作业务,在一个微信小程序中,调用wx.login,成功会返回一个code,之后将这个code发送到我们自己的服务端。代码如下:

func (w *Wcctrl) WechatLogin2(c *gin.Context) {
	reqCode := c.DefaultQuery("code", "")
	if reqCode == "" {
		tool.Failed(c, "请求参数无效")
		return
	}
    // 在这里向微信发送GET请求,appid和secret参数需要替换为自己的微信小程序的信息,可以在微信小程序管理也查看。
	// GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
	//https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
	var xaoReqUserInfo = "https://api.weixin.qq.com/sns/jscode2session?appid=appid123xxxx&secret=dsdsdfsdf&js_code=" + reqCode + "&grant_type=authorization_code"
	client2 := &http.Client{}
	req2, err6 := http.NewRequest("GET", xaoReqUserInfo, nil)
	if err6 != nil {
		tool.Failed(c, err6.Error())
		return
	}
	req2.Header.Add("Content-Type", "application/json;charset=UTF-8")
	resp2, err7 := client2.Do(req2)
	if err7 != nil {
		tool.Failed(c, err7.Error())
		return
	}
	defer resp2.Body.Close()
	var res2 map[string]string
	body2, err8 := ioutil.ReadAll(resp2.Body)
	if err8 != nil {
		tool.Failed(c, err8.Error())
		return
	}
	err9 := json.Unmarshal(body2, &res2)
	if err9 != nil {
		tool.Failed(c, err9.Error())
		return
	}
	// 根据openid查询数据库,判断此微信用户有没有注册过。openid
    // 到这里就拿到了openid,这个在每个小程序中是唯一的,可以通过它创建一个新用户,绑定业务逻辑。
	var openId = res2["openid"]
	var userEmail models.User1List
	err := w.UserModel.FindByOpenId(openId, &userEmail)
	if err != nil {
		tool.Failed(c, err.Error())
		return
	}
	tool.Success(c, userEmail)

}

到这里就拿到了这个微信用户的ID,也就是登录成功了。

订阅消息

我们在使用一些微信小程序时,可以收到一些消息。这就是微信小程序订阅功能,这个功能有两种。

  1. 一次订阅:也就是订阅一次,发送一次消息;消息发完之后,这个小程序不能再给用户发送消息了,避免滥用;
  2. 永久订阅:一次订阅,小程序可以发送多次消息,这个审核会很严格,通常个人项目是通不过的。
本文作者:Wangjili
本文链接:https://blog.wangjili.cn/2023/10/15/minic/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可