微信小程序公众号模板消息发送


vo类

package cn.eangaie.appcloud.entity.config;

/**
 * @Author Ean
 * @Description 公众号消息模板id配置类
 * @Date 2021/11/1
 */
public class ConfigGZH {

    public static String miniAppId="wx1868eca79c502fdf";

    public static String gzhAppId="wx114f4fd146d9d315";
}
package cn.eangaie.appcloud.entity.vo;

import lombok.Data;

/**
 * @ClassName MpTemplateMsg
 * @Author Eangaie
 * 公众号模板消息相关的信息,可以参考公众号模板消息接口;有此节点并且没有weapp_template_msg节点时,发送公众号模板消息
 * DATE 2021/5/24 0024 11:32
 * @Version 1.0
 **/
@Data
public class MpTemplateMsg {

    /*公众号appid,与小程序互相绑定*/
    String appid;
    /*公众号模板id*/
    String template_id;
    /*公众号模板消息所要跳转的url*/
    String url;
    /*公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系*/
    JSONObject miniprogram;
    /*公众号模板消息的数据*/
    JSONObject data;


}

服务实现类

package cn.eangaie.appcloud.service.impl;

import cn.eangaie.appcloud.entity.config.ConfigGZH;
import cn.eangaie.appcloud.entity.vo.MpTemplateMsg;
import cn.eangaie.appcloud.service.WechatService;
import cn.eangaie.appcloud.util.AccessTokenUtil;
import cn.eangaie.appcloud.util.HttpClientUtil;
import cn.eangaie.appcloud.util.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName WechatServiceImpl
 * @Author Eangaie
 * DATE 2021/5/18 0018 17:41
 * @Version 1.0
 **/
@Service
@Slf4j
public class WechatServiceImpl implements WechatService {
    @Autowired
    AccessTokenUtil accessTokenUtil;
    String uniformMessageUrl = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";


    /**
     * @return java.lang.String
     * @Author Ean
     * @Description "{\"keyword1\":{\"value\":\"339208499\"},\"keyword2\":{\"value\":\"2015年01月05日12:30\"},\"keyword3\":{\"value\":\"腾讯微信总部\"},\"keyword4\":{\"value\":\"广州市海珠区新港中路397号\"}}"
     * @Date 9:47 2021/8/24 0024
     * @Param [openid, templateId, data]
     **/
    @Override
    public String sendSubscribe(String openid, String templateId, String data) {
        data = data.trim();
        String token = accessTokenUtil.getACCESS_TOKEN().getAccess_token();
        String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + token;
        JSONObject param = new JSONObject();
        param.put("touser", openid);//接收者(用户)的 openid
        param.put("template_id", templateId);//所需下发的订阅模板id
        param.put("page", "pages/index/index");
        param.put("data", JSONObject.parseObject(data));
        String res = HttpUtil.doPostJson(url.trim(), param.toString());
        log.info("订阅消息发送返回{}", res);
        return res;
    }

    /**
     * @param template_id
     * @param url
     * @param miniprogram
     * @param data
     * @return java.lang.String
     * @Author Ean
     * @Description 发送消息
     * @Date 13:30 2021/5/24 0024
     * https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html
     * "{ \"appid\":\""+ConfigGZH.miniAppId+"\", \"pagepath\":\"pages/home/home\" }"
     * "{ \"first\": { \"value\": \"恭喜,您的分销成员成功消费分销产品,你获得分销佣金\", \"color\": \"#173177\" }, \"keyword1\": { \"value\": \"巧克力\", \"color\": \"#173177\" }, \"keyword2\": { \"value\": \"39.8元\", \"color\": \"#173177\" }, \"keyword3\": { \"value\": \"2014年9月22日\", \"color\": \"#173177\" }, \"keyword4\": { \"value\": \"2014年9月22日\", \"color\": \"#173177\" }, \"remark\": { \"value\": \"因资金通道原因,目前提现仅支持手动提现,支付宝转账。后期升级可一键提现。因此带来的不便敬请谅解!\", \"color\": \"#173177\" } }"
     * @Param [template_id, url, miniprogram, data]
     */
    @Override
    public String uniformMessage(String openid, String template_id, String url, String miniprogram, String data) {
        try {
            String reqUrl = uniformMessageUrl;
            reqUrl = reqUrl + "?access_token=" + accessTokenUtil.getACCESS_TOKEN().getAccess_token();
            MpTemplateMsg mpTemplateMsg = new MpTemplateMsg();
            mpTemplateMsg.setAppid(ConfigGZH.gzhAppId);
            mpTemplateMsg.setTemplate_id(template_id);
            mpTemplateMsg.setUrl(url);
            mpTemplateMsg.setMiniprogram(JSONObject.parseObject(miniprogram));
            mpTemplateMsg.setData(JSONObject.parseObject(data));
            String res = null;
            Map<String, Object> param = new HashMap<>();
            param.put("touser", openid);
            param.put("mp_template_msg", mpTemplateMsg);
            Gson gson = new Gson();
            res = HttpUtil.doPostJson(reqUrl, gson.toJson(param));
            return res;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @return java.lang.String
     * @Author Ean
     * @Description 解析微信手机号码
     * @Date 9:39 2021/7/15 0015
     * @Param [sessionKey1, ivData1, encrypData1]
     */
    @Override
    public String decrypt(byte[] key, byte[] iv, byte[] encData) {
        AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
        String data = null;
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            data = new String(cipher.doFinal(encData), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        //解析解密后的字符串
        return data;
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM