提交 65ca1ece 作者: zhenjie

公众号用户同步功能

上级 48cb015d
......@@ -97,4 +97,18 @@ public class WxController extends BaseController {
public ResultBody rid(@RequestParam String rid) throws Exception {
return wxService.rid(rid);
}
@ApiOperation(value = "同步微信公众号用户")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("moveSubUserToTest")
public ResultBody moveSubUserToTest() {
return wxService.moveSubUserToTest();
}
@ApiOperation(value = "同步微信公众号用户unionId")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("moveSubUserUnionIdToTest")
public ResultBody moveSubUserUnionIdToTest() {
return wxService.moveSubUserUnionIdToTest();
}
}
......@@ -50,6 +50,13 @@ public interface WxService {
String getSubAccessToken();
/**
* 获取公众号稳定版accessToken
*
* @return
*/
String getSubStableAccessToken();
/**
* 监控微信公众号的事件变化通知
*
* @param request
......@@ -97,4 +104,8 @@ public interface WxService {
String getUserPhoneNumber(Integer id, String code);
ResultBody rid(String rid) throws Exception;
ResultBody moveSubUserToTest();
ResultBody moveSubUserUnionIdToTest();
}
package com.mmc.iuav.user.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.mmc.iuav.http.HttpHelper;
import com.mmc.iuav.http.HttpsRequestUtil;
......@@ -26,6 +27,7 @@ import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -134,6 +136,35 @@ public class WxServiceImpl implements WxService {
}
@Override
public String getSubStableAccessToken() {
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.SHARE_FLY_SUB_STABLE_ACCESS_TOKEN);
if (StringUtils.isBlank(accessToken)) {
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "client_credential");
params.put("appid", userSystemConstant.getWxSubAppId());
params.put("secret", userSystemConstant.getWxSubSecret());
String res = null;
try {
res = HttpsRequestUtil.httpsRequest("https://api.weixin.qq.com/cgi-bin/stable_token", "POST", null, JSONObject.toJSONString(params));
} catch (Exception e) {
e.printStackTrace();
}
JSONObject tokenResult = JSONObject.parseObject(res);
if (res.indexOf("access_token") == -1) {
log.info("获取公众号access_token有误:{}", tokenResult);
return null;
}
accessToken = tokenResult.getString("access_token");
long expiresIn = tokenResult.getLong("expires_in");
//保存进redis
stringRedisTemplate.opsForValue().set(WxConstant.SHARE_FLY_SUB_STABLE_ACCESS_TOKEN, accessToken, expiresIn, TimeUnit.SECONDS);
return accessToken;
}
return accessToken;
}
@Override
public String receiveSubAccountEvents(HttpServletRequest request) {
try {
Map<String, String> map = this.convertRequestToMap(request);
......@@ -318,4 +349,55 @@ public class WxServiceImpl implements WxService {
String res = HttpHelper.httpPost(url, param.toString());
return ResultBody.success(res);
}
@Override
public ResultBody moveSubUserToTest() {
String accessToken = this.getSubStableAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken;
String jsonStr = HttpsRequestUtil.httpsGet(url, null);
log.info("all users:{}", jsonStr);
JSONObject obj = JSONObject.parseObject(jsonStr);
List<String> lists = JSONArray.parseArray(obj.getJSONObject("data").get("openid").toString(), String.class);
int count = 0;
for (String openid : lists) {
Integer integer = userSubInfoDao.countUserSubInfo(openid);
if (integer == 0) {
count++;
UserSubInfoDO sub = new UserSubInfoDO();
sub.setOpenId(openid);
sub.setRegStatus(1);
sub.setDeleted(0);
sub.setCreateTime(new Date());
userSubInfoDao.insertUserSubInfo(sub);
}
}
log.info("User count: {}", count);
return ResultBody.success();
}
@Override
public ResultBody moveSubUserUnionIdToTest() {
String accessToken = this.getSubStableAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&next_openid=" + "oB6kk6tIoPLdaHGVv3oImiCVpyVw";
String jsonStr = HttpsRequestUtil.httpsGet(url, null);
log.info("all users:{}", jsonStr);
JSONObject obj = JSONObject.parseObject(jsonStr);
List<String> lists = JSONArray.parseArray(obj.getJSONObject("data").get("openid").toString(), String.class);
int count = 0;
for (String openid : lists) {
UserSubInfoDO userSubInfo = userSubInfoDao.getUserSubInfo(openid);
if (userSubInfo != null) {
String InfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + accessToken + "&openid=" + openid
+ "&lang=zh_CN";
String jsonStr1 = HttpsRequestUtil.httpsGet(InfoUrl, null);
JSONObject obj1 = JSONObject.parseObject(jsonStr1);
userSubInfo.setUnionId(obj1.getString("unionid"));
userSubInfo.setRegStatus(1);
userSubInfoDao.updateUserSubInfo(userSubInfo);
}
}
log.info("User count: {}", count);
return ResultBody.success();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论