E企盈营销工具技术服务商 热线:4006-838-530

微信网页授权,小程序登录、微信网页授权Java版

E企盈直播平台营销卖货系统

小程序登录、微信网页授权(Java版)首先呢,“登录”、“授权”、“授权登录”,是一样的意思,不用纠结。写小程序授权登录的代码前,需要了解清楚openid与unionid的区别,这里再简单介绍一下:腾讯有个“微信·开放平台”,只有企业才能注册账号,可理解为微信体系里,最顶级的账号。官网地址:除了这个微信开放平台,还有另一个叫做“微信公众平台”,可注册四种账号,包括服务号、订阅号、小程序、企业微信。也就是说,公众号(服务号和订阅号可统称为公众号)占一个账号,小程序也占一个账号。在没有绑定开放平台前,小程序授权登录只能拿到用户的openid。官网地址:小程序可绑定在公众号下,公众号可以绑定在微信开放平台下,小程序也可以绑定在微信开放平台下。(好像有点小绕)简单点说,所有的公众平台账号都需要绑定在“开放平台”下,才可获得的unionid,这是打通同个企业下所有微信公众账号的最有效方法(官方推荐)更加具体的可自行百度…一、以下为小程序登录的代码:方式一:通过code调用code2session接口获得message,包含openid、session_key,满足条件的情况下还能直接获得unionid条件如下:(存在局限性)官方说明UnionID获取途径,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过+获取到该用户UnionID,无须用户再次授权。开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。也可通过code2session获取该用户的UnionID。/Author:huanglpDate:2018-11-28/publicclassWeiXinUtils{privatestaticLoggerlog=LoggerFactory.getLogger(WeiXinUtils.class);/通过前端传过来的code,调用小程序登录接口,获取到message并返回(包含openidsession_key等)@paramcode@return/publicstaticJSONObjectlogin(Stringcode){log.info(“==============小程序登录方法开始================”);WxMiniPropertiesproperties=WeiXinPropertiesUtils.getWxMiniProperties();Stringurl=properties.getInterfaceUrl()+”/sns/jscode2session?appid=”+properties.getAppId()+”&secret=”+properties.getAppSecret()+”&js_code=”+code+”&grant_type=authorization_code”;JSONObjectmessage;try{//RestTemplate是Spring封装好的,挺好用,可做成单例模式RestTemplaterestTemplate=newRestTemplate();Stringresponse=restTemplate.getForObject(url,String.class);message=JSON.parseObject(response);}catch(Exceptione){log.error(“微信服务器请求错误”,e);message=newJSONObject();}log.info(“message:”+message.toString());log.info(“==============小程序登录方法结束================”);returnmessage;//后续,可获取openidsession_key等数据,以下代码一般放在Service层//if(message.get(“errcode”)!=null){//thrownewValidationException(message.toString());//}//Stringopenid=message.get(“openid”).toString();//StringsessionKey=message.get(“session_key”).toString();//…}}补充1:WeiXinPropertiesUtils工具类publicclassWeiXinPropertiesUtils{//微信小程序配置privatestaticWxMiniPropertiesminiProperties;//微信公众号配置privatestaticWxPropertieswxProperties;privatestaticvoidinit(){if(miniProperties==null){miniProperties=ContextLoader.getCurrentWebApplicationContext().getBean(WxMiniProperties.class);}if(wxProperties==null){wxProperties=ContextLoader.getCurrentWebApplicationContext().getBean(WxProperties.class);}}publicstaticWxMiniPropertiesgetWxMiniProperties(){init();returnminiProperties;}publicstaticWxPropertiesgetWxProperties(){init();returnwxProperties;}}补充2:WxMiniProperties配置类@Data@Component@ConfigurationProperties(prefix=”luwei.module.wx-mini”)publicclassWxMiniProperties{privateStringappId;privateStringappSecret;privateStringinterfaceUrl;}到此已能通过code获取到用户的openid和session_key,但若不满足条件,即使将小程序绑定到微信开放平台上,也获取不到unionid,所以此方式不稳定,推荐使用解密的方式获取数据。方式二:通过解密的方式获取用户unionid/通过encryptedData,sessionKey,iv获得解密信息,拥有用户丰富的信息,包含openid,unionid,昵称等/publicstaticJSONObjectdecryptWxData(StringencryptedData,StringsessionKey,Stringiv)throwsException{log.info(“============小程序登录解析数据方法开始==========”);Stringresult=AesCbcUtil.decrypt(encryptedData,sessionKey,iv,”UTF-8″);JSONObjectuserInfo=newJSONObject();if(null!=result&&result.length()0){userInfo=JSONObject.parseObject(result);}log.info(“result:”+userInfo);log.info(“============小程序登录解析数据方法结束==========”);returnuserInfo;}补充1:AesCbcUtil工具类,直接复制即可,需要添加bouncycastle依赖。BouncyCastle是一个开源的加解密解决方案,官网可查看packagecom.luwei.common.utils;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importorg.apache.commons.codec.binary.Base64;importjavax.crypto.Cipher;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjava.security.AlgorithmParameters;importjava.security.Security;/UpdatedbyhuanglpDate:2018-11-28/publicclassAesCbcUtil{static{Security.addProvider(newBouncyCastleProvider());}/AES解密@paramdata//被加密的数据@paramkey//加密秘钥@paramiv//偏移量@paramencoding//解密后的结果需要进行的编码/publicstaticStringdecrypt(Stringdata,Stringkey,Stringiv,Stringencoding){//org.apache.commons.codec.binary.Base64byte[]dataByte=Base64.decodeBase64(data);byte[]keyByte=Base64.decodeBase64(key);byte[]ivByte=Base64.decodeBase64(iv);try{Ciphercipher=Cipher.getInstance(“AES/CBC/PKCS7Padding”);SecretKeySpecspec=newSecretKeySpec(keyByte,”AES”);AlgorithmParametersparameters=AlgorithmParameters.getInstance(“AES”);parameters.init(newIvParameterSpec(ivByte));cipher.init(Cipher.DECRYPT_MODE,spec,parameters);//初始化byte[]resultByte=cipher.doFinal(dataByte);if(null!=resultByte&&resultByte.length0){returnnewString(resultByte,encoding);}returnnull;}catch(Exceptione){e.printStackTrace();}returnnull;}}到此已经获取到JSONObject类型的userInfo,包含openid,unionid,昵称,头像等数据后续可以将用户信息保存到数据库,再返回给前端一个token即可,shiro经过公司封装了一层,代码如下:…//获得用户IDintuserId=wxUser.getWxUserId();shiroTokenService.afterLogout(userId);Stringuuid=UUID.randomUUID().toString();Stringtoken=StringUtils.deleteAny(uuid,”-“)+Long.toString(System.currentTimeMillis(),Character.MAX_RADIX);shiroTokenService.afterLogin(userId,token,null);returntoken;二、以下为公众号(网页)授权的代码:网页授权更加简单,可查看需添加riversoft相关依赖包,公众号网页授权,只需要将公众号绑定了开放平台,就能获取到unionid及其他用户信息。publicstaticOpenUserwebSiteLogin(Stringcode,Stringstate){log.info(“============微信公众号(网页)授权开始===========”);WxPropertiesproperties=WeiXinPropertiesUtils.getWxProperties();AppSettingappSetting=newAppSetting(properties.getAppId(),properties.getAppSecret());OpenOAuth2sopenOAuth2s=OpenOAuth2s.with(appSetting);AccessTokenaccessToken=openOAuth2s.getAccessToken(code);//获取用户信息OpenUseropenUser=openOAuth2s.userInfo(accessToken.getAccessToken(),accessToken.getOpenId());log.info(“============微信公众号(网页)授权结束===========”);returnopenUser;//后续,可将用户信息保存//最后一步,生成token后,需重定向回页面//return”redirect:”+state+”?token=”+token;}隆鹏广州芦苇科技Java开发团队芦苇科技-广州专业互联网软件服务公司抓住每一处细节,创造每一个美好关注我们的公众号,了解更多想和我们一起奋斗吗?lagou搜索“芦苇科技”或者投放简历到server@talkmoney.cn加入我们吧关注我们,你的评论和点赞对我们最大的支持

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 微信网页授权,小程序登录、微信网页授权Java版
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏