35。springboot小程序不需要授权登录
不需要授权的登录,只能获取到openId,有openId便可从数据库中关联到平台中的用户。
引入包: com.github.binarywang weixin-java-miniapp 3.6.0
WxMaConfiguration:package com.haiyeren.config; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import cn.binarywang.wx.miniapp.message.WxMaMessageHandler; import cn.binarywang.wx.miniapp.message.WxMaMessageRouter; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.error.WxErrorException; import java.io.File; import java.util.Map; /** * @author Binary Wang */ public class WxMaConfiguration { private static Map routers = Maps.newHashMap(); private static Map maServices = Maps.newHashMap(); public static WxMaService getMaService(String appid, String secret) { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(appid); config.setSecret(secret); config.setToken(""); config.setAesKey(""); config.setMsgDataFormat("JSON"); WxMaService service = new WxMaServiceImpl(); service.setWxMaConfig(config); return service; } public static WxMaMessageRouter getRouter(String appid) { return routers.get(appid); } private WxMaMessageRouter newRouter(WxMaService service) { final WxMaMessageRouter router = new WxMaMessageRouter(service); router .rule().handler(logHandler).next() .rule().async(false).content("模板").handler(templateMsgHandler).end() .rule().async(false).content("文本").handler(textHandler).end() .rule().async(false).content("图片").handler(picHandler).end() .rule().async(false).content("二维码").handler(qrcodeHandler).end(); return router; } private final WxMaMessageHandler templateMsgHandler = (wxMessage, context, service, sessionManager) -> { service.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder() .templateId("此处更换为自己的模板id") .formId("自己替换可用的formid") .data(Lists.newArrayList( new WxMaTemplateData("keyword1", "339208499", "#173177"))) .toUser(wxMessage.getFromUser()) .build()); return null; }; private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> { System.out.println("收到消息:" + wxMessage.toString()); service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("收到信息为:" + wxMessage.toJson()) .toUser(wxMessage.getFromUser()).build()); return null; }; private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> { service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("回复文本消息") .toUser(wxMessage.getFromUser()).build()); return null; }; private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> { try { WxMediaUploadResult uploadResult = service.getMediaService() .uploadMedia("image", "png", ClassLoader.getSystemResourceAsStream("tmp.png")); service.getMsgService().sendKefuMsg( WxMaKefuMessage .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build()); } catch (WxErrorException e) { e.printStackTrace(); } return null; }; private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> { try { final File file = service.getQrcodeService().createQrcode("123", 430); WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file); service.getMsgService().sendKefuMsg( WxMaKefuMessage .newImageBuilder() .mediaId(uploadResult.getMediaId()) .toUser(wxMessage.getFromUser()) .build()); } catch (WxErrorException e) { e.printStackTrace(); } return null; }; }
后台代码(xcxAppId和xcxSecret需要自己填): @ApiOperation(value = "小程序登录,只获取openid") @PostMapping("loginByWeixin") public ResultVo loginByWeixin(String code) throws Exception { ResultVo result = new ResultVo<>(); WeixinLoginVo weixinLoginVo = new WeixinLoginVo(); //获取openid //通过自定义工具类组合出小程序需要的登录凭证 code String xcxAppId = "xxxx"; String xcxSecret = "xxxx"; //其他商城的小程序 final WxMaService wxService = WxMaConfiguration.getMaService(xcxAppId, xcxSecret); WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code); String openid = session.getOpenid(); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(UserEntity::getOpenid,openid); UserEntity user=userService.getOne(queryWrapper); if(null==user) { user=new UserEntity(); user.setOpenid(openid); userService.save(user); } String tokenId = tokenService.getTokenId(user.getId(), ""); weixinLoginVo.setOpenid(openid); weixinLoginVo.setOpenid(tokenId); result.setData(weixinLoginVo); return result; }
WeixinLoginVo:package com.haiyeren.entity.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @ApiModel("小程序登录返回") @Data public class WeixinLoginVo { @ApiModelProperty(value="登录令牌") private String token; @ApiModelProperty(value="openid") private String openid; }
小程序端登录代码: login: function () { var that = this; wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId console.log("res.code:", res.code) if (res.code) { //发起网络请求 wx.request({ url: "", data: { code: res.code }, header: { "content-type": "application/x-www-form-urlencoded" }, method: "POST", // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT success: function (res) { console.log("登陆回调", res); if (res.data.status == 1) { that.globalData.token = res.data.data.token; that.globalData.openid = res.data.data.openid; } if (res.data.status != 1) { // 登录错误 // wx.hideLoading(); wx.showModal({ title: "提示", content: "无法登录,请重试", showCancel: false }) return; } }, fail: function (failRes) { //用户未授权会调用失败,调用失败就进这里 // wx.hideLoading(); } }) } else { console.log("获取用户登录态失败!" + res.errMsg) } } }) }
美法院判决中兴通讯五年合规监察期结束不附加任何处罚来源新华社据美国得克萨斯州一家法院日前判决及中国中兴通讯股份有限公司公告,美国对中兴通讯的合规监察期于美国时间22日结束,且不附加任何处罚,美国此前派驻该公司的监察官任期也于同日结
音响界的特斯拉一前言BLUESOUND是一家致力于完美实现无线数字高保真音频的公司,也许你对这个品牌名并不熟悉,但提到NADPSB,只要对音响产品稍有接触的朋友,就应该知道了。BLUESOUND
银行春招近万岗位虚席以待金融科技人才成限量版资源据证券日报记者不完全统计,已有农业银行交通银行民生银行等超10家银行发布招聘公告。对金融科技人才的招揽仍然是各家银行招聘的重点领域。本报记者李冰见习记者张博我现在离职了,正值春招打
优化拍摄功能三星发布两款中低端5G智能手机据韩联社网站报道,三星电子近日在线发布旗下中低端入门级新机GalaxyA535G版和GalaxyA335G版。GalaxyA系列采用5纳米制程芯片,增强人工智能算力,优化夜景拍摄模
织密信息安全防护网由13个部门联合修订发布的网络安全审查办法(以下简称办法)日前开始施行,受到广泛关注。国家网信办有关负责人表示,对办法进行修订,主要目的是进一步保障网络安全和数据安全,维护国家安全
今日上市祥明智能鹿山新材中国经济网北京3月25日讯今日,祥明智能(301226)鹿山新材(603051)2只新股上市。祥明智能(301226)祥明智能主要从事微特电机风机及智能化组件的研发生产与销售,为H
2000元买不到好手机?这3款性价比十足,好用不贵不知道从什么时候开始,国产手机普遍出现了大涨价,以往两三千元就可以选择一款旗舰机,但如今一款旗舰机都要五六千元以上,甚至有些直接突破了万元,这是很多消费者无法承受的,但也无法否认旗
厦大科研团队首次揭示细胞原位坏死小体组织结构特征来源台海网台海网3月24日讯据福建日报报道前方就是细胞膜城,但城下还有条河,怎么办?混合谱系激酶结构域(MLKL)分子正在着急,突然看到河上有拼成的木块。于是,它们四位以上一组,踩
你手机上都有哪些非常神奇的软件?背着宝剑的观点谢谢邀请!最近每天都有推送app,现在汇总推荐给你们1。完事儿推荐理由一款美到窒息的日常管理应用,可以用来做日记做记录写待办事项设定目标建立养成习惯等。2。NFC卡模
为什么苹果手机把后壳改成玻璃?苹果11以上的手机采用了无线充电技术,这个技术可以说在品牌机机型中苹果是最后一家采用。手机无线充电技术是日本夏普手机在2005年最先采用,苹果手机晚了整整10年。无线充电技术其实很
超级小桀6万人砍不下1台手机,拼多多砍一刀的背后,有何猫腻?网友6万人能砍一座城,却砍不下资本家手里的一台手机终于有人揭露拼夕夕的砍一刀套路了。近日,游戏主播超级小桀借着高人气,在直播间让网友帮忙砍一刀,帮助自己在拼夕夕免费领手机活动中,拿