这个非常简单苦于网上资料杂乱,弄了半天
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code) {
wx.request({
url: ‘http://localhost:8080/cis’,
data: {
code: res.code
},
header: {
‘content-type’: ‘application/x-www-form-urlencoded’
},
success(res) {
console.log(“openid:” + res.data.openid);
if (res.data.openid != “” || res.data.openid != null) {
// 登录成功
wx.setStorageSync(“openid”, res.data.openid);//将用户id保存到缓存中
wx.setStorageSync(“session_key”, res.data.session_key);//将session_key保存到缓存中
} else {
// 登录失败
// TODO 跳转到错误页面,要求用户重试
return false;
}
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
})
code是从前端传过来的 每次不一样
然后是后端
先导两个依赖 一定要导进来
<!--https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
<!--http requset-->
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version>
</dependency>
package cn.com.doone.sc.tx.cloud.dyb.system.controller.openId;
import cn.com.doone.sc.tx.cloud.dyb.common.tool.vo.RequestMessage;
import cn.com.doone.sc.tx.cloud.dyb.common.tool.vo.ResponseMessage;
import cn.com.doone.sc.tx.cloud.dyb.system.bean.po.code.CodePo;
import cn.com.doone.sc.tx.cloud.dyb.system.service.openId.WeChatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
-
@Auther: liufei
-
@Date: 2020/5/9 14:40
-
@Description:
*/
@RestController
public class WeChatController {@Autowired
private WeChatService weChatService;@PostMapping("/getOpenid")
public ResponseMessage getOpenid(@RequestBody RequestMessage requestMessage){
String code = requestMessage.getBody().getCode();
return weChatService.getOpenid(requestMessage);
}
}
package cn.com.doone.sc.tx.cloud.dyb.system.service.openId;
import cn.com.doone.sc.tx.cloud.dyb.common.tool.vo.RequestMessage;
import cn.com.doone.sc.tx.cloud.dyb.common.tool.vo.ResponseMessage;
import cn.com.doone.sc.tx.cloud.dyb.system.bean.po.code.CodePo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.kevinsawicki.http.HttpRequest;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
/**
-
@Auther: liufei
-
@Date: 2020/5/9 15:14
-
@Description:
/
@Service
public class WeChatService {
private final static String APPID=“wx76de200fe69b5878”;
/ private final static String APPID=“wxd7878dbde55f0312”;/
private final static String SECRET_KEY=“9a21fd33bc58c12deb919371e6a69596”;
/ private final static String SECRET_KEY=“33c0aeeb77f5467a2a8d8e628ca697c7”;*/public ResponseMessage getOpenid(RequestMessage requestMessage) {
Map<String, String> data = new HashMap<String, String>();
data.put(“appid”, APPID);
data.put(“secret”, SECRET_KEY);
data.put(“js_code”, requestMessage.getBody().getCode());
data.put(“grant_type”, “authorization_code”);
String response = HttpRequest.get(“https://api.weixin.qq.com/sns/jscode2session”).form(data).body();
System.out.println("Response was: " + response);
JSONObject obj= JSON.parseObject(response);//将json字符串转换为json对
return new ResponseMessage().success(obj);
}
}
最后就可以生成对应的sessionId 和openid了
而且每次code不一样 ,可是openid都会一样 很神奇 以后研究一下