本文记录微信小程序的开发。
由于微信小程序在今年改了很多开发功能,包括一些接口的调用等,然后我近期正好要开发一个小程序,因此重新学习了相关开发技术,在这里记录一些改动比较大的地方。官方文档
开发
先说一下我开发用的框架。我的整个项目前端用到的编程语言或框架是tarojs
、taro-ui
、reactjs
+typescript
;服务端用Golang
编程语言+Gin
web框架开发的;数据库是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,也就是登录成功了。
订阅消息
我们在使用一些微信小程序时,可以收到一些消息。这就是微信小程序订阅功能,这个功能有两种。
一次订阅
:也就是订阅一次,发送一次消息;消息发完之后,这个小程序不能再给用户发送消息了,避免滥用;永久订阅
:一次订阅,小程序可以发送多次消息,这个审核会很严格,通常个人项目是通不过的。