支付宝支付接口

This commit is contained in:
yuyang 2021-09-27 20:11:40 +08:00
parent a21d135156
commit 5783656f0c
7 changed files with 171 additions and 70 deletions

View File

@ -93,16 +93,6 @@ public class AjaxResult extends HashMap<String, Object>
return AjaxResult.success("操作成功", data); return AjaxResult.success("操作成功", data);
} }
/**
* 返回成功消息
*
* @param msg 返回内容
* @return 成功消息
*/
public static AjaxResult success(String msg)
{
return AjaxResult.success(msg, null);
}
/** /**
* 返回成功消息 * 返回成功消息

View File

@ -270,8 +270,9 @@
and ra.rate_id = ( and ra.rate_id = (
select rate_id from xhpc_rate_time select rate_id from xhpc_rate_time
where charging_station_id = cs.charging_station_id where charging_station_id = cs.charging_station_id
and cs.rate_model_id = rate_model_id
and start_time &lt;= #{date} and start_time &lt;= #{date}
and end_time &gt;= #{date} and replace(end_time, '00:00:00', '24:00:00') &gt;= #{date}
and status = 0 and status = 0
and del_flag = 0)) money, and del_flag = 0)) money,
(select GROUP_CONCAT(dict_value) from xhpc_dict_biz where FIND_IN_SET(dict_key,cs.service_facilities ) and code (select GROUP_CONCAT(dict_value) from xhpc_dict_biz where FIND_IN_SET(dict_key,cs.service_facilities ) and code

View File

@ -22,10 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* 历史订单 * 历史订单
@ -292,6 +289,11 @@ public class XhpcHistoryOrderController extends BaseController {
Long terminalId = xhpc.getTerminalId(); Long terminalId = xhpc.getTerminalId();
Long historyOrderId = xhpc.getHistoryOrderId(); Long historyOrderId = xhpc.getHistoryOrderId();
Date data = Calendar.getInstance().getTime(); Date data = Calendar.getInstance().getTime();
//小时多少度电
BigDecimal v = new BigDecimal((endTime.getTime() - startTime.getTime())).divide(new BigDecimal(60000),2,RoundingMode.HALF_UP);
BigDecimal multiply = v.divide(xhpc.getChargingDegree(),2,RoundingMode.HALF_UP);
//1时间没有跨天 //1时间没有跨天
DateTime parse = DateUtil.parse(DateUtil.format(startTime, "yyyy-MM-dd"), "yyyy-MM-dd"); DateTime parse = DateUtil.parse(DateUtil.format(startTime, "yyyy-MM-dd"), "yyyy-MM-dd");
DateTime parse1 = DateUtil.parse(DateUtil.format(endTime, "yyyy-MM-dd"), "yyyy-MM-dd"); DateTime parse1 = DateUtil.parse(DateUtil.format(endTime, "yyyy-MM-dd"), "yyyy-MM-dd");
@ -306,10 +308,10 @@ public class XhpcHistoryOrderController extends BaseController {
XhpcStatisticsTimeInterval xhpcSt = new XhpcStatisticsTimeInterval(); XhpcStatisticsTimeInterval xhpcSt = new XhpcStatisticsTimeInterval();
xhpcSt.setStatus(endHour+1); xhpcSt.setStatus(endHour+1);
xhpcSt.setChargingDegree(xhpc.getChargingDegree()); xhpcSt.setChargingDegree(xhpc.getChargingDegree());
xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()/3600).setScale(2, RoundingMode.HALF_UP)); xhpcSt.setChargingTime(new BigDecimal(xhpc.getChargingTimeNumber()).divide(new BigDecimal(3600),2, RoundingMode.HALF_UP));
xhpcSt.setChargingNumber(1); xhpcSt.setChargingNumber(1);
xhpcSt.setPowerPrice(xhpc.getActPowerPrice()); xhpcSt.setPowerPrice(xhpc.getPowerPriceTotal());
xhpcSt.setServicePrice(xhpc.getActServicePrice()); xhpcSt.setServicePrice(xhpc.getServicePriceTotal());
xhpcSt.setTotalPrice(xhpc.getTotalPrice()); xhpcSt.setTotalPrice(xhpc.getTotalPrice());
xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount()); xhpcSt.setPromotionDiscount(xhpc.getPromotionDiscount());
xhpcSt.setActPrice(xhpc.getActPrice()); xhpcSt.setActPrice(xhpc.getActPrice());
@ -329,24 +331,33 @@ public class XhpcHistoryOrderController extends BaseController {
if(xhpc.getSource()==1){ if(xhpc.getSource()==1){
xhpcSt.setInternetUserId(xhpc.getUserId()); xhpcSt.setInternetUserId(xhpc.getUserId());
} }
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(DateUtil.formatTime(startTime), DateUtil.formatTime(endTime), rateModelId);
Map<String, Object> map = reatTimeList.get(0);
xhpcSt.setElecPriceEvcs(new BigDecimal(map.get("powerFee").toString()));
xhpcSt.setServicePriceEvcs(new BigDecimal(map.get("serviceFee").toString()));
xhpcSt.setStartTimeEvcs(DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss"));
xhpcSt.setEndTimeEvcs(DateUtil.format(endTime, "yyyy-MM-dd HH:mm:ss"));
xhpcStatisticsService.addStatisticsTime(xhpcSt); xhpcStatisticsService.addStatisticsTime(xhpcSt);
}else { }else {
//跨时段 //跨时段
//总共时段 endHour+1-startHour //总共时段 endHour+1-startHour
addStatisTime(xhpc, startTime, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour); String yyyyMMdd = DateUtil.format(startTime, "yyyy-MM-dd");
addStatisTime(xhpc, startTime, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour,yyyyMMdd,multiply);
} }
}else{ }else{
//跨天 //跨天
Date updateTime2= DateUtil.parse(parse+" 23:59:59"); Date updateTime2= DateUtil.parse(parse+" 23:59:59");
int startHour = DateUtil.hour(startTime, true); int startHour = DateUtil.hour(startTime, true);
int endHour = DateUtil.hour(updateTime2, true); int endHour = DateUtil.hour(updateTime2, true);
addInterval(xhpc, startTime, updateTime2, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour); String yyyyMMdd = DateUtil.format(startTime, "yyyy-MM-dd");
addInterval(xhpc, startTime, updateTime2, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour,yyyyMMdd,multiply);
//明天 //明天
DateTime tomorrow = DateUtil.offsetDay(startTime,1); DateTime tomorrow = DateUtil.offsetDay(startTime,1);
Date startTime3 =DateUtil.beginOfDay(tomorrow); Date startTime3 =DateUtil.beginOfDay(tomorrow);
int startHour1 = DateUtil.hour(startTime3, true); int startHour1 = DateUtil.hour(startTime3, true);
int endHour1 = DateUtil.hour(endTime, true); int endHour1 = DateUtil.hour(endTime, true);
addInterval(xhpc, startTime3, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour1, endHour1); String yyyyMMdd1 = DateUtil.format(startTime3, "yyyy-MM-dd");
addInterval(xhpc, startTime3, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour1, endHour1,yyyyMMdd1,multiply);
} }
//修改状态 //修改状态
//修改历史订单表状态 //修改历史订单表状态
@ -358,23 +369,23 @@ public class XhpcHistoryOrderController extends BaseController {
} }
} }
private void addStatisTime(XhpcChargeHistoryOrder xhpc, Date startTime, Date endTime, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int startHour, int endHour) { private void addStatisTime(XhpcChargeHistoryOrder xhpc, Date startTime, Date endTime, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int startHour, int endHour,String yyyyMMdd,BigDecimal multiply) {
BigDecimal number = new BigDecimal(endHour + 1 - startHour); BigDecimal number = new BigDecimal(endHour + 1 - startHour);
for (int i = startHour; i < endHour + 1; i++) { for (int i = startHour; i < endHour + 1; i++) {
//获取费率 //获取费率
if (i == startHour) { if (i == startHour) {
//开始时间结束时间 //开始时间结束时间
addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, DateUtil.formatTime(startTime), i + ":59:59"); addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, DateUtil.formatTime(startTime), i + ":59:59",yyyyMMdd,multiply);
} else if (i != endHour) { } else if (i != endHour) {
addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, i + ":00:00", i + ":59:59"); addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, i + ":00:00", i + ":59:59",yyyyMMdd,multiply);
} else { } else {
addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, i + ":00:00", DateUtil.formatTime(endTime)); addStatis(xhpc, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, i, number, i + ":00:00", DateUtil.formatTime(endTime),yyyyMMdd,multiply);
} }
} }
} }
private void addInterval(XhpcChargeHistoryOrder xhpc, Date startTime, Date endTime, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int startHour, int endHour) { private void addInterval(XhpcChargeHistoryOrder xhpc, Date startTime, Date endTime, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int startHour, int endHour,String yyyyMMdd,BigDecimal multiply) {
Date data = Calendar.getInstance().getTime(); Date data = Calendar.getInstance().getTime();
if(endHour==startHour){ if(endHour==startHour){
//没有跨时段 //没有跨时段
@ -405,43 +416,79 @@ public class XhpcHistoryOrderController extends BaseController {
if(xhpc.getSource()==1){ if(xhpc.getSource()==1){
xhpcSt.setInternetUserId(xhpc.getUserId()); xhpcSt.setInternetUserId(xhpc.getUserId());
} }
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(DateUtil.formatTime(startTime), DateUtil.formatTime(endTime), rateModelId);
Map<String, Object> map = reatTimeList.get(0);
xhpcSt.setElecPriceEvcs(new BigDecimal(map.get("powerFee").toString()));
xhpcSt.setServicePriceEvcs(new BigDecimal(map.get("serviceFee").toString()));
xhpcSt.setStartTimeEvcs(DateUtil.format(startTime, "yyyy-MM-dd HH:mm:ss"));
xhpcSt.setEndTimeEvcs(DateUtil.format(endTime, "yyyy-MM-dd HH:mm:ss"));
xhpcStatisticsService.addStatisticsTime(xhpcSt); xhpcStatisticsService.addStatisticsTime(xhpcSt);
}else{ }else{
//跨时段 //跨时段
//总共时段 endHour+1-startHour //总共时段 endHour+1-startHour
addStatisTime(xhpc, startTime, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour); addStatisTime(xhpc, startTime, endTime, rateModelId, operatorId, chargingStationId, terminalId, historyOrderId, startHour, endHour,yyyyMMdd,multiply);
} }
} }
private void addStatis(XhpcChargeHistoryOrder xhpc, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int status, BigDecimal number, String start, String end) { private void addStatis(XhpcChargeHistoryOrder xhpc, Long rateModelId, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int status, BigDecimal number, String start, String end,String yyyyMMdd,BigDecimal multiply) {
List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(start, end, rateModelId); List<Map<String, Object>> reatTimeList = xhpcHistoryOrderService.getReatTimeList(start, end, rateModelId);
if (reatTimeList != null && reatTimeList.size() > 0) { if (reatTimeList != null && reatTimeList.size() > 0) {
if (reatTimeList.size() == 1) { if (reatTimeList.size() == 1) {
addSte(xhpc, operatorId, chargingStationId, terminalId, historyOrderId, status, number, reatTimeList, 0, 1); addSte(xhpc, operatorId, chargingStationId, terminalId, historyOrderId, status, number, reatTimeList, -1, 1,start,end,yyyyMMdd,multiply);
} else { } else {
for (int j = 0; j < reatTimeList.size(); j++) { for (int j = 0; j < reatTimeList.size(); j++) {
addSte(xhpc, operatorId, chargingStationId, terminalId, historyOrderId, status, number, reatTimeList, j, 2); addSte(xhpc, operatorId, chargingStationId, terminalId, historyOrderId, status, number, reatTimeList, j, 2,start,end,yyyyMMdd,multiply);
} }
} }
} }
} }
private void addSte(XhpcChargeHistoryOrder xhpc, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int status, BigDecimal number, List<Map<String, Object>> reatTimeList, int j, int type) { private void addSte(XhpcChargeHistoryOrder xhpc, Long operatorId, Long chargingStationId, Long terminalId, Long historyOrderId, int status, BigDecimal number, List<Map<String, Object>> reatTimeList, int j, int type, String start, String end,String yyyyMMdd,BigDecimal multiply) {
Date data = Calendar.getInstance().getTime(); Date data = Calendar.getInstance().getTime();
Map<String, Object> map = reatTimeList.get(j); Map<String, Object> map =new HashMap<>();
if(j==-1){
map = reatTimeList.get(0);
}else{
map = reatTimeList.get(j);
}
BigDecimal size = new BigDecimal(reatTimeList.size()); BigDecimal size = new BigDecimal(reatTimeList.size());
long time3 = DateUtil.parse(map.get("endTime").toString()).getTime(); XhpcStatisticsTimeInterval xhpcSt = new XhpcStatisticsTimeInterval();
long time4 = DateUtil.parse(map.get("startTime").toString()).getTime(); long time3 =0L;
BigDecimal time5 = new BigDecimal((time3-time4)/6000); long time4 =0L;
if(j==-1){
time3 = DateUtil.parse(end).getTime();
time4 = DateUtil.parse(start).getTime();
xhpcSt.setStartTimeEvcs(yyyyMMdd+" "+start);
xhpcSt.setEndTimeEvcs(yyyyMMdd+" "+end);
}else if(j==0){
time3 = DateUtil.parse(map.get("endTime").toString()).getTime();
time4 = DateUtil.parse(start).getTime();
xhpcSt.setStartTimeEvcs(yyyyMMdd+" "+start);
xhpcSt.setEndTimeEvcs(yyyyMMdd+" "+map.get("endTime").toString());
}else if(j!=reatTimeList.size()){
time3 = DateUtil.parse(map.get("endTime").toString()).getTime();
time4 = DateUtil.parse(map.get("startTime").toString()).getTime();
xhpcSt.setStartTimeEvcs(yyyyMMdd+" "+map.get("startTime").toString());
xhpcSt.setEndTimeEvcs(yyyyMMdd+" "+map.get("endTime").toString());
}else{
time3 = DateUtil.parse(end).getTime();
time4 = DateUtil.parse(map.get("startTime").toString()).getTime();
xhpcSt.setStartTimeEvcs(yyyyMMdd+" "+map.get("startTime").toString());
xhpcSt.setEndTimeEvcs(yyyyMMdd+" "+end);
}
BigDecimal time5 = new BigDecimal((time3-time4)).divide(new BigDecimal(60000),2, RoundingMode.HALF_UP);
//每分钟多少度电
BigDecimal decimal = multiply.multiply(time5).setScale(2,RoundingMode.HALF_UP);
BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString()); BigDecimal powerFee =new BigDecimal(map.get("powerFee").toString());
BigDecimal serviceFee =new BigDecimal(map.get("serviceFee").toString()); BigDecimal serviceFee =new BigDecimal(map.get("serviceFee").toString());
XhpcStatisticsTimeInterval xhpcSt = new XhpcStatisticsTimeInterval(); xhpcSt.setElecPriceEvcs(powerFee);
xhpcSt.setServicePriceEvcs(serviceFee);
xhpcSt.setStatus(status+1); xhpcSt.setStatus(status+1);
xhpcSt.setChargingDegree(xhpc.getChargingDegree()); xhpcSt.setChargingDegree(decimal);
xhpcSt.setChargingTime(time5); xhpcSt.setChargingTime(time5);
xhpcSt.setChargingNumber(1); xhpcSt.setChargingNumber(1);
BigDecimal powerFee1 = powerFee.multiply(time5).setScale(2, RoundingMode.HALF_UP); BigDecimal powerFee1 = powerFee.multiply(decimal).setScale(2, RoundingMode.HALF_UP);
BigDecimal serviceFee1 = serviceFee.multiply(time5).setScale(2, RoundingMode.HALF_UP); BigDecimal serviceFee1 = serviceFee.multiply(decimal).setScale(2, RoundingMode.HALF_UP);
xhpcSt.setPowerPrice(powerFee1); xhpcSt.setPowerPrice(powerFee1);
xhpcSt.setServicePrice(serviceFee1); xhpcSt.setServicePrice(serviceFee1);
xhpcSt.setTotalPrice(powerFee1.add(serviceFee1)); xhpcSt.setTotalPrice(powerFee1.add(serviceFee1));
@ -476,6 +523,7 @@ public class XhpcHistoryOrderController extends BaseController {
if(xhpc.getSource()==1){ if(xhpc.getSource()==1){
xhpcSt.setInternetUserId(xhpc.getUserId()); xhpcSt.setInternetUserId(xhpc.getUserId());
} }
xhpcStatisticsService.addStatisticsTime(xhpcSt); xhpcStatisticsService.addStatisticsTime(xhpcSt);
} }

View File

@ -81,6 +81,12 @@
<version>3.0.0</version> <version>3.0.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.1</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,22 +1,34 @@
package com.xhpc.payment.controller; package com.xhpc.payment.controller;
import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient; import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient; import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeCreateRequest; import com.alipay.api.request.AlipayTradeCreateRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeCreateResponse; import com.alipay.api.response.AlipayTradeCreateResponse;
import com.xhpc.common.core.utils.DateUtils; import com.xhpc.common.core.constant.HttpStatus;
import com.xhpc.common.core.constant.StatusConstants;
import com.xhpc.common.core.utils.StringUtils;
import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.payment.domain.XhpcRechargeOrder;
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
import com.xhpc.payment.service.IXhpcRechargeOrderService;
import com.xhpc.payment.service.IXhpcRefundOrderService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -28,41 +40,73 @@ public class AlipayPaymentController {
@Autowired @Autowired
private Environment environment; private Environment environment;
@Autowired
private IXhpcRechargeOrderService iXhpcRechargeOrderService;
//@Autowired
//private XhpcUserAccountStatementMapper xhpcUserAccountStatementMapper;
@Autowired
private IXhpcRefundOrderService iXhpcRefundOrderService;
@GetMapping("/payment") @PostMapping("/payment")
@ApiOperation(value = "支付宝支付") @ApiOperation(value = "支付宝支付")
private String newPay() throws Exception { private AjaxResult payment(HttpServletRequest servletRequest, @RequestBody Map<String, Object> map) throws Exception {
String openid = StringUtils.valueOf(map.get("openid"));
if (StringUtils.isEmpty(openid)) {
return AjaxResult.error(HttpStatus.NOT_NULL, "openid不能为空");
}
//总金额()订单总金额单位为元
String amount = StringUtils.valueOf(map.get("amount"));
if (StringUtils.isEmpty(amount)) {
return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能为空");
}else{
if(new BigDecimal(5).compareTo(new BigDecimal(amount))==1){
return AjaxResult.error(HttpStatus.NOT_NULL, "充值金额不能少于5元");
}
}
//用户信息id
String userId = StringUtils.valueOf(map.get("userId"));
if (StringUtils.isEmpty(userId)) {
return AjaxResult.error(HttpStatus.NOT_NULL, "用户信息不能为空");
}
Map<String, Object> refundOrder = iXhpcRefundOrderService.getNotRefundOrder(Long.parseLong(userId));
if (StringUtils.isNotNull(refundOrder)) {
return AjaxResult.error(HttpStatus.ALREADY_EXISTING, "用户存正在退款");
}
String orderNumber = StringUtils.numFormat(Long.parseLong(userId), 1, StatusConstants.FLOWING_WATER_RECHARGE_TYPE);
String orderNumber = "alipay" + DateUtils.timePath(); //生成充值订单
XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.addRechargeOrder(userId, BigDecimal.valueOf(Double.parseDouble(amount)), "2", orderNumber);
String attach = attachYu(StringUtils.valueOf(xhpcRechargeOrder.getRechargeOrderId()), StringUtils.valueOf(amount), null, orderNumber);
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", environment.getProperty("ALIPAYAPPID"), environment.getProperty("ALIPAYPRIVATEKEY"), "json", "utf-8", environment.getProperty("ALIPAYPUBLICKEY"), "RSA2"); AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", environment.getProperty("ALIPAYAPPID"), environment.getProperty("ALIPAYPRIVATEKEY"), "json", "utf-8", environment.getProperty("ALIPAYPUBLICKEY"), "RSA2");
AlipayTradeCreateRequest request = new AlipayTradeCreateRequest(); AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
JSONObject json = new JSONObject();
String out_trade_no = orderNumber; request.setBizContent("{" +
//订单号 "\"out_trade_no\":\""+orderNumber+"\"," +
json.put("out_trade_no", out_trade_no); "\"total_amount\":"+amount+"," +
//金额 这里的金额是以元为单位的可以不转换但必须是字符串 "\"subject\":\"小华充电\"," +
json.put("total_amount", "0.01"); "\"timeout_express\":\"30m\"," +
//描述 "\"buyer_id\":\""+openid+"\"" +
json.put("subject", "测试"); "}");
//用户唯一标识id 这里必须使用buyer_id 参考文档 //"\"passback_params\":\""+attach+"\"," +
json.put("buyer_id", "123"); request.setNotifyUrl(environment.getProperty("ALIPAYPSERVERDOMAIN"));
//对象转化为json字符串
String jsonStr = json.toString();
//商户通过该接口进行交易的创建下单
request.setBizContent(jsonStr);
request.setNotifyUrl("https://cdz.project2.tingsun.net/alipay/notifyUrl");//回调地址
try { try {
//使用的是execute //这里和普通的接口调用不同使用的是sdkExecute
AlipayTradeCreateResponse response = alipayClient.execute(request); AlipayTradeCreateResponse response = alipayClient.execute(request);
String trade_no = response.getTradeNo();//获取返回的tradeNO if(response.isSuccess()){
String trade_no = response.getTradeNo();// 获取返回的tradeNO
return AjaxResult.success(trade_no);
} else {
return AjaxResult.error("生成订单失败,请稍后在试!");
}
} catch (AlipayApiException e) { } catch (AlipayApiException e) {
e.printStackTrace(); e.printStackTrace();
} }
return ""; return AjaxResult.error("生成订单失败,请稍后在试");
} }
/** /**
* 2 * 支付宝服务器异步通知url * 2 * 支付宝服务器异步通知url
* 3 * @throws Exception * 3 * @throws Exception
@ -105,4 +149,16 @@ public class AlipayPaymentController {
System.out.println(AlipaySignature.getSignCheckContentV1(params)); System.out.println(AlipaySignature.getSignCheckContentV1(params));
} }
} }
//附加参数
public String attachYu(String id, String money, String payStyle, String out_trade_no) {
// 发送请求参数 业务参数
StringBuilder attachSB = new StringBuilder();
attachSB.append(",{\"customerId\":" + id);
attachSB.append(",\"money\":\"" + money + "\"");
attachSB.append(",\"out_trade_no\":\"" + out_trade_no + "\"}");
String attach = attachSB.substring(1);
return attach;
}
} }

View File

@ -43,10 +43,10 @@ SERVERDOMAIN: "http://xhpc.scxhua.com/prod-api/xhpc-payment/wx/paymentCallback"
WXTRANSFERS: "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers" WXTRANSFERS: "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"
#支付宝支付回调地址 #支付宝支付回调地址
ALIPAYPSERVERDOMAIN: "https://cdz.project2.tingsun.net/alipay/paymentCallback" ALIPAYPSERVERDOMAIN: "https://xhpc.scxhua.com/prod-api/alipay/notifyUrl"
#支付宝公钥 #支付宝公钥
ALIPAYPUBLICKEY: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5NOLLMj/cWU+SOZ6NR6vXnmeEZPq7UYeuyPvouFzqphQ9nuGPB7GkhZQnzGdhXVnUWw01HjezDzOkKCW9Jl4cG6+tVyqJt4FWrAylEeSxkbnNLeRohXg1ZaBV4hU76Y/WOW2R4uHD/9oX9pna7U8NJJJrqQiBdRAjSTt1cHTgXlkDKzhmiBm6Nw71rZeaETeBOnq3FnQUc91PFhmJRbrVCjDxA7gJryxRadHGBJDlgWkzTs09Q6PVpNj5x+QWtSawQgs5EEZNBh5T6AhmjlJFd4F9AsaNzcMrZGXVRGc3QcB3l+zP1nmmT7EZed1nIpjpQs5zGYFTA/yzvYh+WJ7hQIDAQAB" ALIPAYPUBLICKEY: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjHDksTgZTpf0wh7oeTVRp0h3SqzTM2smjEJnx9jF1+q3WSXLRB4OzSzq7VsJ/szcyK10ZGO5PxeQ4u9GAG/U+7xhs7ei1cJB/Er55Sg9SbjfkTpwlDv181UJCRJJ/IAcqyqezwTpB8e2trYmHKovUdt0KR9/tVkGa7hsNd5GfxTOUaAFc3zADqRVM+wGimtG0NYfOF2f8tkmBEAiMMLKq5pbAnHU723a1cm/nfVp7gvXfsnO0k2GvRuHzb8mxIhWLiAnwdK9gEu5za/jWxo/xIvf2sdJPYdWj+yfyzA2e1fJkx4uRUzX31CXxZvP2/tfEcnTdI0gxN+OH2eAMiPVswIDAQAB"
#支付宝私钥 #应用私钥
ALIPAYPRIVATEKEY: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDk04ssyP9xZT5I5no1Hq9eeZ4Rk+rtRh67I++i4XOqmFD2e4Y8HsaSFlCfMZ2FdWdRbDTUeN7MPM6QoJb0mXhwbr61XKom3gVasDKUR5LGRuc0t5GiFeDVloFXiFTvpj9Y5bZHi4cP/2hf2mdrtTw0kkmupCIF1ECNJO3VwdOBeWQMrOGaIGbo3DvWtl5oRN4E6ercWdBRz3U8WGYlFutUKMPEDuAmvLFFp0cYEkOWBaTNOzT1Do9Wk2PnH5Ba1JrBCCzkQRk0GHlPoCGaOUkV3gX0Cxo3NwytkZdVEZzdBwHeX7M/WeaZPsRl53WcimOlCznMZgVMD/LO9iH5YnuFAgMBAAECggEAML3+/2MxRm5SfiTaE0aeBHnTedsQR8qP8T0OZpuvj78yP87AIT5M/gFS2xYuf6cqguWRu1Cj5M1vEs+iWCf4x7pPVUKP3AefDFpL69nzIdkolsojc2tFoTmWA5c+wG2hQMZttX+7HWVCTmivbvoEAQ7IMzMzLBqyRV6AavAGpaVWzmoYFZMX5qMwqucOu2voQ/S5qkJUaQJmTzwInsMvLl7VZN5eJBrlLaKHaTCdW45b6HYvi+fdabq5TQ5J2sMMdqaO4t73iUJnwlf/qvVrhDSCKPGqE64gk4kq9Qcgi+viQp8x/mzMGeU+9avYKG3lcnUGXfHMTl91KciaHfU7AQKBgQD32U3xneeZhcWm4HQitAwoSW1GvCaaSCqu4wZiVhHYclkHbdtl5xpMbUvwDtEMlHI/gvvEs+XDoFVa8zUPXgBsO00vKNAkSqoeE+7lUaQTG8rTtX9lFiJDkX0v9NHzeyVzZi8ZxkpT6GFV2eDRa/+XGht7KdRoiSpvvvEK0QslfQKBgQDsWhWcz0WcpjjsbtrsSoutX2lR180g/2VpKU4Od4OSMYI03DhpCevembgclFSbRpsIvaqIbCeZEcidkaGcjIJ7N8ZVJF/lEEWzUNKAJ1WRozmptXQIXA2E3IZGQPZai8Hm0C+idy0DrXdPPs7JX9EcDN8m40M7DYAS9REyB+5sqQKBgQDnwOFaOZ3Tdzu/dAgEXzky/p3Y05yBDVQkHhLdJsAfFaVcBgRuP+/eYSDtwt0FF1XRP4hugQ0qpKTLm7kUuoBItBbTLyWZmduCrn7nHTT/zTAWUJNkEZNOfR+DFTiwpIj7ZCRMxJbB6PwDC+1lxcfEIdxqiU2dxgzRWskHpTr3/QKBgB3HJ8vu7WVUJ/3Z5ak5pyl7yOgv2T9cDinWs2ftNN15cV85k73gKyCLm3+2TIaXuba7Nr4jakXF0NHRZFw188aUe1+EyrQwfaee+jZ9PjGwL/aqzuiyuF1R73TwgFleHFr5RdchTsGU3GBWmHUUpmLzWDYtEe5hwA4jZDw6dZapAoGBAKsr9GImz8vsKjfzQJMj8OC18ch+U29nwkhjHPnjtE4Zjf7izUC2x8b1EWa59pqXIPv9Kgb2aP2MX/fQHtUwNaRza9vfbRcG4qaATKWNIsV2BR+yI/SP7Hdt7fNfv1Jbivj42zj0HyTNXA7E4GPiZpKMYaXt56JouyoRbBnMoakO" ALIPAYPRIVATEKEY: "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCG0ynEzKW/LwXLgtcOQ9BQCWN1ILdK8/X8DIiKy2XiebirTkU2LF9u6NpNKju3TIZTq02GBpjz/5kuCdXoFTqZXB6W/6vDbRskIT42ctT6nzZtkBaYt4BaC/HSPWAQJ+9z+JtKr8bDYUgN/9YwdwV/J3sEg/HYPlsXRczrnJdfhR/d5zno1V6avK2p052/IWKV5daZg3aQpDDi7QdZp8W88hbrItb0aoaDwhsq90ZBDA8ZjUUUAiqnSFPl0OxBAvwbS1U1Y7SYQd6AeD3M9MugrDjPNng+TeZgZ0zXaB2uh3u+i1PsDvQAEq72MM+1z097de2t01u6jmvsqFPj9ANrAgMBAAECggEAZln344bYbQLti0mQqSuiAKCf+FMV0rjRjL6XCYbPmdZ98s5AjJey+yeaUeo12zkk4G+zMoPfqZvoVaLx2HYFPldIgakmY/14FT2HVR5nwLsNPq+b9+OWdMWMluYw/xLSHWAlw9UdN0WqxbXqjHBOo/D82riv6FGuJUTABD2kTMZQngzOaoMcgrfIb4y5f2oTzXXvOidOA5u2UW9vbPaV/G+eqvsBTMNgJUY3uYO0fMvGVrQ6u5lHPiZzYjdIhyYXBa0L7MUs6oi4YcJwSHt0OXrxVPjJFR6Kpl2hkzOptgrhn8Jun0DYCd0s02NxIaVLkF6pNhqZaovLWTcCoal+wQKBgQDEfVQoOZ5eZYtL6XEnJBH7alVT87RywgDc4Jz4AYIKijt4KWZCWqu6GoR3Ku/u+/PWAak3j9pHv0HoKVAmDANJOU0W6pyUXNXLoeYlc/2kOmlRHbNReAnaUwHauIRiUOfqZ8+qWS5Ly6TmuF0GJRrbXr1gah75Ow0T02af618IlwKBgQCvqLUWwEpFSt1EZ6Y20jOm75RQgl+0wckwdTaoPyE6qwHkuPXG0nILD0OqgWPY2iYUR6DIfBuv6CkSvGgvY7ouj876hsofSW4d7gitt5+ybTjtyUDOCQk5g3QkRmFW9SAAbWTF7VvyiIqlICWEIuMQ1hJdKQK4/6nm1IqgSoTCTQKBgEk7lOQxJW91VUeDyCKYdQNJjGfvyu+CkyO/q4FbvoYDI0sT0wMkHCEOxRRNMoPV7/lxQQpuWSKoi/3ld/PWQltGOg8yfg1l1GFDBC4tXvmYs6wB79WLcdCnY2eLofuqv+VDr8iD2JdzXRCI4lLp/WqJkveeVdD6S1N6VSOBbDgdAoGAJF54x/IeLoSWlXAkYNtaqGiYO6cSq7knr6nFHEad2ajIZpPJB1ZRGGsbpnTNuHtKQQ6ngnr3vI8D2gY6R/2M8dECmKpJtPqeGwJKt7T6EpY8oDb3/PCwAUFvTYdo5fkwnAYKRFSloeyVUCT8v4P9oWHBQZqZHraIdetxnEhxfk0CgYAaqweBwOdAiRk/ivbgtf9fhSSnM3p40KZ9MF66wsnb4oc/+qH/Nq/SxeQBIIwx0ouW7Ho7xr0yYcmnnrk+xEHfDsGSxNYEd0NClGRBpPCy0ynEpsXeaj2yjr0zWzcDYI/wRaDpzCcUQf8BJ4l++klXvwhGvJiRDOFaLPiZ9zscBA=="
#支付宝appid #支付宝appid
ALIPAYAPPID: "2021002156615717" ALIPAYAPPID: "2021002156615717"

View File

@ -27,7 +27,7 @@ spring:
WXGETJSCODE: "https://api.weixin.qq.com/sns/jscode2session?appid=wxd0a48e00319ef8a7&secret=e26d9088b58e24af69411d5933cece47&js_code=" WXGETJSCODE: "https://api.weixin.qq.com/sns/jscode2session?appid=wxd0a48e00319ef8a7&secret=e26d9088b58e24af69411d5933cece47&js_code="
#支付宝公钥 #支付宝公钥
ALIPAYPUBLICKEY: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjHDksTgZTpf0wh7oeTVRp0h3SqzTM2smjEJnx9jF1+q3WSXLRB4OzSzq7VsJ/szcyK10ZGO5PxeQ4u9GAG/U+7xhs7ei1cJB/Er55Sg9SbjfkTpwlDv181UJCRJJ/IAcqyqezwTpB8e2trYmHKovUdt0KR9/tVkGa7hsNd5GfxTOUaAFc3zADqRVM+wGimtG0NYfOF2f8tkmBEAiMMLKq5pbAnHU723a1cm/nfVp7gvXfsnO0k2GvRuHzb8mxIhWLiAnwdK9gEu5za/jWxo/xIvf2sdJPYdWj+yfyzA2e1fJkx4uRUzX31CXxZvP2/tfEcnTdI0gxN+OH2eAMiPVswIDAQAB" ALIPAYPUBLICKEY: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjHDksTgZTpf0wh7oeTVRp0h3SqzTM2smjEJnx9jF1+q3WSXLRB4OzSzq7VsJ/szcyK10ZGO5PxeQ4u9GAG/U+7xhs7ei1cJB/Er55Sg9SbjfkTpwlDv181UJCRJJ/IAcqyqezwTpB8e2trYmHKovUdt0KR9/tVkGa7hsNd5GfxTOUaAFc3zADqRVM+wGimtG0NYfOF2f8tkmBEAiMMLKq5pbAnHU723a1cm/nfVp7gvXfsnO0k2GvRuHzb8mxIhWLiAnwdK9gEu5za/jWxo/xIvf2sdJPYdWj+yfyzA2e1fJkx4uRUzX31CXxZvP2/tfEcnTdI0gxN+OH2eAMiPVswIDAQAB"
#支付宝私钥 #应用私钥
ALIPAYPRIVATEKEY: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDk04ssyP9xZT5I5no1Hq9eeZ4Rk+rtRh67I++i4XOqmFD2e4Y8HsaSFlCfMZ2FdWdRbDTUeN7MPM6QoJb0mXhwbr61XKom3gVasDKUR5LGRuc0t5GiFeDVloFXiFTvpj9Y5bZHi4cP/2hf2mdrtTw0kkmupCIF1ECNJO3VwdOBeWQMrOGaIGbo3DvWtl5oRN4E6ercWdBRz3U8WGYlFutUKMPEDuAmvLFFp0cYEkOWBaTNOzT1Do9Wk2PnH5Ba1JrBCCzkQRk0GHlPoCGaOUkV3gX0Cxo3NwytkZdVEZzdBwHeX7M/WeaZPsRl53WcimOlCznMZgVMD/LO9iH5YnuFAgMBAAECggEAML3+/2MxRm5SfiTaE0aeBHnTedsQR8qP8T0OZpuvj78yP87AIT5M/gFS2xYuf6cqguWRu1Cj5M1vEs+iWCf4x7pPVUKP3AefDFpL69nzIdkolsojc2tFoTmWA5c+wG2hQMZttX+7HWVCTmivbvoEAQ7IMzMzLBqyRV6AavAGpaVWzmoYFZMX5qMwqucOu2voQ/S5qkJUaQJmTzwInsMvLl7VZN5eJBrlLaKHaTCdW45b6HYvi+fdabq5TQ5J2sMMdqaO4t73iUJnwlf/qvVrhDSCKPGqE64gk4kq9Qcgi+viQp8x/mzMGeU+9avYKG3lcnUGXfHMTl91KciaHfU7AQKBgQD32U3xneeZhcWm4HQitAwoSW1GvCaaSCqu4wZiVhHYclkHbdtl5xpMbUvwDtEMlHI/gvvEs+XDoFVa8zUPXgBsO00vKNAkSqoeE+7lUaQTG8rTtX9lFiJDkX0v9NHzeyVzZi8ZxkpT6GFV2eDRa/+XGht7KdRoiSpvvvEK0QslfQKBgQDsWhWcz0WcpjjsbtrsSoutX2lR180g/2VpKU4Od4OSMYI03DhpCevembgclFSbRpsIvaqIbCeZEcidkaGcjIJ7N8ZVJF/lEEWzUNKAJ1WRozmptXQIXA2E3IZGQPZai8Hm0C+idy0DrXdPPs7JX9EcDN8m40M7DYAS9REyB+5sqQKBgQDnwOFaOZ3Tdzu/dAgEXzky/p3Y05yBDVQkHhLdJsAfFaVcBgRuP+/eYSDtwt0FF1XRP4hugQ0qpKTLm7kUuoBItBbTLyWZmduCrn7nHTT/zTAWUJNkEZNOfR+DFTiwpIj7ZCRMxJbB6PwDC+1lxcfEIdxqiU2dxgzRWskHpTr3/QKBgB3HJ8vu7WVUJ/3Z5ak5pyl7yOgv2T9cDinWs2ftNN15cV85k73gKyCLm3+2TIaXuba7Nr4jakXF0NHRZFw188aUe1+EyrQwfaee+jZ9PjGwL/aqzuiyuF1R73TwgFleHFr5RdchTsGU3GBWmHUUpmLzWDYtEe5hwA4jZDw6dZapAoGBAKsr9GImz8vsKjfzQJMj8OC18ch+U29nwkhjHPnjtE4Zjf7izUC2x8b1EWa59pqXIPv9Kgb2aP2MX/fQHtUwNaRza9vfbRcG4qaATKWNIsV2BR+yI/SP7Hdt7fNfv1Jbivj42zj0HyTNXA7E4GPiZpKMYaXt56JouyoRbBnMoakO" ALIPAYPRIVATEKEY: "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCG0ynEzKW/LwXLgtcOQ9BQCWN1ILdK8/X8DIiKy2XiebirTkU2LF9u6NpNKju3TIZTq02GBpjz/5kuCdXoFTqZXB6W/6vDbRskIT42ctT6nzZtkBaYt4BaC/HSPWAQJ+9z+JtKr8bDYUgN/9YwdwV/J3sEg/HYPlsXRczrnJdfhR/d5zno1V6avK2p052/IWKV5daZg3aQpDDi7QdZp8W88hbrItb0aoaDwhsq90ZBDA8ZjUUUAiqnSFPl0OxBAvwbS1U1Y7SYQd6AeD3M9MugrDjPNng+TeZgZ0zXaB2uh3u+i1PsDvQAEq72MM+1z097de2t01u6jmvsqFPj9ANrAgMBAAECggEAZln344bYbQLti0mQqSuiAKCf+FMV0rjRjL6XCYbPmdZ98s5AjJey+yeaUeo12zkk4G+zMoPfqZvoVaLx2HYFPldIgakmY/14FT2HVR5nwLsNPq+b9+OWdMWMluYw/xLSHWAlw9UdN0WqxbXqjHBOo/D82riv6FGuJUTABD2kTMZQngzOaoMcgrfIb4y5f2oTzXXvOidOA5u2UW9vbPaV/G+eqvsBTMNgJUY3uYO0fMvGVrQ6u5lHPiZzYjdIhyYXBa0L7MUs6oi4YcJwSHt0OXrxVPjJFR6Kpl2hkzOptgrhn8Jun0DYCd0s02NxIaVLkF6pNhqZaovLWTcCoal+wQKBgQDEfVQoOZ5eZYtL6XEnJBH7alVT87RywgDc4Jz4AYIKijt4KWZCWqu6GoR3Ku/u+/PWAak3j9pHv0HoKVAmDANJOU0W6pyUXNXLoeYlc/2kOmlRHbNReAnaUwHauIRiUOfqZ8+qWS5Ly6TmuF0GJRrbXr1gah75Ow0T02af618IlwKBgQCvqLUWwEpFSt1EZ6Y20jOm75RQgl+0wckwdTaoPyE6qwHkuPXG0nILD0OqgWPY2iYUR6DIfBuv6CkSvGgvY7ouj876hsofSW4d7gitt5+ybTjtyUDOCQk5g3QkRmFW9SAAbWTF7VvyiIqlICWEIuMQ1hJdKQK4/6nm1IqgSoTCTQKBgEk7lOQxJW91VUeDyCKYdQNJjGfvyu+CkyO/q4FbvoYDI0sT0wMkHCEOxRRNMoPV7/lxQQpuWSKoi/3ld/PWQltGOg8yfg1l1GFDBC4tXvmYs6wB79WLcdCnY2eLofuqv+VDr8iD2JdzXRCI4lLp/WqJkveeVdD6S1N6VSOBbDgdAoGAJF54x/IeLoSWlXAkYNtaqGiYO6cSq7knr6nFHEad2ajIZpPJB1ZRGGsbpnTNuHtKQQ6ngnr3vI8D2gY6R/2M8dECmKpJtPqeGwJKt7T6EpY8oDb3/PCwAUFvTYdo5fkwnAYKRFSloeyVUCT8v4P9oWHBQZqZHraIdetxnEhxfk0CgYAaqweBwOdAiRk/ivbgtf9fhSSnM3p40KZ9MF66wsnb4oc/+qH/Nq/SxeQBIIwx0ouW7Ho7xr0yYcmnnrk+xEHfDsGSxNYEd0NClGRBpPCy0ynEpsXeaj2yjr0zWzcDYI/wRaDpzCcUQf8BJ4l++klXvwhGvJiRDOFaLPiZ9zscBA=="
#支付宝appid #支付宝appid
ALIPAYAPPID: "2021002156615717" ALIPAYAPPID: "2021002156615717"