使用binary-wang封装的工具包“判断用户是否关注公众号”

本文介绍了如何在Java中利用binary-wang封装的工具包对用户是否关注微信公众号进行验证,涉及到了WxMpUser和WxMpService类的调用,以及WxMpProperties配置的使用。

使用binary-wang封装的工具包“判断用户是否关注公众号”

//关注验证
private boolean validWatch(String openId, String appId) {
    WxMpUser wxUser = userBaseInfo(openId, appId);
    if (wxUser != null) {
        return wxUser.getSubscribe();
    }
    return false;
}
/**
 * 获取用户信息
 *
 * @param openId
 * @param appId
 * @return
 */
private WxMpUser userBaseInfo(String openId, String appId) {
    WxMpUser wxMpUser = new WxMpUser();
    try {
        WxMpService mpService = WxMpConfiguration.getMpService(appId);
        wxMpUser = mpService.getUserService().userInfo(openId);
        return wxMpUser;
    } catch (Exception e) {
        log.error("获取微信用户【】错误" + e.getMessage());
    }
    return wxMpUser;
}
@Configuration
@AllArgsConstructor
@EnableConfigurationProperties(WxMpProperties.class)
public class WxMpConfiguration {
    
    private static WxMpProperties properties ;

    @Autowired
    public void setProperties(WxMpProperties properties) {
        WxMpConfiguration.properties = properties;
    }

    private static Map<String, WxMpService> mpServices = Maps.newHashMap();
    public static Map<String, WxMpService> getMpServices() {
        return mpServices;
    }

    public static WxMpService getMpService(String appId) {
//        List<WxMpProperties.MpConfig> configs = properties.getConfigs();
//        WxMpProperties.MpConfig mpConfig = configs.get(0);
//        String appId = mpConfig.getAppId();
        return getMpServices().get(appId);
    }
@ConfigurationProperties(prefix = "wx.mp")
@Data
public class WxMpProperties {

    private List<MpConfig> configs;

    public static class MpConfig {
        /**
         * 设置微信公众号的appid
         */
        private String appId;

        /**
         * 设置微信公众号的app secret
         */
        private String secret;

        /**
         * 设置微信公众号的token
         */
        private String token;

        /**
         * 设置微信公众号的EncodingAESKey
         */
        private String aesKey;

        public String getAppId() {
            return appId;
        }

        public void setAppId(String appId) {
            this.appId = appId;
        }

        public String getSecret() {
            return secret;
        }

        public void setSecret(String secret) {
            this.secret = secret;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public String getAesKey() {
            return aesKey;
        }

        public void setAesKey(String aesKey) {
            this.aesKey = aesKey;
        }
    }

    public List<MpConfig> getConfigs() {
        return configs;
    }

    public void setConfigs(List<MpConfig> configs) {
        this.configs = configs;
    }

    @Override
    public String toString() {
        return JsonUtils.toJson(this);
    }
}
### 如何在 WxJava 中实现二进制消息发送 为了实现在 `WxJava` 项目中发送二进制消息的功能,可以遵循以下方法: #### 准备工作 确保已经配置好基于 Spring Boot 的环境并引入了必要的依赖项。对于微信支付 Java 后端 Demo 来说,这通常意味着项目的构建文件(如 Maven 或 Gradle 文件)已包含了所需的库[^1]。 #### 创建工具类用于处理加密摘要算法 由于涉及到安全传输,可能需要用到哈希函数来计算校验和或其他形式的安全验证。这里给出一段简单的 MD5 计算代码作为例子,尽管实际应用中可能会采用更复杂的机制[^2]: ```java public class DigestUtils { public static String md5(String input){ try{ MessageDigest md = MessageDigest.getInstance("MD5"); byte[] messageDigest = md.digest(input.getBytes()); StringBuilder hexString = new StringBuilder(); for (byte b : messageDigest) { String hex = Integer.toHexString(0xFF & b); if(hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e){ throw new RuntimeException(e); } } } ``` #### 发送二进制消息的具体操作 要通过微信公众平台 API 推送二进制数据给用户,一般情况下是将这些数据封装成多媒体素材上传至微信服务器,然后再调用相应的接口将其下发给指定接收者。以下是简化版的消息推送逻辑框架,具体细节需参照官方文档进行调整[^4]: ```java // 假设已经有了有效的 accessToken 和 mediaId (即之前上传得到的媒体资源 ID) String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + accessToken; Map<String, Object> jsonMessage = new HashMap<>(); jsonMessage.put("touser", openId); // 用户唯一标识符 jsonMessage.put("msgtype", "image"); // 此处假设为图片类型的消息 Map<String, String> imageInfo = Collections.singletonMap("media_id", mediaId); jsonMessage.put("image", imageInfo); ObjectMapper mapper = new ObjectMapper(); String requestBody = mapper.writeValueAsString(jsonMessage); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); HttpEntity<String> entity = new HttpEntity<>(requestBody, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class); if ("ok".equals(response.getBody())) { System.out.println("成功发送!"); } else { System.err.println("失败:" + response.getBody()); } ``` 上述代码片段展示了如何利用 RESTful HTTP 请求的方式向特定用户发送一条包含图像链接的信息。请注意,在真实环境中还需要考虑错误重试策略、异常捕获等问题,并严格遵守微信开放平台的相关规定[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值