package com.ruoyi.goods.controller.inner;
|
|
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
|
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData;
|
import cn.binarywang.wx.miniapp.bean.WxMaTemplateMessage;
|
import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.alipay.api.AlipayApiException;
|
import com.alipay.api.AlipayClient;
|
import com.alipay.api.DefaultAlipayClient;
|
import com.alipay.api.CertAlipayRequest;
|
import com.alipay.api.AlipayConfig;
|
import com.alipay.api.domain.AlipayOpenAppMiniTemplatemessageSendModel;
|
import com.alipay.api.response.AlipayOpenAppMiniTemplatemessageSendResponse;
|
import com.alipay.api.request.AlipayOpenAppMiniTemplatemessageSendRequest;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.ruoyi.common.core.constant.SecurityConstants;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.common.security.annotation.InnerAuth;
|
import com.ruoyi.goods.domain.GoodsSeckillAppointment;
|
import com.ruoyi.goods.domain.MemberGoodsCollection;
|
import com.ruoyi.goods.mapper.GoodsSeckillMapper;
|
import com.ruoyi.goods.mapper.GoodsSkuMapper;
|
import com.ruoyi.goods.service.IGoodsSeckillAppointmentService;
|
import com.ruoyi.goods.service.IMemberGoodsCollectionService;
|
import com.ruoyi.goods.service.impl.MemberGoodsCollectionServiceImpl;
|
import com.ruoyi.goods.utli.HttpUtils;
|
import com.ruoyi.system.api.domain.GoodsSeckill;
|
import com.ruoyi.system.api.domain.GoodsSku;
|
import com.ruoyi.system.api.domain.Member;
|
import com.ruoyi.system.api.feignClient.MemberClient;
|
import me.chanjar.weixin.common.error.WxErrorException;
|
import org.apache.http.HttpResponse;
|
import org.apache.http.client.HttpClient;
|
import org.apache.http.client.utils.HttpClientUtils;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 会员收藏普通商品 前端控制器
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-05-27
|
*/
|
@RestController
|
@RequestMapping("/member-goods-collection")
|
public class MemberGoodsCollectionController {
|
|
private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token";
|
|
private static final String WX_APPID = "wx69e3ac6e13a889b7";
|
|
private static final String WX_SECRET = "1b8bcfcb681524ac553e72054e5271ef";
|
|
|
/**
|
* appID
|
**/
|
private static final String APP_ID_PROD = "2021004150664294";
|
/**
|
* 私钥
|
*/
|
private static final String APP_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC3ap1qQ5GTe+syB8Tu/fH8nRdpjA7yNgLINR/kFq1VFzxDref7DQDUDWXt+s5QZyBjL1UfbQWtA96F+OpgmIiNMdZSn9FH/w5XSqSd7B4nAa1sgfdLdZDvm+crqzn8OzyEJTrO8tihF+9K+btBl37s3QfmmzCRl1PAAMGqfy/JcQ2aivY+hxb25V0kD5AAXM7mVC2zzcBrykzafQCXEnDC7ls4Hjy0agmq1bKSx8SLYTsXAzZiGk9E7yh76nDAB+P1+kKPEYJXociU3k4YRR7l+6tzBPd+/mVkL34nuV5IiAK/795CrP/9gC50nZK/6CqSPDlQlOaAaJ2uZvAOeKx3AgMBAAECggEAMzw5+swjJ0KvYYtgDK6tYTZ0qswwBKLnxgto/CsFgkZ6VCGJMszgFVwkxASSi00zc+Ft8thehIUXLO9qcU9Knb51MyFnsafi1qmIMIEbryO90RjA/rg5o2U2fzFWgkn9zqAjvFmEAAQSmSwHjfwGvZ3Erjtdpt3RzEmpz7m1nJxYuZ2JLdo8AIY+iYn1NeDxHMi27RtqsZje7RV5YXrqKtMMzW2atmj+Dbn/E1pxpF0Dz6l0TqQh5B+9j1XlPTZKcYOYHNI0ACV+dV1NZsqmdhX0lKtQbsj/Q67vhq7uCmQRKcEka/5Z0X/TOKbwJE6i2/YEuA4PUGLpBMZQXhSGYQKBgQD50IuUTG6fg1dqFt9bJXxq2i1lkIHvzaCkHqVnTMyTDs+VcO2S6YaAFy6BLSI933qvHLogkhqnHiN+BRHe/M5+4TAOx30SQlJYa5ojpNFwMnRSZgxLoEddwlfj6qTnCgDW3CsUPR85x85NjIhONy75muNnNG8GHdn3blk2Y7KhpwKBgQC79TQhz5eJ6cwiWPWMWnnSAVvFKW4iPZjkbk+Sl7JXuqzvsdE47gGN0Vk8iYWEc2WrnQY6vf7WnamQYi+Gr5ySfTSt9qwvRx0IRzHdSZkOsHJLBCnAt+Pf+pSBc2Z788iUXVbDRAIfF6YYG44P3jHspbnGPJt14PP0sHbPmh7YsQKBgGzGGYChJyndjpprCyYs1FfSWCH5IhrAdkn/7hVko08FC+4OFeP6Os5bSayFcntua4UEBSdZdrF9tgaRPo7RlTg55SsKQbNJnYFSmPMcOPWZgny+YmwrheeVT5+188eF24eypi9Rzd7i2Tl7D36/GH0mrA2sDwuiw92w9rdwAb/RAoGAf6RDZPqvNI87e8/h4RDITd9yTPCXxFUEcYygKTMvf/hb3ONq7DhlgcO70CqsK4iacPLP+jBw0Zp8PnsPP24e7DRvA/zSbcDjbG285URH1vvogh0vpZq7+60WENsnq+GgQ3EnrK+QqUDMIO8FiK0iRk09XexmvqSnx3HXHaDSdeECgYB9htO5mOn2/ugIeMw11g+JJkZ/hzE55/6fLf7zh3yel5EflmAdYRv0lHafjyXIzNrAnBgD95x4LKGLi9A5AMo9SJJu0ZOg1KujKPVY4ByCm9SO7ErJDuHI4AhtewdHhYDpnXMakoxm/medSjlt7GCVv7E/eDpNZs+MLi9MiTFx2g==";
|
/**
|
* 支付宝公钥
|
*/
|
private static final String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlW2RMACojdqTa8H+j6411Lm5UipGXXbQiswq50rUflwjTj843zNVaVpk8uJmbdmtUBJlmblgBS/a31O4L4LrHB8WxJ+w0f9DBNTq9T6b80MiAVnU/3gXK365DmbzPWS5pR9wEgJVHnfOFUbsB5AVFHV0m9hUZcPv7xveuEp3BEoD5smaDJByR+KgFw0Q0JgINhhE6bsEa3UgJ198af269LtQ5HJl1TWLI8aeqW14HrxyADIt49NB9KZ8MOdKP+66HWcrXlipKFHtccy3dff72DqPmFdESoXfLXKZyhU5w9v4Q5F6UoAGTPwl9KQwikTobNeJ/7su7X3AB6+C14J4sQIDAQAB";
|
|
|
@Resource
|
private IGoodsSeckillAppointmentService iGoodsSeckillAppointmentService;
|
|
@Resource
|
private MemberClient memberClient;
|
|
@Resource
|
private GoodsSeckillMapper goodsSeckillMapper;
|
@Resource
|
private GoodsSkuMapper goodsSkuMapper;
|
|
@InnerAuth
|
@GetMapping("/tusonUser/{tusonUserId}")
|
R<?> tusonUser(@PathVariable("tusonUserId") Long tusonUserIdId){
|
GoodsSeckill goodsSeckill = goodsSeckillMapper.selectById(tusonUserIdId);
|
LambdaQueryWrapper<GoodsSeckillAppointment> wrapper3= Wrappers.lambdaQuery();
|
wrapper3.eq(GoodsSeckillAppointment::getGoodsSeckillId,tusonUserIdId);
|
List<GoodsSeckillAppointment> list = iGoodsSeckillAppointmentService.list(wrapper3);
|
for (GoodsSeckillAppointment li:list) {
|
Member data = memberClient.getMembeOne(li.getMemberId(), SecurityConstants.INNER).getData();
|
|
GoodsSku goodsSku = goodsSkuMapper.selectById(goodsSeckill.getGoodsSkuId());
|
if (data.getZfbOpenid()!=null){
|
try {
|
push1(data.getZfbOpenid(),li.getFormId(),goodsSku.getSkuName(),goodsSeckill.getSeckillPrice(),goodsSeckill.getStartTime());
|
} catch (AlipayApiException e) {
|
throw new RuntimeException(e);
|
}
|
}if (data.getMiniOpenid()!=null){
|
push(data.getMiniOpenid(),li.getFormId(),goodsSku.getSkuName(),goodsSeckill.getSeckillPrice(),goodsSeckill.getStartTime());
|
}
|
}
|
|
|
return R.ok();
|
}
|
|
|
public String push1 (String openid, String formid, String skuName, BigDecimal seckillPrice, LocalDateTime startTime) throws AlipayApiException {
|
|
AlipayConfig alipayConfig = new AlipayConfig();
|
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
|
alipayConfig.setAppId("APP_ID_PROD");
|
alipayConfig.setPrivateKey(APP_PRIVATE_KEY);
|
alipayConfig.setFormat("json");
|
alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY);
|
alipayConfig.setCharset("UTF8");
|
alipayConfig.setSignType("RSA2");
|
AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
|
AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
|
AlipayOpenAppMiniTemplatemessageSendModel model = new AlipayOpenAppMiniTemplatemessageSendModel();
|
model.setFormId(formid);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
model.setData("{\"keyword1\": {\"value\" : \""+skuName+"\"},\"keyword2\": {\"value\" : \""+seckillPrice+"\"},\"keyword3\": {\"value\" : \""+startTime.format(formatter)+"\"}}");
|
model.setPage("page/component/index");
|
model.setUserTemplateId("1b6b60e0511a40b49197e83ed3d74fb2");
|
model.setToUserId(openid);
|
request.setBizModel(model);
|
AlipayOpenAppMiniTemplatemessageSendResponse response = alipayClient.execute(request);
|
System.out.println(response.getBody());
|
if (response.isSuccess()) {
|
System.out.println("调用成功");
|
} else {
|
System.out.println("调用失败");
|
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
|
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
|
// System.out.println(diagnosisUrl);
|
}
|
return null;
|
}
|
|
/**
|
* 发送消息
|
* @param template_id 所需下发的订阅模板id
|
* @param page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转
|
* @param touser 接收者(用户)的 openid
|
* @param data 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }的object
|
* @param miniprogram_state 跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
|
* @param lang 进入小程序查看”的语言类型,支持zh_CN(简体中文)、en_US(英文)、zh_HK(繁体中文)、zh_TW(繁体中文),默认为zh_CN
|
* @return
|
*/
|
public String push(String openid, String formid, String skuName, BigDecimal seckillPrice, LocalDateTime startTime) {
|
|
//1,配置小程序信息
|
|
String accessToken = null;
|
try {
|
accessToken = getAccessTokenByWX();
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
JSONObject jsonObject = JSONObject.parseObject(accessToken);
|
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+jsonObject.get("access_token");
|
Map<String, Object> params = new HashMap<>();
|
params.put("template_id", "NHmHEbK8SjzafWgnErAxNR0b2XJzSehv2kPqbQefolU");
|
params.put("page", null);
|
params.put("touser", openid);
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm");
|
String data = "{\"thing1\":{\"value\":\""+skuName+"\"},\"amount3\":{\"value\":\""+seckillPrice.toString()+"\"}"+
|
",\"time4\":{\"value\":\""+startTime.format(formatter)+"\"}"+
|
",\"thing5\":{\"value\":\"优质老酒限时秒杀即将开始!点击参与秒杀哈\"}}";
|
|
params.put("data", JSON.parseObject(data));
|
params.put("miniprogram_state", "trial");
|
params.put("lang", "zh_CN");
|
try {
|
Map<String, Object> payloadMapData = JSONObject.parseObject(HttpUtils.httpPost(url, JSONObject.toJSONString(params)));
|
if (payloadMapData.containsKey("errCode")) {
|
System.out.println("返回code码:"+payloadMapData.get("errCode").toString());
|
}
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
|
/* WxMaInMemoryConfig wxConfig = new WxMaInMemoryConfig();
|
wxConfig.setAppid("wx69e3ac6e13a889b7");//小程序appid
|
|
wxConfig.setSecret("1b8bcfcb681524ac553e72054e5271ef");//小程序AppSecret
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
WxMaService wxMaService = new WxMaServiceImpl();
|
|
wxMaService.setWxMaConfig(wxConfig);
|
String responseAccessToken=null;
|
try {
|
responseAccessToken = getAccessTokenByWX();
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
|
|
//2,设置模版信息(keyword1:类型,keyword2:内容)
|
|
|
List<WxMaTemplateData> templateDataList = new ArrayList<>(4);
|
|
WxMaTemplateData data1 = new WxMaTemplateData("thing1", skuName);
|
|
WxMaTemplateData data2 = new WxMaTemplateData("amount3", seckillPrice.toString());
|
|
WxMaTemplateData data3 = new WxMaTemplateData("thing4", startTime.format(formatter));
|
|
WxMaTemplateData data4 = new WxMaTemplateData("thing5","优质老酒限时秒杀即将开始!点击参与秒杀哈");
|
|
templateDataList.add(data1);
|
|
templateDataList.add(data2);
|
|
templateDataList.add(data3);
|
|
templateDataList.add(data4);
|
|
|
|
//3,设置推送消息
|
|
WxMaTemplateMessage templateMessage = WxMaTemplateMessage.builder()
|
|
.toUser(openid)//要推送的用户openid
|
|
.formId(formid)//收集到的formid
|
|
.templateId("NHmHEbK8SjzafWgnErAxNR0b2XJzSehv2kPqbQefolU")//推送的模版id(在小程序后台设置)
|
|
.data(templateDataList)//模版信息
|
|
.page("pages/index/index")//要跳转到小程序那个页面
|
|
.build();
|
|
//4,发起推送
|
|
try {
|
wxMaService.getMsgService().sendTemplateMsg(templateMessage);
|
|
} catch (WxErrorException e) {
|
|
System.out.println("推送失败:" + e.getMessage());
|
|
return e.getMessage();
|
|
}
|
*/
|
return "推送成功";
|
|
}
|
|
public static String getAccessTokenByWX() throws Exception {
|
String host = ACCESS_TOKEN_HOST + "?appid=" + WX_APPID + "&secret=" + WX_SECRET + "&grant_type=client_credential";
|
Map<String, String> headers = new HashMap<>(8);
|
HttpResponse response = HttpUtils.doGet(host, "", "GET", headers, null);
|
return EntityUtils.toString(response.getEntity());
|
}
|
|
}
|