微信小程序公眾號模板消息發送


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