这篇主要是用来记录具体实现方法的,算是在网上查了很久东拼西凑的半成品吧,为什么是半成品呢,因为没有对数据进行分类,算是做了一半,因为我想用的unionID但是这个方法只能获取openID,所以就不想做全了,验证可以获取数据就ok了,剩下的是比较简单的问题。
直接上代码 微信小程序端js
suibianshenme:function(){
//第一步获取授权,得到用户的openid和unionid
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
wx.login({
success: res =>{
let code = res.code //这里获取的就是登陆的code,可以传送给后端来换取openid和unionid
wx.request({
url: 'https://你服务器的链接',
data:{
code:code
},
method:'GET',
header:{
'content-type':'application/json'
},
success (res) {
console.log(res); //这里获取的res中就有你要的信息了,我只得到了openid
},
fail:function(res){
console.log("失败了");
}
})
}
})
}
})
}
微信端就这么简单,因为getUserInfo做了修改不能直接用了,所以改用了getUserProfile,获取授权,然后wx.login用来获取code,然后用wx.request把这个code传给后端的服务器,服务器再根据这个code获取到我想要的用户信息,包含openid、unionid,(但是我只获取到了openid)
下面是java后端SSM下的Controller层代码
@ResponseBody
@RequestMapping(value="wxhqsq.action",produces = "text/plain;charset=utf-8")
public String getUid(String code,HttpServletRequest request) {
String appid="你的微信小程序appID";
String appsecret="你的微信小程序appSecret";
//code就是传进来的参数code
//下面这个链接就是用来返回数据的接口地址
String url="https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+appsecret+"&js_code="+code+"&grant_type=authorization_code";
//进行网络请求
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
//根据返回值进行后续操作
if(responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
String sessionData = responseEntity.getBody();
return sessionData;
}else {
return "nothing to got";
}
}
你可以在后端把获得的sessionData用Json处理一下然后把有用的数据传回前端,这里就不写了。
用这个方法比较好的地方就是不需要解码,可以直接获取openid等数据。我看看是不是有什么地方不对,为什么没有unionid,然后再更。
|