updates 抖音新增体育小程序

This commit is contained in:
zhouwentao 2024-07-22 20:42:50 +08:00
parent a05f139797
commit 32aca1b426
4 changed files with 114 additions and 111 deletions

View File

@ -1,17 +1,26 @@
package org.jeecg.modules.api.controller; package org.jeecg.modules.api.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.AssertUtils;
import org.jeecg.modules.yx.entity.YxSportsScore;
import org.jeecg.modules.yx.service.IYxSportsScoreService;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/** /**
* @author ZhouWenTao * @author ZhouWenTao
@ -22,6 +31,9 @@ import javax.servlet.http.HttpServletRequest;
@RequestMapping("/api/static/data") @RequestMapping("/api/static/data")
@Slf4j @Slf4j
public class StaticDataController { public class StaticDataController {
@Resource
private IYxSportsScoreService yxSportsScoreService;
@RequestMapping(value = "/getJson",method = RequestMethod.POST) @RequestMapping(value = "/getJson",method = RequestMethod.POST)
public Result<?> getJson(@RequestBody JSONObject params, HttpServletRequest request){ public Result<?> getJson(@RequestBody JSONObject params, HttpServletRequest request){
String key = params.getStr("key"); String key = params.getStr("key");
@ -51,9 +63,27 @@ public class StaticDataController {
String json = "[{\"value\":\"体育类\",\"label\":\"体育类\",\"scoreMax\":150}]"; String json = "[{\"value\":\"体育类\",\"label\":\"体育类\",\"scoreMax\":150}]";
return Result.OK(JSONArray.parseArray(json)); return Result.OK(JSONArray.parseArray(json));
} }
}
if ("reloadMajorModalMessage".equals(key)) {
case "sportsScore":
// 体育成绩计算器
Integer year = params.getInt("year");
String sex = params.getStr("sex");
BigDecimal sprint = params.getBigDecimal("sprint");// 100米跑
BigDecimal jump = params.getBigDecimal("jump");// 立定跳远
BigDecimal shotPut = params.getBigDecimal("shotPut");// 推铅球
AssertUtils.notNull(sex,"请选择年份");
AssertUtils.notNull(sex,"请选择性别成绩");
AssertUtils.notNull(sprint,"请输入100米跑成绩");
AssertUtils.notNull(jump,"请输入立定跳远成绩");
AssertUtils.notNull(shotPut,"请输入推铅球成绩");
List<BigDecimal> pointsList = new ArrayList<>();
// 100米
pointsList.add(yxSportsScoreService.getSprintPoints(year,sex,sprint));
// 立定跳远
pointsList.add(yxSportsScoreService.getJumpPoints(year,sex,jump));
// 推铅球
pointsList.add(yxSportsScoreService.getShotPutPoints(year,sex,shotPut));
return Result.OK(pointsList);
} }
} }

View File

@ -122,12 +122,13 @@ public class MiniPayApiController {
BigDecimal totalAmount = skuPrice.multiply(YxConstant.bigDecimal100); BigDecimal totalAmount = skuPrice.multiply(YxConstant.bigDecimal100);
// totalAmount = YxConstant.bigDecimal100; // totalAmount = YxConstant.bigDecimal100;
String description = "艺体志愿宝VIP"; String attach = programType;
if (StringUtils.isNotBlank(yxVipSku.getSkuName())) { if (StringUtils.isNotBlank(yxVipSku.getSkuName())) {
description += "-" + yxVipSku.getSkuName(); attach += "-" + yxVipSku.getSkuName();
} }
String description = attach;
if (StringUtils.isNotBlank(yxVipSku.getSkuDetail())) { if (StringUtils.isNotBlank(yxVipSku.getSkuDetail())) {
description += "" + yxVipSku.getSkuDetail(); description = yxVipSku.getSkuDetail();
} }
try { try {
@ -138,18 +139,20 @@ public class MiniPayApiController {
yxOrder.setPaymentUserId(user.getId());//付款人 yxOrder.setPaymentUserId(user.getId());//付款人
yxOrder.setOrderStatus("1"); yxOrder.setOrderStatus("1");
yxOrder.setProvider(provider); yxOrder.setProvider(provider);
yxOrder.setPaymentType(programType); yxOrder.setProgramType(programType);
//判断是抖音平台 还是 微信平台 小程序操作 //判断是抖音平台 还是 微信平台 小程序操作
if ("toutiao".equals(provider)) { if ("toutiao".equals(provider)) {
// 抖音平台
if("体育志愿宝".equals(programType)){ if("体育志愿宝".equals(programType)){
String douyinSign = DouYinUtil.main(douYinTiyuConfig.getAppId(), douYinTiyuConfig.getToken(),douYinTiyuConfig.getNotifyUrl(), douYinTiyuConfig.getSalt(), orderCode, totalAmount.intValue(),yxVipSku.getSkuName(), description); String douyinSign = DouYinUtil.main(douYinTiyuConfig.getAppId(), douYinTiyuConfig.getToken(),douYinTiyuConfig.getNotifyUrl(), douYinTiyuConfig.getSalt(), orderCode, totalAmount.intValue(),attach, description);
yxOrder.setOrderSign(douyinSign); yxOrder.setOrderSign(douyinSign);
}else{ }else{
String douyinSign = DouYinUtil.main(douYinConfig.getAppId(), douYinConfig.getToken(),douYinConfig.getNotifyUrl(), douYinConfig.getSalt(), orderCode, totalAmount.intValue(),yxVipSku.getSkuName(), description); String douyinSign = DouYinUtil.main(douYinConfig.getAppId(), douYinConfig.getToken(),douYinConfig.getNotifyUrl(), douYinConfig.getSalt(), orderCode, totalAmount.intValue(),attach, description);
yxOrder.setOrderSign(douyinSign); yxOrder.setOrderSign(douyinSign);
} }
} }
else { else {
// 微信平台
String timeExpire = DateTimeZoneUtil.dateToTimeZone(System.currentTimeMillis() + 1000 * 60 * 3); String timeExpire = DateTimeZoneUtil.dateToTimeZone(System.currentTimeMillis() + 1000 * 60 * 3);
UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel() UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel()
// APPID // APPID
@ -159,7 +162,7 @@ public class MiniPayApiController {
.setDescription(description) .setDescription(description)
.setOut_trade_no(orderCode) .setOut_trade_no(orderCode)
.setTime_expire(timeExpire) .setTime_expire(timeExpire)
.setAttach("艺体志愿宝"+yxVipSku.getSkuName()) .setAttach(attach)
.setNotify_url(weXinConfig.getNotifyUrl()) .setNotify_url(weXinConfig.getNotifyUrl())
.setAmount(new Amount().setTotal(totalAmount.intValue())) .setAmount(new Amount().setTotal(totalAmount.intValue()))
.setPayer(new Payer().setOpenid(openId)); .setPayer(new Payer().setOpenid(openId));
@ -211,43 +214,8 @@ public class MiniPayApiController {
Map<String, String> map = new HashMap<>(12); Map<String, String> map = new HashMap<>(12);
String result = HttpKit.readData(request); String result = HttpKit.readData(request);
try { try {
String timestamp = request.getHeader("Wechatpay-Timestamp");
YxOrder yxOrder = null; YxOrder yxOrder = null;
SysUser sysUser = null; SysUser sysUser = null;
if (StringUtils.isNotBlank(timestamp)) {
//微信平台
String nonce = request.getHeader("Wechatpay-Nonce");
String serialNo = request.getHeader("Wechatpay-Serial");
String signature = request.getHeader("Wechatpay-Signature");
log.info("timestamp:{} nonce:{} serialNo:{} signature:{}", timestamp, nonce, serialNo, signature);
log.info("支付通知密文 {}", result);
// 需要通过证书序列号查找对应的证书verifyNotify 中有验证证书的序列号
String plainText = WxPayKit.verifyNotify(serialNo, result, signature, nonce, timestamp,
weXinConfig.getMchKey(), weXinConfig.getPlatFormPath());
log.info("支付通知明文 {}", plainText);
if (StrUtil.isNotEmpty(plainText)) {
com.alibaba.fastjson.JSONObject plainTextJson = JSONObject.parseObject(plainText);
//订单号
String outTradeNo = plainTextJson.getString("out_trade_no");
//支付状态
String tradeState = plainTextJson.getString("trade_state");
if ("SUCCESS".equals(tradeState)) {
//支付成功
yxOrderService.update(new LambdaUpdateWrapper<YxOrder>().eq(YxOrder::getOrderCode, outTradeNo).set(YxOrder::getPaymentTime, new Date()).set(YxOrder::getOrderStatus, "2"));
}
//支付成功修改订单信息
response.setStatus(200);
map.put("code", "SUCCESS");
map.put("message", "SUCCESS");
} else {
response.setStatus(500);
map.put("code", "ERROR");
map.put("message", "签名错误");
}
response.setHeader("Content-type", ContentType.JSON.toString());
response.getOutputStream().write(JSONUtil.toJsonStr(map).getBytes(StandardCharsets.UTF_8));
response.flushBuffer();
} else {
//抖音小程序 //抖音小程序
System.out.println("===================result:" + result); System.out.println("===================result:" + result);
JSONObject requestJson = JSONObject.parseObject(result); JSONObject requestJson = JSONObject.parseObject(result);
@ -266,7 +234,6 @@ public class MiniPayApiController {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sortedString.forEach(sb::append); sortedString.forEach(sb::append);
String sign = Sign.callbackSign(sortedString); String sign = Sign.callbackSign(sortedString);
timestamp = requestJson.getString("timestamp");//Unix 时间戳字符串类型
String nonce = requestJson.getString("nonce");//随机数 String nonce = requestJson.getString("nonce");//随机数
String msgSignature = requestJson.getString("msg_signature");//签名 String msgSignature = requestJson.getString("msg_signature");//签名
String type = requestJson.getString("type");//回调类型标记支付成功回调为"payment" String type = requestJson.getString("type");//回调类型标记支付成功回调为"payment"
@ -315,8 +282,6 @@ public class MiniPayApiController {
response.setHeader("Content-type", ContentType.JSON.toString()); response.setHeader("Content-type", ContentType.JSON.toString());
response.getOutputStream().write(JSONUtil.toJsonStr(map).getBytes(StandardCharsets.UTF_8)); response.getOutputStream().write(JSONUtil.toJsonStr(map).getBytes(StandardCharsets.UTF_8));
response.flushBuffer(); response.flushBuffer();
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -69,6 +69,14 @@ public class MiniVipController {
List<YxVipSku> list = yxVipSkuService.list(queryWrapper); List<YxVipSku> list = yxVipSkuService.list(queryWrapper);
return Result.OK(list); return Result.OK(list);
} }
@ApiOperation(value = "v1获取vip信息")
@GetMapping(value = "/v1/getVipInfo")
public Result<?> v1VipInfo() {
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
AssertUtils.notNull(loginUser, "未获取到登录信息");
VipDTO userVip = miniUserService.getUserVip(loginUser.getId());
return Result.OK(userVip);
}
@ApiOperation(value = "获取vip信息") @ApiOperation(value = "获取vip信息")
@GetMapping(value = "/getVipInfo") @GetMapping(value = "/getVipInfo")

View File

@ -48,7 +48,7 @@ public class DouYinUtil {
//put("thirdparty_id", "");//tta4bad200000xxxxxx //put("thirdparty_id", "");//tta4bad200000xxxxxx
put("out_order_no", orderCode); put("out_order_no", orderCode);
put("total_amount", totalAmount); put("total_amount", totalAmount);
put("subject", "艺体志愿宝"+skuName); put("subject", skuName);
put("body", description); put("body", description);
put("valid_time", 172800); put("valid_time", 172800);
put("notify_url", notifyUrl); put("notify_url", notifyUrl);