servlet+service+dao+mysql+微信小程序+微信公众号(小程序自动登陆,推送公众号模板消息,生成数据二维码,小程序上传图片)

1.项目简介

这是一个课外学习的微信小程序项目,为提高办事效率方便同学与老师设计此项目,提供查看课表,扫码签到,在线请假,在线审批,发布通知,查看成绩等功能,选择采用课外刚学习的微信小程序达到方便简洁的效果且不需要下载,通过内网穿透实现真机体验与测试。
在这里插入图片描述
在这里插入图片描述
功能模块
在这里插入图片描述

2.重点分析

小程序js访问servlet

  wx.request({
                url: 'https://qwe.你的域名.cc/WX_school/FindClassServlet',
                method: 'post',
                data: {
                  id: that.data.id,
                },
                header: {
                  "Content-Type": "application/x-www-form-urlencoded"
                },
                success(res) {
                  console.log(res.data);
                  that.data.arrClass = res.data;
                },
               
              })

实现小程序自动登陆

思路:小程序对使用过的微信用户都会设定一个唯一的openid,可以在小程序中添加一个绑定用户按钮,将要绑定的用户openid存入数据库,登陆时获取到该请求的openid再查询数据库中是否有对应的openid,就可以实现自动登陆。

在服务器的接口中,需要进行一个http请求,将从小程序获得的code和接口中存储的appid和secret发送给微信接口服务,然后就可以获得session_key和openid.

String URL = "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+appsecret+"&js_code="+Code+"&grant_type=authorization_code";

微信小程序推送公众号模板消息
(一) 描述:
因小程序是被动触发推送消息,所以要做成推送到该用户的微信公众号上
代码推送模板消息则是通过用户的openId来进行推送,但是小程序和微信公众号的openId不同,所以只能另找办法。
在微信的官网上查询到,绑定在同一个微信开放者平台上,则会生成一个unionId,这个unionId在小程序端和在微信公众号端都是一样的,所以我们拿这个来实现向微信公众号推送模板消息的功能。
(二)前期准备:
微信公众号:AppId和APPSecret(必须认证)
微信小程序:AppId和APPSecret(必须认证)
微信开放者平台(小程序和公众号必须绑定同一个开放者平台,必须认证)

(三)获取微信公众号的所有用户信息
通过微信公众号的AppId和AppSecret(当前ip地址必须在微信公众号的白名单内)获取微信公众号的access_token(7200秒有效)
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
返回结果:
{
“access_token”: “ACCESS_TOKEN”,
“expires_in”: 7200
}
(其中的APPID和APPSECRET换成自己微信公众号的appId和APPSecret)
通过刚才获取到的access_token去获取所有用户的openId地址:https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
返回结果:
{
“count”: 2,
“data”: {
“openid”: [
“OPENID1”,
“OPENID2”
]
},
“next_openid”: “NEXT_OPENID”,
“total”: 2
}

(NEXT_OPENID为超出10000个取10001继续请求,这个会在每次请求后返回的json字符串中有)
将所有的openId全部放在一个新的数组中,然后for循环,循环次数为openId的数组的长度,循环请求每个用户的基本信息
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回结果:
{
“subscribe”: 1,
“openid”: “o6_bmjrPTlm6_2sgVt7hMZOPfL2M”,
“nickname”: “Band”,
“sex”: 1,
“language”: “zh_CN”,
“city”: “广州”,
“province”: “广东”,
“country”: “中国”,
“headimgurl”: “http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0”,
“subscribe_time”: 1382694957,
“unionid”: " o6_bmasdasdsad6_2sgVt7hMZOPfL",
“remark”: “”,
“groupid”: 0,
“tagid_list”: [
128,
2
],
“subscribe_scene”: “ADD_SCENE_QR_CODE”,
“qr_scene”: 98765,
“qr_scene_str”: “”
}
(其中的unionid绑定了开放者平台才会有的)
将所有的用户信息存储在自己的数据库中

(四)获取小程序用户信息
小程序端通过调用wx.login()会获取到一个用户登录凭证code(有效期五分钟)
将code传给后台,后台通过appId、APPSecret和code能够获取到这个用户的微信基本信息
地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
返回结果:
{
“sex”: 1,
“photoUrl”: “https://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83eofr4W1SptUJ9M1PUiaqA4XBZiapCN98sPYOjNDXZSrUp1JcicibeLiaHZ56qlQnibQEUSFGLnEatu1TyiaA/132”,
“openId”: “oDl465JGG54ezszjG3K2spJV1TNM”,
“uniodId”: “otjNb03MD_IipC8XRdL68GOKLVgs”
}
(其中的unionid绑定了开放者平台才会有的,如果绑定后还是没有unionId,则这个小程序用户没有关注相同主体的公众号)
将用户信息保存在自己的数据里

(五)微信公众号推送
本地数据库中存放着小程序用户表和微信公众号的表,下面就是向某一个小程序用户推送微信公众号信息
在小程序用户表中任意取一个用户A信息,用户A的openId和unionId,通过unionId到公众号表里去检索对应的A用户微信公众号的openId
在微信公众号上选择一个模板消息,编辑完要发送的的内容后,再请求发送模板消息的接口
地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

生成数据二维码
利用二维码生成工具
在这里插入图片描述
小程序上传图片

      for (let path of this.data.images) {//多张图片
          arr.push(wxUploadFile({
            url: 'https://qwe.你的域名.cc/WX_school/FileUploadServlet',
            filePath: path,
            name: 'qimg',
            async: false,
            formData: ({//上传图片所要携带的参数
              title: title,
              content: content,
              t_no: app.data.id,
              length: l
            }),
          }))
        }

3.开发限制

(一)、个人申请主要是申请到个人订阅号,然后个人订阅号不能主动推送消息,只能被动回复且接口功能较少!
(二)、可采用测试号代替,测试号可以通过模板消息主动推送,但是无法关联公众号!
(三)、小程序推送公众号模板消息需要unionId关联用户,可是unionId需要在微信开发平台花300元认证才行。
(四)、微信公众号,小程序,小游戏,开发平台需要不同的邮箱才能注册!特别麻烦!
(五)、微信公众号需要AccessToken令牌!AccessToken的有效时长为2小时,而每天获取的次数有限制,所以,把AccessToken保存起来,可以做到防止超过获取次数,永不失效。通过线程实现每隔一段时间检查是否失效,如果失效重新申请否则不申请!
(六)、个人申请的小程序无法打开内嵌网页!web-view组件,业务域名不能配置。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值