|
@@ -0,0 +1,145 @@
|
|
|
+package com.miaxis.wx.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.img.ImgUtil;
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+import cn.hutool.extra.qrcode.QrCodeUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.miaxis.common.utils.http.HttpUtils;
|
|
|
+import com.miaxis.common.utils.wx.MessageUtil;
|
|
|
+import com.miaxis.feign.dto.WxTicket;
|
|
|
+import com.miaxis.feign.service.IWxMpService;
|
|
|
+import com.miaxis.feign.service.IWxSendService;
|
|
|
+import com.miaxis.wx.service.IWxMessageEvenService;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.awt.*;
|
|
|
+import java.io.File;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author wwl
|
|
|
+ * @version 1.0
|
|
|
+ * @date 2021/10/27 14:35
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class WxMessageEvenServiceImpl implements IWxMessageEvenService {
|
|
|
+
|
|
|
+ private final RedisTemplate redisTemplate;
|
|
|
+
|
|
|
+ private final IWxMpService wxMpService;
|
|
|
+
|
|
|
+ private final IWxSendService wxSendService;
|
|
|
+
|
|
|
+ @Value("${file.ticketPath}")
|
|
|
+ private String ticketPath;
|
|
|
+
|
|
|
+ @Value("${wxgzh.materialUrl}")
|
|
|
+ private String materialUrl;
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 扫码关注事件
|
|
|
+ * @param fromUserName 发送方帐号(一个OpenID)
|
|
|
+ * @param toUserName 开发者微信号
|
|
|
+ * @param Ticket 二维码的ticket
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String scanSubscribeEvent(String fromUserName,String toUserName, String Ticket) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * click获取分销二维码事件
|
|
|
+ * @param fromUserName 发送方帐号(一个OpenID)
|
|
|
+ * @param toUserName 开发者微信号
|
|
|
+ * @param token 凭证
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String gainTicketEvent(String fromUserName,String toUserName,String token) {
|
|
|
+
|
|
|
+ //生成带参数二维码ticket
|
|
|
+ WxTicket wxTicket = new WxTicket();
|
|
|
+ wxTicket.setExpire_seconds(2592000);//30天
|
|
|
+ wxTicket.setAction_name("QR_SCENE");
|
|
|
+ JSONObject jsonObject1 = new JSONObject();
|
|
|
+ JSONObject jsonObject2 = new JSONObject();
|
|
|
+ jsonObject1.put("scene_id","123");
|
|
|
+ jsonObject2.put("scene",jsonObject1);
|
|
|
+ wxTicket.setAction_info(jsonObject2);
|
|
|
+ String wxTicketResult = wxSendService.generateTicket(token,wxTicket);
|
|
|
+ JSONObject jsonStr = JSONObject.parseObject(wxTicketResult);
|
|
|
+ log.info("---------ticket-------" + wxTicketResult);
|
|
|
+
|
|
|
+ //根据ticket生成二维码图片存储
|
|
|
+ File ticketFile = QrCodeUtil.generate(
|
|
|
+ jsonStr.getString("url"), //二维码内容
|
|
|
+ 300, 300,
|
|
|
+ FileUtil.file(ticketPath + fromUserName + ".jpg")//写出到的文件
|
|
|
+ );
|
|
|
+
|
|
|
+ ImgUtil.pressImage(
|
|
|
+ FileUtil.file(ticketPath+"jinpai.jpg"),
|
|
|
+ FileUtil.file(ticketPath+fromUserName+"_img.jpg"),
|
|
|
+ ImgUtil.read(FileUtil.file(ticketPath+fromUserName+".jpg")), //水印图片
|
|
|
+ 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
|
|
|
+ -360, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
|
|
|
+ 1.0f
|
|
|
+ );
|
|
|
+
|
|
|
+ ImgUtil.pressText(
|
|
|
+ FileUtil.file(ticketPath+fromUserName+"_img.jpg"),
|
|
|
+ FileUtil.file(ticketPath+fromUserName+"_text.jpg"),
|
|
|
+ "openid:"+fromUserName, Color.red, //文字
|
|
|
+ new Font("黑体", Font.BOLD, 60), //字体
|
|
|
+ 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移
|
|
|
+ 400, //y坐标修正值。 默认在中间,偏移量相对于中间偏移
|
|
|
+ 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ try {
|
|
|
+ File textFile = new File(ticketPath + fromUserName+"_text.jpg");
|
|
|
+ //上传素材
|
|
|
+ String path = materialUrl + token + "&type=image";
|
|
|
+ String result = HttpUtils.connectHttpsByPost(path,textFile);
|
|
|
+ result = result.replaceAll("[\\\\]", "");
|
|
|
+ JSONObject resultJSON = JSONObject.parseObject(result);
|
|
|
+ log.info("------result:" + resultJSON);
|
|
|
+
|
|
|
+ //上传完成删除服务器文件
|
|
|
+ File imgFile = new File(ticketPath + fromUserName+"_img.jpg");
|
|
|
+ if (ticketFile.exists() && imgFile.exists() && textFile.exists()) {
|
|
|
+ if (ticketFile.delete()) {
|
|
|
+ log.info("删除:" + ticketFile.getName() + "成功!");
|
|
|
+ } else {
|
|
|
+ log.info("删除:" + ticketFile.getName() + "失败!");
|
|
|
+ }
|
|
|
+ if (imgFile.delete()) {
|
|
|
+ log.info("删除:" + imgFile.getName() + "成功!");
|
|
|
+ } else {
|
|
|
+ log.info("删除:" + imgFile.getName() + "失败!");
|
|
|
+ }
|
|
|
+ if (textFile.delete()) {
|
|
|
+ log.info("删除:" + textFile.getName() + "成功!");
|
|
|
+ } else {
|
|
|
+ log.info("删除:" + textFile.getName() + "失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return MessageUtil.initImage(fromUserName,toUserName,resultJSON.getString("media_id"));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.info("-----异常------click获取分销二维码事件");
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|