提交 80c6aff6 作者: zhenjie

微信公众号相关接口

上级 4c851a27
package com.mmc.iuav.user.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/24 15:09
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserSubInfoDTO implements Serializable {
private static final long serialVersionUID = 152531137248542030L;
@ApiModelProperty(value = "是否关注(0:否 1:是)-关注了才会有其他信息")
private Integer subscribe;
@ApiModelProperty(value = "openId")
private String openId;
@ApiModelProperty(value = "unionId")
private String unionId;
@ApiModelProperty(value = "昵称")
private String nickName;
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.UserSubInfoDO;
import org.apache.ibatis.annotations.Mapper;
/**
* @author: zj
* @Date: 2023/5/24 15:00
*/
@Mapper
public interface UserSubInfoDao {
Integer countUserSubInfo(String openId);
UserSubInfoDO getUserSubInfo(String openId);
UserSubInfoDO getUserSubInfoById(Integer userAccountId);
UserSubInfoDO getUserSubInfoByUnionId(String unionId);
void insertUserSubInfo(UserSubInfoDO subInfo);
void removeUserSubInfo(String openId);
void updateUserSubInfo(UserSubInfoDO subInfo);
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.UserSubInfoDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/24 15:08
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserSubInfoDO implements Serializable {
private static final long serialVersionUID = 8534660282946889549L;
private Integer id;
private String openId;
private String unionId;
private String nickName;
private Integer regStatus;
private Integer deleted;
private Date createTime;
private Date updateTime;
public UserSubInfoDTO buildUserSbuInfoDTO() {
return UserSubInfoDTO.builder().openId(openId).unionId(unionId).subscribe(this.deleted == 0 ? 1 : 0).build();
}
}
......@@ -8,6 +8,8 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.constant.WxConstant;
import com.mmc.iuav.user.dao.UserSubInfoDao;
import com.mmc.iuav.user.entity.UserSubInfoDO;
import com.mmc.iuav.user.model.vo.AppletMsgVO;
import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.model.vo.WxMsgVO;
......@@ -21,6 +23,7 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;
......@@ -36,6 +39,9 @@ public class WxServiceImpl implements WxService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private UserSubInfoDao userSubInfoDao;
@Override
public String appLogin(WxLoginVO wxLoginVO) {
String url = WxConstant.CODE2_SESSION_URL + "?appid=" + userSystemConstant.getWxAppId() + "&secret=" +
......@@ -110,7 +116,7 @@ public class WxServiceImpl implements WxService {
System.out.println("###########取消关注############");
System.out.println("############################");
String openId = map.get("FromUserName");
//userSubInfoDao.removeUserSubInfo(openId);
userSubInfoDao.removeUserSubInfo(openId);
}
} catch (Exception e) {
System.out.println("接收消息异常" + e.getMessage());
......@@ -120,7 +126,20 @@ public class WxServiceImpl implements WxService {
}
private void subScribeUser(Map<String, String> map) {
String openId = map.get("FromUserName");
Integer count = userSubInfoDao.countUserSubInfo(openId);
if (count == 0) {
UserSubInfoDO sub = new UserSubInfoDO();
sub.setOpenId(openId);
sub.setRegStatus(0);
sub.setDeleted(0);
sub.setCreateTime(new Date());
userSubInfoDao.insertUserSubInfo(sub);
// WxRequestVO wq = new WxRequestVO();
// wq.setOpenId(sub.getOpenId());
// publicsher.sendDirectWxRegUser(wq, RabbitMqConfig.USER_WX_ROUTING_KEY);
this.updateWXUserInfo(openId);
}
}
private Map<String, String> convertRequestToMap(HttpServletRequest request) throws Exception {
......@@ -134,6 +153,40 @@ public class WxServiceImpl implements WxService {
return WXPayUtil.xmlToMap(notifyXml);
}
private void updateWXUserInfo(String openid) {
String accessToken = this.getSubAccessToken();
if (StringUtils.isBlank(accessToken)) {
return;
}
try {
String InfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + accessToken + "&openid=" + openid
+ "&lang=zh_CN";
//String jsonStr = HttpsOpenUtil.https(InfoUrl, "GET");// 错误:{"errcode":40013,"errmsg":"invalid appid"}
String jsonStr = HttpsRequestUtil.httpsRequest(InfoUrl, "GET", null, null);
JSONObject obj = JSONObject.parseObject(jsonStr);
// 用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
Integer subscribe = obj.getInteger("subscribe");
if (subscribe != null && subscribe == 1) {
System.out.println("###########access_token##########");
System.out.println(accessToken);
System.out.println("###########用户信息##########");
System.out.println(jsonStr);
UserSubInfoDO user = new UserSubInfoDO();
user.setOpenId(openid);
user.setUnionId(obj.getString("unionid"));
user.setNickName(obj.getString("nickname"));
user.setRegStatus(1);
userSubInfoDao.updateUserSubInfo(user);
return;
} else {
System.out.println("未订阅公众号,无法拉取信息。");
return;
}
}catch (Exception e){
throw new RuntimeException();
}
}
@Override
public ResultBody sendSubTemplateMsg(WxMsgVO ws) {
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.UserSubInfoDao">
<resultMap id="userSubInfoResultMap" type="com.mmc.iuav.user.entity.UserSubInfoDO">
<id property="id" column="id" />
<result property="openId" column="open_id" />
<result property="unionId" column="union_id" />
<result property="nickName" column="nick_name" />
<result property="regStatus" column="reg_status" />
<result property="deleted" column="is_deleted" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
</resultMap>
<select id="getUserSubInfo" resultMap="userSubInfoResultMap" parameterType="String">
select u.id,u.open_id,u.union_id,u.nick_name,u.reg_status,
u.is_deleted,u.create_time,u.update_time
from user_sub_info u
where u.open_id = #{openId}
</select>
<select id="getUserSubInfoById" resultMap="userSubInfoResultMap" parameterType="Integer">
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
from user_account ua
inner join user_sub_info usi on usi.union_id=ua.union_id
where usi.is_deleted=0 and ua.is_deleted=0
and ua.user_account_id = #{userAccountId}
</select>
<select id="getUserSubInfoByUnionId" resultMap="userSubInfoResultMap" parameterType="String">
select usi.id,usi.open_id,usi.union_id,usi.nick_name,usi.is_deleted
from user_sub_info usi
where usi.union_id = #{unionId} and usi.is_deleted=0
</select>
<select id="countUserSubInfo" resultType="Integer" parameterType="String">
select count(*)
from user_sub_info u
where u.open_id = #{openId} and is_deleted = 0
</select>
<insert id="insertUserSubInfo" useGeneratedKeys="true"
keyProperty="id" parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
insert into user_sub_info
(
open_id,union_id,nick_name,reg_status,is_deleted,create_time,update_time
)
values
(
#{openId},#{unionId},#{nickName},#{regStatus},#{deleted},#{createTime},#{updateTime}
)
</insert>
<update id="removeUserSubInfo" parameterType="String">
update user_sub_info
set is_deleted = 1
where open_id = #{openId}
</update>
<update id="updateUserSubInfo"
parameterType="com.mmc.iuav.user.entity.UserSubInfoDO">
update user_sub_info
<set>
<if test="unionId != null and unionId != '' ">
union_id = #{unionId},
</if>
<if test="nickName != null">
nick_name = #{nickName},
</if>
<if test="regStatus != null">
reg_status = #{regStatus},
</if>
</set>
where open_id = #{openId}
</update>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论