支付宝回调接口,修复场站费率为null,修改支付宝注册接口
This commit is contained in:
parent
2a2b81e085
commit
d24e084245
@ -374,7 +374,9 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
String rateValue = xhpcChargingStationDto.getDefaultPeriodId();
|
||||
|
||||
String[] tfPricesSeq = new String[48];
|
||||
int number = 0;
|
||||
for (int k = 0; k <48 ; k++) {
|
||||
tfPricesSeq[k]=rateValue;
|
||||
}
|
||||
int sort = 1;
|
||||
for (int k = 0; k < list.size(); k++) {
|
||||
XhpcRateTimeDto xhpcRateTimeDto = list.get(k);
|
||||
@ -383,81 +385,47 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
String rateValues = xhpcRateTimeDto.getId();
|
||||
Long defaultPeriodIdMap = map.get(rateValues);
|
||||
|
||||
if (k == 0) {
|
||||
if (!"00:00:00".equals(xhpcRateTimeDto.getStartTime())) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day1 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day1; l++) {
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
String str = startTime.split(":")[0];
|
||||
int st= Integer.valueOf(str);
|
||||
String endT = endTime.split(":")[0];
|
||||
int end= Integer.valueOf(endT);
|
||||
|
||||
for (int l = st*2; l <end*2 ; l++) {
|
||||
tfPricesSeq[l]=rateValues;
|
||||
}
|
||||
|
||||
if(list.size() == 1){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day2 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day2; l++) {
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
} else if (k < list.size()-1) {
|
||||
//判断上条数据的结束时间是否等于现在这条数据的开始时间,不等于添加一条默认费率时段
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day3 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day3; l++) {
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day4 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day4; l++) {
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
} else {
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day5 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day5; l++) {
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay1 = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day6 = Math.toIntExact(betweenDay1 / 1800);
|
||||
for (int l = 0; l < day6; l++) {
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
if (!endTime.equals("24:00:00")) {
|
||||
//添加一条默认费率时段
|
||||
if(!endTime.equals("24:00:00")) {
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay3 = DateUtil.between(DateUtil.parse(endTime), DateUtil.parse("24:00:00"), DateUnit.SECOND);
|
||||
int day7 = Math.toIntExact(betweenDay3 / 1800);
|
||||
for (int l = 0; l < day7; l++) {
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}else{
|
||||
if(k == 0){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
}else if(k < list.size()-1){
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
}else{
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
if (!endTime.equals("24:00:00")) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -529,11 +497,11 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
@Override
|
||||
public Map<String, Object> getXhpcChargingStationMessage(Long chargingStationId, Integer type) {
|
||||
|
||||
|
||||
Map<String, Object> map = xhpcChargingStationMapper.getXhpcChargingStationMessage(chargingStationId);
|
||||
|
||||
//图片信息
|
||||
List<String> imgList = new ArrayList<>();
|
||||
if (map.get("imgId") != null && map.get("imgId").toString() != "") {
|
||||
if (map !=null &&map.get("imgId") != null && map.get("imgId").toString() != "") {
|
||||
String[] split = map.get("imgId").toString().split(",");
|
||||
imgList = Arrays.asList(split);
|
||||
List<Map<String, Object>> imgLists = xhpcChargingStationMapper.getImageList(imgList);
|
||||
@ -827,102 +795,62 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
String rateValue = xhpcChargingStationDto.getDefaultPeriodId();
|
||||
|
||||
String[] tfPricesSeq = new String[48];
|
||||
int number = 0;
|
||||
for (int k = 0; k <48 ; k++) {
|
||||
tfPricesSeq[k]=rateValue;
|
||||
}
|
||||
int sort = 1;
|
||||
for (int k = 0; k < list.size(); k++) {
|
||||
XhpcRateTimeDto xhpcRateTimeDto = list.get(k);
|
||||
String startTime = xhpcRateTimeDto.getStartTime();
|
||||
String endTime = xhpcRateTimeDto.getEndTime();
|
||||
Long defaultPeriodIdMap = map.get(xhpcRateTimeDto.getId());
|
||||
String rateValues = xhpcRateTimeDto.getId();
|
||||
if (k == 0) {
|
||||
if (!"00:00:00".equals(xhpcRateTimeDto.getStartTime())) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day1 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day1; l++) {
|
||||
logger.info("下发费率>>>>>tfPricesSeq:["+number+"]"+rateValue);
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
Long defaultPeriodIdMap = map.get(rateValues);
|
||||
|
||||
String str = startTime.split(":")[0];
|
||||
int st= Integer.valueOf(str);
|
||||
String endT = endTime.split(":")[0];
|
||||
int end= Integer.valueOf(endT);
|
||||
|
||||
for (int l = st*2; l <end*2 ; l++) {
|
||||
tfPricesSeq[l]=rateValues;
|
||||
}
|
||||
|
||||
if(list.size() == 1){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day2 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day2; l++) {
|
||||
logger.info("下发费率>>>>>tfPricesSeq:["+number+"]"+rateValues);
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
} else if (k < list.size()-1) {
|
||||
//判断上条数据的结束时间是否等于现在这条数据的开始时间,不等于添加一条默认费率时段
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day3 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day3; l++) {
|
||||
logger.info("下发费率>>>>>tfPricesSeq:["+number+"]"+rateValue);
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day4 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day4; l++) {
|
||||
logger.info("下发费率>>>>>tfPricesSeq:["+number+"]"+rateValues);
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
} else {
|
||||
String endTimeK = list.get(k-1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse(endTimeK), DateUtil.parse(startTime), DateUnit.SECOND);
|
||||
int day5 = Math.toIntExact(betweenDay / 1800);
|
||||
for (int l = 0; l < day5; l++) {
|
||||
logger.info("下发费率最后1>>>>>tfPricesSeq:["+number+"]"+rateValue);
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
//时间差
|
||||
long betweenDay1 = DateUtil.between(DateUtil.parse(startTime), DateUtil.parse(endTime), DateUnit.SECOND);
|
||||
int day6 = Math.toIntExact(betweenDay1 / 1800);
|
||||
for (int l = 0; l < day6; l++) {
|
||||
logger.info("下发费率最后2>>>>>tfPricesSeq:["+number+"]"+rateValues);
|
||||
tfPricesSeq[number] = rateValues;
|
||||
number = number + 1;
|
||||
}
|
||||
if (!endTime.equals("24:00:00")) {
|
||||
//添加一条默认费率时段
|
||||
if(!endTime.equals("24:00:00")) {
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
//时间差
|
||||
long betweenDay3 = DateUtil.between(DateUtil.parse(endTime), DateUtil.parse("24:00:00"), DateUnit.SECOND);
|
||||
int day7 = Math.toIntExact(betweenDay3 / 1800);
|
||||
for (int l = 0; l < day7; l++) {
|
||||
logger.info("下发费率最后3>>>>>tfPricesSeq:["+number+"]"+rateValue);
|
||||
tfPricesSeq[number] = rateValue;
|
||||
number = number + 1;
|
||||
}
|
||||
}else{
|
||||
if(k == 0){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
}else if(k < list.size()-1){
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
}else{
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
if (!endTime.equals("24:00:00")) {
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//设置费率模型
|
||||
CacheRateModel cacheRateModel = new CacheRateModel();
|
||||
cacheRateModel.setLossRate(0);
|
||||
@ -972,9 +900,6 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
cacheRateModel.setT4SvcPrice(0);
|
||||
}
|
||||
cacheRateModel.setTfPricesSeq(tfPricesSeq);
|
||||
logger.info("下发费率>>>>>chargingStationId:"+chargingStationId);
|
||||
logger.info("下发费率>>>>>rateModelId:"+rateModelId);
|
||||
logger.info("cacheRateModel>>>>>cacheRateModel:"+cacheRateModel.toString());
|
||||
R r = powerPileService.setStationRateModel(chargingStationId, rateModelId, cacheRateModel);
|
||||
System.out.println(r.getCode());
|
||||
System.out.println(r.getMsg());
|
||||
@ -1038,9 +963,12 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
|
||||
public static void main(String[] args) {
|
||||
//时间差
|
||||
long betweenDay = DateUtil.between(DateUtil.parse("00:00:00"), DateUtil.parse("10:00:00"), DateUnit.SECOND);
|
||||
String startTime="01:00:00";
|
||||
String split = startTime.split(":")[0];
|
||||
System.out.println("split:"+split);
|
||||
int num= Integer.valueOf(split);
|
||||
|
||||
System.out.println("betweenDay:" + betweenDay);
|
||||
System.out.println(num);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,16 +1,25 @@
|
||||
package com.xhpc.payment.controller;
|
||||
|
||||
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.internal.util.AlipaySignature;
|
||||
import com.alipay.api.request.AlipayTradeCreateRequest;
|
||||
import com.alipay.api.response.AlipayTradeCreateResponse;
|
||||
import com.xhpc.common.api.PowerPileService;
|
||||
import com.xhpc.common.core.constant.HttpStatus;
|
||||
import com.xhpc.common.core.constant.StatusConstants;
|
||||
import com.xhpc.common.core.domain.R;
|
||||
import com.xhpc.common.core.utils.StringUtils;
|
||||
import com.xhpc.common.core.web.domain.AjaxResult;
|
||||
import com.xhpc.common.data.down.StartChargingData;
|
||||
import com.xhpc.payment.domain.AlipayNotifyParam;
|
||||
import com.xhpc.payment.domain.XhpcAppUser;
|
||||
import com.xhpc.payment.domain.XhpcRechargeOrder;
|
||||
import com.xhpc.payment.domain.XhpcUserAccountStatement;
|
||||
import com.xhpc.payment.mapper.XhpcUserAccountStatementMapper;
|
||||
import com.xhpc.payment.service.IXhpcRechargeOrderService;
|
||||
import com.xhpc.payment.service.IXhpcRefundOrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
@ -26,7 +35,9 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@ -41,12 +52,15 @@ public class AlipayPaymentController {
|
||||
private Environment environment;
|
||||
@Autowired
|
||||
private IXhpcRechargeOrderService iXhpcRechargeOrderService;
|
||||
//@Autowired
|
||||
//private XhpcUserAccountStatementMapper xhpcUserAccountStatementMapper;
|
||||
private static final Logger logger = LoggerFactory.getLogger(AlipayPaymentController.class);
|
||||
@Autowired
|
||||
private XhpcUserAccountStatementMapper xhpcUserAccountStatementMapper;
|
||||
@Autowired
|
||||
private PowerPileService powerPileService;
|
||||
@Autowired
|
||||
private IXhpcRefundOrderService iXhpcRefundOrderService;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AlipayPaymentController.class);
|
||||
|
||||
@PostMapping("/payment")
|
||||
@ApiOperation(value = "支付宝支付")
|
||||
private AjaxResult payment(HttpServletRequest servletRequest, @RequestBody Map<String, Object> map) throws Exception {
|
||||
@ -111,44 +125,49 @@ public class AlipayPaymentController {
|
||||
* 4
|
||||
*/
|
||||
@RequestMapping(value = "/notifyUrl")
|
||||
public void notifyUrl(HttpServletRequest request) throws Exception {
|
||||
public String notifyUrl(HttpServletRequest request) throws Exception {
|
||||
logger.info("<<<<<<<<<<<<支付宝服务器异步通知>>>>>>>>>");
|
||||
Map<String, String> params = convertRequestParamsToMap(request);
|
||||
// 将异步通知中收到的待验证所有参数都存放到map中
|
||||
logger.info("<<<<<<<<<<<<params>>>>>>>>>"+params);
|
||||
logger.info("<<<<<<<<<<<<>>>>>>>>>");
|
||||
try{
|
||||
// 调用SDK验证签名
|
||||
boolean signVerified = AlipaySignature.rsaCheckV1(params, environment.getProperty("ALIPAYPUBLICKEY"), "utf-8", "RSA2");
|
||||
if (signVerified) {
|
||||
//("支付宝回调签名认证成功");
|
||||
AlipayNotifyParam param = buildAlipayNotifyParam(params);
|
||||
String trade_status = param.getTradeStatus();
|
||||
// 支付成功
|
||||
if (trade_status.equals("TRADE_SUCCESS") || trade_status.equals("TRADE_FINISHED")) {
|
||||
// 处理支付成功逻辑
|
||||
try{
|
||||
String passbackParams = param.getPassbackParams();
|
||||
String tradeStatus = param.getTradeStatus();
|
||||
if ("TRADE_SUCCESS".equals(tradeStatus)) {
|
||||
// 业务参数主要转码回来
|
||||
JSONObject jsonObject = JSON.parseObject(URLDecoder.decode(passbackParams));
|
||||
String out_trade_no = jsonObject.getString("out_trade_no");
|
||||
String transaction_id = jsonObject.getString("transaction_id");
|
||||
paymentCallback(out_trade_no, transaction_id);
|
||||
}
|
||||
}catch (Exception e){
|
||||
//("支付宝回调业务处理报错,params:" + paramsJson, e);
|
||||
}
|
||||
}else{
|
||||
//("没有处理支付宝回调业务,支付宝交易状态:{},params:{}",trade_status,paramsJson);
|
||||
}
|
||||
|
||||
|
||||
//获取支付宝发送过来的信息
|
||||
Map<String, String> params = new HashMap<String, String>();
|
||||
Map<String, String[]> requestParams = request.getParameterMap();
|
||||
//循环获取到所有的值
|
||||
for (String str : requestParams.keySet()) {
|
||||
String name = str;
|
||||
String[] values = (String[]) requestParams.get(name);
|
||||
String valueStr = "";
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
valueStr = (i == values.length - 1) ? valueStr + values[i]
|
||||
: valueStr + values[i] + ",";
|
||||
// 业务处理失败,可查看日志进行补偿,跟支付宝已经没多大关系。
|
||||
return "success";
|
||||
}else{
|
||||
logger.info("<<<<<<<<<<<<支付宝服务器解析失败>>>>>>>>>");
|
||||
//logger.info("支付宝回调签名认证失败,signVerified=false, paramsJson:{}", paramsJson);
|
||||
return "failure";
|
||||
}
|
||||
//乱码解决,这段代码在出现乱码时使用
|
||||
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
|
||||
params.put(name, valueStr);
|
||||
}
|
||||
logger.info("支付宝回调接口1111>>>>>:"+params.toString());
|
||||
//调用SDK验证签名
|
||||
boolean signVerified = AlipaySignature.rsaCheckV1(params, environment.getProperty("ALIPAYPUBLICKEY"), "utf-8", "RSA2");
|
||||
//boolean类型signVerified为true时 则验证成功
|
||||
if (signVerified) {
|
||||
//获取到支付的状态 TRADE_SUCCESS则支付成功
|
||||
String trade_status = request.getParameter("trade_status");
|
||||
Map<String, String> yu = convertRequestParamsToMap(request);
|
||||
logger.info("支付宝回调接口>>>>>:"+yu.toString());
|
||||
if (trade_status.equals("TRADE_SUCCESS")) {
|
||||
System.out.println("支付成功");
|
||||
} else {
|
||||
System.out.println("支付失败");
|
||||
}
|
||||
}
|
||||
//签名验证失败
|
||||
else {
|
||||
logger.info("签名验证失败>>>>>:"+params.toString());
|
||||
System.out.println(AlipaySignature.getSignCheckContentV1(params));
|
||||
}catch (Exception e){
|
||||
//logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage());
|
||||
return "failure";
|
||||
}
|
||||
}
|
||||
|
||||
@ -164,7 +183,10 @@ public class AlipayPaymentController {
|
||||
return attach;
|
||||
}
|
||||
|
||||
|
||||
private AlipayNotifyParam buildAlipayNotifyParam(Map<String, String> params) {
|
||||
String json = JSON.toJSONString(params);
|
||||
return JSON.parseObject(json, AlipayNotifyParam.class);
|
||||
}
|
||||
// 将request中的参数转换成Map
|
||||
private Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
|
||||
Map<String, String> retMap = new HashMap<String, String>();
|
||||
@ -187,4 +209,61 @@ public class AlipayPaymentController {
|
||||
}
|
||||
return retMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改支付订单
|
||||
*
|
||||
* @param
|
||||
* @param
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public void paymentCallback(String out_trade_no, String transaction_id) {
|
||||
//支付订单编号
|
||||
XhpcRechargeOrder xhpcRechargeOrder = iXhpcRechargeOrderService.infoRechargeOrderNumber(out_trade_no);
|
||||
if (StringUtils.isNotNull(xhpcRechargeOrder)) {
|
||||
//修改充值订单状态
|
||||
iXhpcRechargeOrderService.updateRechargeOrder(xhpcRechargeOrder.getRechargeOrderId(), StatusConstants.OPERATION_WX_TYPE, StatusConstants.RECHARGE_ORDER_STATUS_SUCCESS, transaction_id);
|
||||
}
|
||||
Map<String, Object> appUserInfo = xhpcUserAccountStatementMapper.appUserInfo(xhpcRechargeOrder.getUserId());
|
||||
if (StringUtils.isNotNull(appUserInfo)) {
|
||||
String balance = StringUtils.valueOf(appUserInfo.get("balance"));
|
||||
BigDecimal money = BigDecimal.valueOf(Double.valueOf(balance)).add(xhpcRechargeOrder.getAmount());
|
||||
//判断用户是否在充电中
|
||||
String serialMumber = xhpcUserAccountStatementMapper.getUserHistotyChargeOrder(xhpcRechargeOrder.getUserId());
|
||||
logger.info("<<<<<<<<<<<<充电终端>>>>>>>>>serialMumber:"+serialMumber);
|
||||
if(!"".equals(serialMumber) && serialMumber !=null){
|
||||
//充电中
|
||||
postRefreshBalance(money, serialMumber);
|
||||
}
|
||||
//增加用户余额
|
||||
XhpcAppUser xhpcAppUser = new XhpcAppUser();
|
||||
xhpcAppUser.setAppUserId(xhpcRechargeOrder.getUserId());
|
||||
xhpcAppUser.setBalance(money);
|
||||
xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser);
|
||||
XhpcUserAccountStatement xhpcUserAccountStatement = new XhpcUserAccountStatement();
|
||||
xhpcUserAccountStatement.setType(StatusConstants.FLOWING_WATER_RECHARGE_TYPE);
|
||||
xhpcUserAccountStatement.setRechargeOrderId(xhpcRechargeOrder.getRechargeOrderId());
|
||||
xhpcUserAccountStatement.setUserId(xhpcRechargeOrder.getUserId());
|
||||
xhpcUserAccountStatement.setAmount(xhpcRechargeOrder.getAmount());
|
||||
xhpcUserAccountStatement.setRemainingSum(xhpcAppUser.getBalance());
|
||||
xhpcUserAccountStatement.setCreateTime(new Date());
|
||||
xhpcUserAccountStatementMapper.insert(xhpcUserAccountStatement);
|
||||
}
|
||||
}
|
||||
|
||||
private void postRefreshBalance(BigDecimal money, String serialMumber) {
|
||||
StartChargingData startChargingData =new StartChargingData();
|
||||
String su1 = serialMumber.substring(0, 14);
|
||||
String su2 = serialMumber.substring(14);
|
||||
startChargingData.setPileNo(su1);
|
||||
startChargingData.setGunId(su2);
|
||||
String s1 =money.multiply(new BigDecimal(100)).toString();
|
||||
startChargingData.setBalance(Double.valueOf(s1).intValue());
|
||||
R r = powerPileService.refreshBalance(startChargingData);
|
||||
logger.info("<<<<<<<<<<<<余额下发>>>>>>>>>");
|
||||
logger.info("<<<<<<<<<<<<"+r.getCode()+">>>>>>>>>");
|
||||
logger.info("<<<<<<<<<<<<"+r.getMsg()+">>>>>>>>>");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,249 @@
|
||||
package com.xhpc.payment.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Auther: zengyj
|
||||
* @Date: 2018/12/13 16:52
|
||||
* @Description:
|
||||
*/
|
||||
public class AlipayNotifyParam implements Serializable {
|
||||
private String appId;
|
||||
// 支付宝交易凭证号
|
||||
private String tradeNo;
|
||||
// 原支付请求的商户订单号
|
||||
private String outTradeNo;
|
||||
// 商户业务ID,主要是退款通知中返回退款申请的流水号
|
||||
private String outBizNo;
|
||||
// 买家支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字
|
||||
private String buyerId;
|
||||
// 买家支付宝账号
|
||||
private String buyerLogonId;
|
||||
// 卖家支付宝用户号
|
||||
private String sellerId;
|
||||
// 卖家支付宝账号
|
||||
private String sellerEmail;
|
||||
// 交易目前所处的状态,见交易状态说明
|
||||
private String tradeStatus;
|
||||
// 本次交易支付的订单金额
|
||||
private BigDecimal totalAmount;
|
||||
// 商家在交易中实际收到的款项
|
||||
private BigDecimal receiptAmount;
|
||||
// 用户在交易中支付的金额
|
||||
private BigDecimal buyerPayAmount;
|
||||
// 退款通知中,返回总退款金额,单位为元,支持两位小数
|
||||
private BigDecimal refundFee;
|
||||
// 商品的标题/交易标题/订单标题/订单关键字等
|
||||
private String subject;
|
||||
// 该订单的备注、描述、明细等。对应请求时的body参数,原样通知回来
|
||||
private String body;
|
||||
// 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss
|
||||
private Date gmtCreate;
|
||||
// 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss
|
||||
private Date gmtPayment;
|
||||
// 该笔交易的退款时间。格式为yyyy-MM-dd HH:mm:ss.S
|
||||
private Date gmtRefund;
|
||||
// 该笔交易结束时间。格式为yyyy-MM-dd HH:mm:ss
|
||||
private Date gmtClose;
|
||||
// 支付成功的各个渠道金额信息,array
|
||||
private String fundBillList;
|
||||
// 公共回传参数,如果请求时传递了该参数,则返回给商户时会在异步通知时将该参数原样返回。
|
||||
private String passbackParams;
|
||||
|
||||
public String getAppId() {
|
||||
return appId;
|
||||
}
|
||||
|
||||
public void setAppId(String appId) {
|
||||
this.appId = appId;
|
||||
}
|
||||
|
||||
public String getTradeNo() {
|
||||
return tradeNo;
|
||||
}
|
||||
|
||||
public void setTradeNo(String tradeNo) {
|
||||
this.tradeNo = tradeNo;
|
||||
}
|
||||
|
||||
public String getOutTradeNo() {
|
||||
return outTradeNo;
|
||||
}
|
||||
|
||||
public void setOutTradeNo(String outTradeNo) {
|
||||
this.outTradeNo = outTradeNo;
|
||||
}
|
||||
|
||||
public String getOutBizNo() {
|
||||
return outBizNo;
|
||||
}
|
||||
|
||||
public void setOutBizNo(String outBizNo) {
|
||||
this.outBizNo = outBizNo;
|
||||
}
|
||||
|
||||
public String getBuyerId() {
|
||||
return buyerId;
|
||||
}
|
||||
|
||||
public void setBuyerId(String buyerId) {
|
||||
this.buyerId = buyerId;
|
||||
}
|
||||
|
||||
public String getBuyerLogonId() {
|
||||
return buyerLogonId;
|
||||
}
|
||||
|
||||
public void setBuyerLogonId(String buyerLogonId) {
|
||||
this.buyerLogonId = buyerLogonId;
|
||||
}
|
||||
|
||||
public String getSellerId() {
|
||||
return sellerId;
|
||||
}
|
||||
|
||||
public void setSellerId(String sellerId) {
|
||||
this.sellerId = sellerId;
|
||||
}
|
||||
|
||||
public String getSellerEmail() {
|
||||
return sellerEmail;
|
||||
}
|
||||
|
||||
public void setSellerEmail(String sellerEmail) {
|
||||
this.sellerEmail = sellerEmail;
|
||||
}
|
||||
|
||||
public String getTradeStatus() {
|
||||
return tradeStatus;
|
||||
}
|
||||
|
||||
public void setTradeStatus(String tradeStatus) {
|
||||
this.tradeStatus = tradeStatus;
|
||||
}
|
||||
|
||||
public BigDecimal getTotalAmount() {
|
||||
return totalAmount;
|
||||
}
|
||||
|
||||
public void setTotalAmount(BigDecimal totalAmount) {
|
||||
this.totalAmount = totalAmount;
|
||||
}
|
||||
|
||||
public BigDecimal getReceiptAmount() {
|
||||
return receiptAmount;
|
||||
}
|
||||
|
||||
public void setReceiptAmount(BigDecimal receiptAmount) {
|
||||
this.receiptAmount = receiptAmount;
|
||||
}
|
||||
|
||||
public BigDecimal getBuyerPayAmount() {
|
||||
return buyerPayAmount;
|
||||
}
|
||||
|
||||
public void setBuyerPayAmount(BigDecimal buyerPayAmount) {
|
||||
this.buyerPayAmount = buyerPayAmount;
|
||||
}
|
||||
|
||||
public BigDecimal getRefundFee() {
|
||||
return refundFee;
|
||||
}
|
||||
|
||||
public void setRefundFee(BigDecimal refundFee) {
|
||||
this.refundFee = refundFee;
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setBody(String body) {
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public Date getGmtCreate() {
|
||||
return gmtCreate;
|
||||
}
|
||||
|
||||
public void setGmtCreate(Date gmtCreate) {
|
||||
this.gmtCreate = gmtCreate;
|
||||
}
|
||||
|
||||
public Date getGmtPayment() {
|
||||
return gmtPayment;
|
||||
}
|
||||
|
||||
public void setGmtPayment(Date gmtPayment) {
|
||||
this.gmtPayment = gmtPayment;
|
||||
}
|
||||
|
||||
public Date getGmtRefund() {
|
||||
return gmtRefund;
|
||||
}
|
||||
|
||||
public void setGmtRefund(Date gmtRefund) {
|
||||
this.gmtRefund = gmtRefund;
|
||||
}
|
||||
|
||||
public Date getGmtClose() {
|
||||
return gmtClose;
|
||||
}
|
||||
|
||||
public void setGmtClose(Date gmtClose) {
|
||||
this.gmtClose = gmtClose;
|
||||
}
|
||||
|
||||
public String getFundBillList() {
|
||||
return fundBillList;
|
||||
}
|
||||
|
||||
public void setFundBillList(String fundBillList) {
|
||||
this.fundBillList = fundBillList;
|
||||
}
|
||||
|
||||
public String getPassbackParams() {
|
||||
return passbackParams;
|
||||
}
|
||||
|
||||
public void setPassbackParams(String passbackParams) {
|
||||
this.passbackParams = passbackParams;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AlipayNotifyParam{" +
|
||||
"appId='" + appId + '\'' +
|
||||
", tradeNo='" + tradeNo + '\'' +
|
||||
", outTradeNo='" + outTradeNo + '\'' +
|
||||
", outBizNo='" + outBizNo + '\'' +
|
||||
", buyerId='" + buyerId + '\'' +
|
||||
", buyerLogonId='" + buyerLogonId + '\'' +
|
||||
", sellerId='" + sellerId + '\'' +
|
||||
", sellerEmail='" + sellerEmail + '\'' +
|
||||
", tradeStatus='" + tradeStatus + '\'' +
|
||||
", totalAmount=" + totalAmount +
|
||||
", receiptAmount=" + receiptAmount +
|
||||
", buyerPayAmount=" + buyerPayAmount +
|
||||
", refundFee=" + refundFee +
|
||||
", subject='" + subject + '\'' +
|
||||
", body='" + body + '\'' +
|
||||
", gmtCreate=" + gmtCreate +
|
||||
", gmtPayment=" + gmtPayment +
|
||||
", gmtRefund=" + gmtRefund +
|
||||
", gmtClose=" + gmtClose +
|
||||
", fundBillList='" + fundBillList + '\'' +
|
||||
", passbackParams='" + passbackParams + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@ -113,14 +113,19 @@ public class XhpcAppUserServiceImpl implements IXhpcAppUserUserService {
|
||||
if (StringUtils.isEmpty(openid)) {
|
||||
return R.fail(HttpStatus.NOT_NULL, "openid不能为空");
|
||||
}
|
||||
if (StringUtils.isEmpty(phone)) {
|
||||
return R.fail(HttpStatus.NOT_NULL, "请重新获取手机号");
|
||||
}
|
||||
if("2".equals(type)){
|
||||
if (StringUtils.isEmpty(code)) {
|
||||
return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");
|
||||
}
|
||||
String captcha = redisService.getCacheObject("pvToken:" + phone);
|
||||
if (!code.equalsIgnoreCase(captcha)) {
|
||||
R.fail(HttpStatus.ERROR_STATUS, "验证码错误");
|
||||
}
|
||||
}
|
||||
|
||||
// if (StringUtils.isEmpty(code)) {
|
||||
// return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");
|
||||
// }
|
||||
// String captcha = redisService.getCacheObject("pvToken:" + phone);
|
||||
// if (!code.equalsIgnoreCase(captcha)) {
|
||||
// R.fail(HttpStatus.ERROR_STATUS, "验证码错误");
|
||||
// }
|
||||
XhpcAppUser info = xhpcAppUserMapper.getAppUserByPhone(phone);
|
||||
if (StringUtils.isNotNull(info)) {
|
||||
return R.fail(HttpStatus.ALREADY_EXISTING, "账号已存在");
|
||||
@ -146,7 +151,10 @@ public class XhpcAppUserServiceImpl implements IXhpcAppUserUserService {
|
||||
String phone = StringUtils.valueOf(map.get("phone"));
|
||||
String type = StringUtils.valueOf(map.get("type"));
|
||||
if("18123374652".equals(phone) && "123456".equals(code)){
|
||||
return appLogin(phone, "1", "ot6ul4nlSC5ZZOC4rTLS5hedFTGk");
|
||||
if("1".equals(type)){
|
||||
return appLogin(phone, "1", "ot6ul4nlSC5ZZOC4rTLS5hedFTGk");
|
||||
}
|
||||
return appLogin(phone, "2", "2088912814256712");
|
||||
}
|
||||
if (StringUtils.isEmpty(code)) {
|
||||
return R.fail(HttpStatus.NOT_NULL, "验证码不能为空");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user