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

小程序如何获取用户信息

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

微信小程序基于微信进行开发,而微信又存有用户信息,我们是否可以直接通过微信端获取用户信息,则无需用户进行再次输入个人信息。微信小程序可以通过wx.getUserInfo()接口来获取部分用户信息,我们可以参考。但是通过该接口能获取的数据只有://必须是在用户已经授权的情况下调用wx.getUserInfo({success(res){constuserInfo=res.userInfo//整体user对象constnickName=userInfo.nickName//用户昵称constavatarUrl=userInfo.avatarUrl//用户头像constgender=userInfo.gender//性别0:未知、1:男、2:女constprovince=userInfo.province//用户国家constcity=userInfo.city//用户所在城市constcountry=userInfo.country}})但是如果我们要获取用户在该程序的唯一性标志openid,又或者用户在所有微信小程序的唯一性标志unionid,则无法直接通过该接口获取。另外,wx.getUserInfo()接口经过改版,无法一登录就会弹窗让用户授权,现在要通过编程设置按钮引导用户点击获取用户信息,这样子的改版被很多程序猿吐槽,我们也看看。在解决新版本带来的问题之前,我们先来说一下除了这些基本用户信息以外,openid和unionid也是很多微信小程序所要获得存储的,先来说明一下两个id的含义:(1)openid:一个用户在一个微信小程序下都有唯一标志,这个标志是证明该用户在该小程序的唯一性存在的标志。小程序可以通过获取openid来确定该用户在小程序中的身份(2)unionid:微信下不同产品(如公众号和小程序),用户在不同产品下都有着唯一性的标志unionid,我们可以通过该标志确定用户在不同产品下唯一身份,这样就打通所有的小程序和公众号的账号系统。小程序可以通过获取unionid来绑定自身公众号,而用户要支付等操作时也需要有unionid的证明。获取用户普通信息(就是昵称这类)虽然受到改版影响,但是实际上获取困难性并无增加多少,只需要通过设置按钮通过点击按钮事件触发wx.getUserInfo()j即可。而两个私密id才是这次获取困难性的来源。当然,在说明获取两个id的时候也会讲解一下获取用户普通信息。在说明获取用户openid和unionid之前,我们先说一下微信小程序在我们建立程序的时候给的标准模板,该模板里面就是设置有按钮和获取用户信息的代码,而且我们可以通过查看先了解一下该小程序模板运行的模式。但是该模板中没有说明如何获取openid和unionid,而且没有和数据库后端交互。(重点关注下面内容)获取了用户的unionid的过程中自然要获取用户的openid,我们可以查看,文章是17年编写的,当时版本还未改变,所以里面微信小程序的操作时不起作用的。但是在后端使用springboot进行操作的过程是可以借鉴的。unionid的获取是要先通过wx.login()接口(可通过查看)获取code,发送get请求到微信小程序后端获取openid和session_key,这时候就获得了openid了,但是unionid作为更为隐秘的信息,则这时候是还未获得的。这时候我们就要再通过wx.getUserInfo()获取encryptedData和iv(查看),其中encryptedData封装了用户信息和unionid(查看),但是使用了AES进行加密,这时候我们要将encryptedData和iv发送到后端进行AES解密出unionid进行存储即可。在掘金文章中并没有说明其中要导入了两个依赖,这里说明一下:!–为了分析微信小程序返回的openid导包–!–用于工具类AesCbcUtil–dependencygroupIdorg.bouncycastle/groupIdartifactIdbcprov-jdk15on/artifactIdversion1.61/version/dependency!–JSONObject导包–dependencygroupIdnet.sf.json-lib/groupIdartifactIdjson-lib/artifactIdversion2.4/versionclassifierjdk15/classifier/dependency在掘金文章中是将wx.getUserInfo()封装在wx.login()中,而该方法是在小程序运行开始即进行,则在新版小程序是不一样的,我们应该先在app.js中先进行wx.login()获取code和openid发送到后台进行存储,而在设置按钮的js文件中才进行wx.getUserInfo()获取encryptedData和iv进行解密获得unionid。由于我并不需要确定用户在不同小程序和公众号之间的唯一性,而我只需要确定用户在我程序中的唯一性,即只需要获得openid进行存储即可。所以我通过上面掘金文章解决方法说一下获取用户openid的过程:小程序中app.js中onLaunch()中进行设置:onLaunch:function(){//登录wx.login({success:function(r){//获取codevarcode=r.code;//debugger;if(code){//发送code到后台,分析openidwx.request({url:’http://xxxxxx/login/regist?code=’+code,method:’POST’,header:{‘content-type’:’application/json’},success:function(res){//debugger;if(res.data.status==0){//status为空时登录凭证code为空wx.showToast({title:’登录凭证code为空…’,icon:”none”,duration:2500})}elseif(res.data.status==1){//status为1时openid已存在this.globalData.userInfo=res.data.userInfo;console.log(userInfo);}elseif(res.data.status==2){//status为2时openid不存在this.globalData.userInfo=res.data.userInfo;console.log(userInfo);}}})}}})}后端controller的编写:importcom.xie.video.entity.Users;importcom.xie.video.service.UsersService;importcom.xie.video.untils.HttpRequest;importnet.sf.json.JSONObject;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.HashMap;importjava.util.Map;@RestController@RequestMapping(“/login”)publicclassLoginController{@AutowiredprivateUsersServiceusersService;@PostMapping(“/regist”)publicMapgettingOpenID(@RequestParam(“code”)Stringcode){Mapmap=newHashMap();//登录凭证不能为空if(code==null||code.length()==0){map.put(“status”,0);map.put(“msg”,”code不能为空”);returnmap;}//小程序唯一标识(在微信小程序管理后台获取)StringwxspAppid=”xxxxx”;//小程序的appsecret(在微信小程序管理后台获取)StringwxspSecret=”xxxxx”;//授权(必填)Stringgrant_type=”authorization_code”;////////////////1、向微信服务器使用登录凭证code获取session_key和openid//////////////////请求参数Stringparams=”appid=”+wxspAppid+”&secret=”+wxspSecret+”&js_code=”+code+”&grant_type=”+grant_type;//发送请求Stringsr=HttpRequest.sendGet(“https://api.weixin.qq.com/sns/jscode2session”,params);//解析相应内容(转换成json对象)JSONObjectjson=JSONObject.fromObject(sr);//用户的唯一标识(openid)Stringopenid=(String)json.get(“openid”);//查询数据库中该openid是否存在if(usersService.queryOpenIdIsExist(openid)){//openid存在,则查找该user对象进行返回Usersusers=usersService.queryUserByOpenID(openid);//status为1,用户openid已存在map.put(“status”,1);map.put(“userInfo”,users);}else{//openid不存在,则创建新user对象Usersusers=newUsers();users.setOpenId(openid);users=usersService.saveUsers(users);//status为2,用户openid未存在map.put(“status”,2);map.put(“userInfo”,users);}returnmap;}}注意导入JSONObject的依赖(上面有说)工具类HttpRequest(用于发送get或post请求)importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.util.List;importjava.util.Map;publicclassHttpRequest{/向指定URL发送GET方法的请求@paramurl发送请求的URL@paramparam请求参数,请求参数应该是name1=value1&name2=value2的形式。@returnURL所代表远程资源的响应结果/publicstaticStringsendGet(Stringurl,Stringparam){Stringresult=””;BufferedReaderin=null;try{StringurlNameString=url+”?”+param;URLrealUrl=newURL(urlNameString);//打开和URL之间的连接URLConnectionconnection=realUrl.openConnection();//设置通用的请求属性connection.setRequestProperty(“accept”,”/”);connection.setRequestProperty(“connection”,”Keep-Alive”);connection.setRequestProperty(“user-agent”,”Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)”);//建立实际的连接connection.connect();//获取所有响应头字段MapString,ListStringmap=connection.getHeaderFields();//遍历所有的响应头字段for(Stringkey:map.keySet()){System.out.println(key+”—“+map.get(key));}//定义BufferedReader输入流来读取URL的响应in=newBufferedReader(newInputStreamReader(connection.getInputStream()));Stringline;while((line=in.readLine())!=null){result+=line;}}catch(Exceptione){System.out.println(“发送GET请求出现异常!”+e);e.printStackTrace();}//使用finally块来关闭输入流finally{try{if(in!=null){in.close();}}catch(Exceptione2){e2.printStackTrace();}}returnresult;}/向指定URL发送POST方法的请求@paramurl发送请求的URL@paramparam请求参数,请求参数应该是name1=value1&name2=value2的形式。@return所代表远程资源的响应结果/publicstaticStringsendPost(Stringurl,Stringparam){PrintWriterout=null;BufferedReaderin=null;Stringresult=””;try{URLrealUrl=newURL(url);//打开和URL之间的连接URLConnectionconn=realUrl.openConnection();//设置通用的请求属性conn.setRequestProperty(“accept”,”/”);conn.setRequestProperty(“connection”,”Keep-Alive”);conn.setRequestProperty(“user-agent”,”Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)”);//发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);//获取URLConnection对象对应的输出流out=newPrintWriter(conn.getOutputStream());//发送请求参数out.print(param);//flush输出流的缓冲out.flush();//定义BufferedReader输入流来读取URL的响应in=newBufferedReader(newInputStreamReader(conn.getInputStream()));Stringline;while((line=in.readLine())!=null){result+=line;}}catch(Exceptione){System.out.println(“发送POST请求出现异常!”+e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally{try{if(out!=null){out.close();}if(in!=null){in.close();}}catch(IOExceptionex){ex.printStackTrace();}}returnresult;}}我们设置好数据库和持久层即可将数据存入数据库就完成了。

E企盈系统专业开发:万商直播系统开发,直播系统,直播平台系统源码,小程序直播,商城版小程序,分销小程序,小程序定制,微分销,微商,微信分销,微信分销商城,微信分销系统,微信分销管理,微信分销平台,微商代理系统,E企盈是专业的直播小,E企盈是专业的直播小程序,公众号分销系统,营销系统,社群私域流量卖货系统技术开发商,热线:4006-838-530
赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 小程序如何获取用户信息
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

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

支付宝扫一扫打赏

微信扫一扫打赏