支付宝订单正式方式
This commit is contained in:
parent
568cce07b0
commit
584d854f42
@ -81,6 +81,7 @@ public class XhpcChargingPileServiceImpl implements IXhpcChargingPileService {
|
||||
Long rateModelId = Long.parseLong(StringUtils.valueOf(stringObjectMap.get("rateModelId")));
|
||||
xhpcChargingPile.setRateModelId(rateModelId);
|
||||
String serialNumber = xhpcChargingPile.getSerialNumber();
|
||||
xhpcChargingPile.setCreateTime(new Date());
|
||||
//判断桩编号是否重复
|
||||
int count = xhpcChargingPileMapper.getXhpcChargingPileSerialNumberCount(serialNumber);
|
||||
if (count > 0) {
|
||||
|
||||
@ -22,6 +22,7 @@ import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
@ -395,21 +396,37 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
|
||||
if(list.size() == 1){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
if(!endTime.equals("24:00:00")) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
}else{
|
||||
if(k == 0){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
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)) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
@ -417,12 +434,20 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
}else{
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
//添加一条默认费率时段
|
||||
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")) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
@ -619,7 +644,7 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
//终端状态用 redis数据
|
||||
if(map.get("serialNumber") !=null){
|
||||
Map<String, Object> cacheMap =redisService.getCacheMap("gun:"+map.get("serialNumber").toString());
|
||||
if(cacheMap !=null){
|
||||
if(!cacheMap.isEmpty()){
|
||||
if("空闲".equals(cacheMap.get("status"))){
|
||||
map.put("status", 2);
|
||||
}else if ("离线".equals(cacheMap.get("status"))){
|
||||
@ -657,10 +682,10 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
}
|
||||
}
|
||||
}else{
|
||||
map.put("status", 1);
|
||||
map.put("status", 5);
|
||||
}
|
||||
}else{
|
||||
map.put("status", 1);
|
||||
map.put("status", 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -691,11 +716,6 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
if (xhpcChargingStationDto.getChargingStationId() == null) {
|
||||
return AjaxResult.error("1001", "电站id为空");
|
||||
}
|
||||
//电站id不能为空
|
||||
if (xhpcChargingStationDto.getDefaultPeriodId() == null) {
|
||||
return AjaxResult.error("1001", "默认时段费率id为空");
|
||||
}
|
||||
|
||||
//判断费率和费率时间段 是否有值
|
||||
if (xhpcChargingStationDto.getXhpcRateList() == null && xhpcChargingStationDto.getXhpcRateList().size() == 0) {
|
||||
return AjaxResult.error(1001, "费率不能为空");
|
||||
@ -822,21 +842,37 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
|
||||
if(list.size() == 1){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort= addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, "00:00:00", startTime, sort, 2, rateValue);
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodIdMap, startTime, endTime, sort, 1, rateValues);
|
||||
if(!endTime.equals("24:00:00")) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
}else{
|
||||
if(k == 0){
|
||||
if(!"00:00:00".equals(xhpcRateTimeDto.getStartTime())){
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
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)) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTimeK, startTime, sort, 2, rateValue);
|
||||
}
|
||||
//并把本条数据也添加上
|
||||
@ -844,12 +880,20 @@ public class XhpcChargingStationServiceImpl implements IXhpcChargingStationServi
|
||||
}else{
|
||||
String endTimeK = list.get(k - 1).getEndTime();
|
||||
if (!endTimeK.equals(startTime)) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
//添加一条默认费率时段
|
||||
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")) {
|
||||
if(rateValue ==null || "".equals(rateValue)){
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
return AjaxResult.error("请填写默认时间段费率");
|
||||
}
|
||||
//添加一条默认费率时段
|
||||
sort = addXhpcRateTime(chargingStationId, rateModelId, defaultPeriodId, endTime, "24:00:00", sort, 2, rateValue);
|
||||
}
|
||||
|
||||
@ -195,6 +195,7 @@ public class XhpcPileOrderController extends BaseController {
|
||||
JSONObject json = new JSONObject(map);
|
||||
//消息对了内容
|
||||
webSocketService.getMessage(userId+"",json.toString());
|
||||
logger.info("桩实时数据发送WebSocket成功>>>>>orderNo:" + orderNo);
|
||||
} catch (Exception e) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("code", 500);
|
||||
|
||||
@ -77,18 +77,17 @@ public class XhpcHistoryOrderController extends BaseController {
|
||||
*/
|
||||
@GetMapping("/test3")
|
||||
@Scheduled(cron = "0 0 12 * * ?")
|
||||
public void test3() {
|
||||
public void test3(){
|
||||
add(100,3);
|
||||
}
|
||||
|
||||
/**
|
||||
* 场站统计
|
||||
*/
|
||||
@GetMapping("/test2")
|
||||
@Scheduled(cron = "0 0 11 * * ?")
|
||||
public void test2() {
|
||||
public void test2(){
|
||||
add(100,2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 日期统计
|
||||
@ -99,7 +98,7 @@ public class XhpcHistoryOrderController extends BaseController {
|
||||
//获取500条待统计历史订单
|
||||
//跨时段,跨费率,计费模型
|
||||
//日期统计
|
||||
int type = 1;
|
||||
int type =1;
|
||||
List<XhpcChargeHistoryOrder> list = xhpcHistoryOrderService.getStatistisList(100,type);
|
||||
//是否跨天
|
||||
if(list !=null && list.size()>0){
|
||||
@ -159,7 +158,7 @@ public class XhpcHistoryOrderController extends BaseController {
|
||||
}
|
||||
|
||||
//修改历史订单表状态
|
||||
XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder();
|
||||
XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder();
|
||||
xhpcHistoryOrder.setHistoryOrderId(xhpc.getHistoryOrderId());
|
||||
xhpcHistoryOrder.setState(type + 1);
|
||||
xhpcHistoryOrderService.update(xhpcHistoryOrder);
|
||||
@ -169,11 +168,11 @@ public class XhpcHistoryOrderController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 小时统计,每分钟执行
|
||||
* 小时统计
|
||||
*/
|
||||
@GetMapping("/test")
|
||||
@Scheduled(cron = "0 * * * * ?")
|
||||
public void test() {
|
||||
@Scheduled(cron = "0 */1 * * * ?")
|
||||
public void test(){
|
||||
//获取500条待统计历史订单
|
||||
//跨时段,跨费率,计费模型
|
||||
//小时统计
|
||||
|
||||
@ -280,7 +280,13 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
|
||||
Map<String, Object> operatorMessage = xhpcChargeOrderService.getOperatorMessage(xhpcChargeOrder.getChargingStationId());
|
||||
if(operatorMessage !=null){
|
||||
if(operatorMessage.get("operatorIdEvcs")!=null){
|
||||
xhpcHistoryOrder.setOperatorIdEvcs(operatorMessage.get("operatorIdEvcs").toString());
|
||||
|
||||
if(operatorMessage.get("operatorIdEvcs") !=null && "".equals(operatorMessage.get("operatorIdEvcs").toString())){
|
||||
String stw = operatorMessage.get("operatorIdEvcs").toString();
|
||||
if(stw.length()>9){
|
||||
xhpcHistoryOrder.setOperatorIdEvcs(stw.substring(8, stw.length() - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
if(operatorMessage.get("maintenanceCommissionRate") !=null && operatorMessage.get("commissionType") !=null && operatorMessage.get("platformCommissionRate") !=null){
|
||||
Integer commissionType = (Integer) operatorMessage.get("commissionType");
|
||||
@ -512,8 +518,8 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
|
||||
xhpcOrderRedisRecord.setCreateTime(date);
|
||||
xhpcChargeOrderService.addXhpcOrderRedisRecord(xhpcOrderRedisRecord);
|
||||
//删除redis
|
||||
redisService.deleteObject("order:"+orderNo);
|
||||
redisService.deleteObject("order:"+orderNo+".lord");
|
||||
//redisService.deleteObject("order:"+orderNo);
|
||||
//redisService.deleteObject("order:"+orderNo+".lord");
|
||||
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
|
||||
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
|
||||
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
|
||||
@ -629,7 +635,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
|
||||
map.put("message", "实时数据");
|
||||
map.put("userId", xhpcChargeOrder.getUserId());
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("amountCharged",divide);
|
||||
data.put("amountCharged",amountCharged);
|
||||
data.put("gunNumber",gunId);
|
||||
data.put("chargingOrderId",chargeOrderId);
|
||||
data.put("chargingTimeNumber",cacheRealtimeData.getChargingTime());
|
||||
|
||||
@ -4,8 +4,12 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.CertAlipayRequest;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.internal.util.AntCertificationUtil;
|
||||
import com.alipay.api.request.AlipayTradeAppPayRequest;
|
||||
import com.alipay.api.request.AlipayTradeCreateRequest;
|
||||
import com.alipay.api.response.AlipayTradeCreateResponse;
|
||||
import com.xhpc.common.api.PowerPileService;
|
||||
@ -37,10 +41,7 @@ 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;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@RestController
|
||||
@ -91,10 +92,32 @@ public class AlipayPaymentController {
|
||||
//生成充值订单
|
||||
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");
|
||||
|
||||
/** 初始化 **/
|
||||
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
||||
/** 支付宝网关 **/
|
||||
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
/** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/
|
||||
certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID"));
|
||||
/** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/
|
||||
certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY"));
|
||||
/** 应用公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setCertPath(environment.getProperty("CERTPATH"));
|
||||
/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setAlipayPublicCertPath(environment.getProperty("PUBLICCERTPATH"));
|
||||
/** 支付宝根证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setRootCertPath(environment.getProperty("ROOTCRETPATH"));
|
||||
/** 设置签名类型 **/
|
||||
certAlipayRequest.setSignType("RSA2");
|
||||
/** 设置请求格式,固定值json **/
|
||||
certAlipayRequest.setFormat("json");
|
||||
/** 设置编码格式 **/
|
||||
certAlipayRequest.setCharset("UTF-8");
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
||||
//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();
|
||||
String encode = URLEncoder.encode(attach);
|
||||
System.out.println("encode :"+encode);
|
||||
|
||||
request.setBizContent("{" + "\"out_trade_no\":\""+orderNumber+"\"," +
|
||||
"\"total_amount\":"+amount+"," +
|
||||
"\"subject\":\"小华充电\"," +
|
||||
@ -105,7 +128,7 @@ public class AlipayPaymentController {
|
||||
request.setNotifyUrl(environment.getProperty("ALIPAYPSERVERDOMAIN"));
|
||||
try {
|
||||
//这里和普通的接口调用不同,使用的是sdkExecute
|
||||
AlipayTradeCreateResponse response = alipayClient.execute(request);
|
||||
AlipayTradeCreateResponse response = alipayClient.certificateExecute(request);
|
||||
if(response.isSuccess()){
|
||||
String trade_no = response.getTradeNo();// 获取返回的tradeNO。
|
||||
return AjaxResult.success(trade_no);
|
||||
@ -132,8 +155,11 @@ public class AlipayPaymentController {
|
||||
logger.info("<<<<<<<<<<<<params>>>>>>>>>"+params);
|
||||
logger.info("<<<<<<<<<<<<>>>>>>>>>");
|
||||
try{
|
||||
String publiccertpath = getAlipayPublicKey(environment.getProperty("PUBLICCERTPATH"));
|
||||
logger.info("<<<<<<<<<<<<支付宝公钥证书>>>>>>>>>"+publiccertpath);
|
||||
// 调用SDK验证签名
|
||||
boolean signVerified = AlipaySignature.rsaCheckV1(params, environment.getProperty("ALIPAYPUBLICKEY"), "utf-8", "RSA2");
|
||||
boolean signVerified = AlipaySignature.rsaCheckV1(params, publiccertpath, "utf-8", "RSA2");
|
||||
logger.info("<<<<<<<<<<<<验证签名>>>>>>>>>"+signVerified);
|
||||
if (signVerified) {
|
||||
//("支付宝回调签名认证成功");
|
||||
AlipayNotifyParam param = buildAlipayNotifyParam(params);
|
||||
@ -161,14 +187,14 @@ public class AlipayPaymentController {
|
||||
// 业务处理失败,可查看日志进行补偿,跟支付宝已经没多大关系。
|
||||
return "success";
|
||||
}else{
|
||||
logger.info("<<<<<<<<<<<<支付宝服务器解析失败>>>>>>>>>");
|
||||
//logger.info("支付宝回调签名认证失败,signVerified=false, paramsJson:{}", paramsJson);
|
||||
return "failure";
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
//logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage());
|
||||
return "failure";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -266,4 +292,63 @@ public class AlipayPaymentController {
|
||||
logger.info("<<<<<<<<<<<<"+r.getMsg()+">>>>>>>>>");
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
try{
|
||||
|
||||
// String st ="{gmt_create=2021-10-15 10:14:13, charset=UTF-8, seller_email=27555730@qq.com, subject=小华充电, sign=PNRU8Rck2aTVWqgoVOOsaZFujrlt7AQrsZKWw8S4RP7Ctehgj607PZ0j8364YLuIL9SKY1G7pPAP1Zfgur1uRw5CiqygqBkDl+jVu4Wh1BYUs8Qe0S5rKHGWk27uGi2gGdEvwCoPpzOnfHpGUbz3dhlqb03rkROAHHUNgOeKeMyzU5sfUB6z/tDpXoB3bcqZoEeaBba/mlu7L3QgqAXTRVLaE5tPntZfe5Ag/Sh3M9YX+07ktxA4khvCpRsB84yT3DTAKj8qY/IWnlsf4iUcU0A8GuGRAjkYNwadOIH3N/ngmS9LPkDME+TwoJ8F1gFpx6xbYSSbq8AtoGedujJXpA==, buyer_id=2088912814256712, invoice_amount=2.84, notify_id=2021101500222101424056715726105484, fund_bill_list=[{\"amount\":\"2.16\",\"fundChannel\":\"COUPON\"},{\"amount\":\"2.84\",\"fundChannel\":\"ALIPAYACCOUNT\"}], notify_type=trade_status_sync, trade_status=TRADE_SUCCESS, receipt_amount=5.00, buyer_pay_amount=5.00, app_id=2021002156615717, sign_type=RSA2, seller_id=2088631279527183, gmt_payment=2021-10-15 10:14:23, notify_time=2021-10-15 10:14:24, passback_params=%7B%22customerId%22%3A19%2C%22money%22%3A%225%22%2C%22out_trade_no%22%3A%22000000120211015101411117%22%7D, version=1.0, out_trade_no=000000120211015101411117, total_amount=5.00, trade_no=2021101522001456715750880678, auth_app_id=2021002156615717, buyer_logon_id=181****4652, point_amount=0.00}";
|
||||
// System.out.println("map:"+st);
|
||||
// String resultInfo=st.substring(1,st.length()-1);
|
||||
// //resultInfo=resultInfo.replace(", ","&");
|
||||
// System.out.println("resultInfo="+resultInfo);
|
||||
// //回调的待验签字符串
|
||||
// //String resultInfo = "gmt_create=2021-10-14 18:55:50&charset=UTF-8&seller_email=27555730@qq.com&subject=小华充电&sign=DN7OEd6MwL1d+RsevKOPD9XGGV4hJFZ/gKRuqh2wCIN9FWlutMp654XyTPCu1jOGYaCQkjycJiriq+Cxqp6bXa0bAEKdrl+3bqfE1Cx9YjL5nvgYLuhfhoH7rrFsJVBE92lh7O541f+w8HNrTSG5Xa6lUUuqb55MEHx2GKvAISM9BChSK279FvLQV7rhmhO840QIJCgQkwm6sueLg1tVnH9nkcd0YRrE924n+mYzdRAS6Ekq2MlE2vOjHslO796oIKY0EyHb4z6liSupkmiZgQ2v5DppXiS6+/H6uLyOBMhIgMdO9ZmYRkUtHkq7emYmvjFwR2lRdy/qqnGW3OFbGw==&buyer_id=2088912814256712&invoice_amount=5.00¬ify_id=2021101400222185603056715724775024&fund_bill_list=[{\"amount\":\"5.00\",\"fundChannel\":\"ALIPAYACCOUNT\"}]¬ify_type=trade_status_sync&trade_status=TRADE_SUCCESS&receipt_amount=5.00&buyer_pay_amount=5.00&app_id=2021002156615717&sign_type=RSA2&seller_id=2088631279527183&gmt_payment=2021-10-14 18:56:03¬ify_time=2021-10-14 19:10:21&passback_params=%7B%22customerId%22%3A13%2C%22money%22%3A%225%22%2C%22out_trade_no%22%3A%22000000120211014185549114%22%7D&version=1.0&out_trade_no=000000120211014185549114&total_amount=5.00&trade_no=2021101422001456715747823733&auth_app_id=2021002156615717&buyer_logon_id=181****4652&point_amount=0.00";
|
||||
// String charset="utf-8";
|
||||
// //支付宝公钥证书
|
||||
// String alipayPublicCertPath="I:\\顶想\\充电桩\\支付宝\\10-13\\alipayCertPublicKey_RSA2.crt";
|
||||
// //签名方式
|
||||
// String sign_type="RSA2";
|
||||
// //对待签名字符串数据通过&进行拆分
|
||||
// String [] temp = resultInfo.split(", ");
|
||||
// LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
|
||||
// //把拆分数据放在map集合内
|
||||
// for (int i = 0; i < temp.length; i++) {
|
||||
// String[] arr = temp[i].split("=", 2); //通过"="号分割成2个数据
|
||||
// String[] tempAagin = new String[arr.length]; //再开辟一个数组用来接收分割后的数据
|
||||
// for (int j = 0; j < arr.length; j++) {
|
||||
// tempAagin[j] = arr[j];
|
||||
// }
|
||||
// map.put(tempAagin[0], tempAagin[1]);
|
||||
// }
|
||||
// System.out.println("map:"+map);
|
||||
// //验签方法
|
||||
// boolean signVerified= AlipaySignature.rsaCertCheckV1(map, alipayPublicCertPath, charset,sign_type);
|
||||
// if(signVerified){
|
||||
// // TODO 验签成功后
|
||||
// System.out.println("验签成功后:success");
|
||||
// }else{
|
||||
// System.out.println("验签失败后:fail");
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 从公钥证书中提取公钥
|
||||
*
|
||||
* @param alipayPublicCertPath 公钥证书存放路径,例如:/home/admin/cert.crt
|
||||
* @return 公钥
|
||||
* @throws AlipayApiException
|
||||
*/
|
||||
public static String getAlipayPublicKey(String alipayPublicCertPath) throws AlipayApiException {
|
||||
return AntCertificationUtil.getAlipayPublicKey(alipayPublicCertPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
package com.xhpc.payment.controller;
|
||||
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.CertAlipayRequest;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.domain.AlipayFundTransUniTransferModel;
|
||||
import com.alipay.api.domain.Participant;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.request.AlipayFundTransUniTransferRequest;
|
||||
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
|
||||
import com.xhpc.common.core.constant.HttpStatus;
|
||||
@ -39,6 +43,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.xml.soap.SAAJResult;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
@ -77,7 +82,9 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
@ApiOperation(value = "退款审核")
|
||||
@Transactional
|
||||
public AjaxResult info(@RequestBody XhpcRefundAudit xhpcRefundAudit) {
|
||||
Map<String, Object> map = iXhpcRefundOrderService.info(xhpcRefundAudit.getRefundOrderId());
|
||||
|
||||
Long refundOrderId = xhpcRefundAudit.getRefundOrderId();
|
||||
Map<String, Object> map = iXhpcRefundOrderService.info(refundOrderId);
|
||||
|
||||
if (null == map) {
|
||||
AjaxResult.error(HttpStatus.DATA_ERROR, "退款订单不存在");
|
||||
@ -109,9 +116,13 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
xhpcUserAccountStatementService.add(xhpcRefundAudit.getRefundOrderId(), amount, userId, StatusConstants.FLOWING_WATER_REFUND);
|
||||
String type = StringUtils.valueOf(map.get("type"));
|
||||
if (StatusConstants.OPERATION_WX_TYPE.equals(type)) {
|
||||
enterpriseCheckOut(xhpcRefundAudit);
|
||||
return enterpriseCheckOut(xhpcRefundAudit);
|
||||
}
|
||||
if (StatusConstants.OPERATION_ALI_PAY_TYPE.equals(type)) {
|
||||
return zhbCheckOut(xhpcRefundAudit);
|
||||
}
|
||||
}
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
@ -166,20 +177,24 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Object enterpriseCheckOut(@RequestBody XhpcRefundAudit xhpcRefundAudit) {
|
||||
public AjaxResult enterpriseCheckOut(@RequestBody XhpcRefundAudit xhpcRefundAudit) {
|
||||
//只有审核通过才能退款
|
||||
Long refundOrderId = xhpcRefundAudit.getRefundOrderId();
|
||||
Map<String, Object> xhpcRefundOrder = iXhpcRefundOrderService.info(xhpcRefundAudit.getRefundOrderId());
|
||||
|
||||
if (StringUtils.isNull(xhpcRefundOrder)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.DATA_ERROR, "订单不存在");
|
||||
}
|
||||
String examineStatus = StringUtils.valueOf(xhpcRefundOrder.get("examineStatus"));
|
||||
if (!"1".equals(examineStatus)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款");
|
||||
}
|
||||
|
||||
String status = StringUtils.valueOf(xhpcRefundOrder.get("status"));
|
||||
if (!"0".equals(status)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款");
|
||||
}
|
||||
|
||||
@ -200,6 +215,7 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
Double value = amount * 100;
|
||||
Integer refund_fee = value.intValue();
|
||||
if (refund_fee <= 0) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单金额出错");
|
||||
}
|
||||
String userId = StringUtils.valueOf(xhpcRefundOrder.get("userId"));
|
||||
@ -207,10 +223,12 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
String balance = StringUtils.valueOf(appUserInfo.get("balance"));
|
||||
|
||||
if (StringUtils.isNull(appUserInfo)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在");
|
||||
}
|
||||
BigDecimal surplus = BigDecimal.valueOf(Double.valueOf(balance)).subtract(BigDecimal.valueOf(amount));
|
||||
if (surplus.compareTo(BigDecimal.ZERO) == -1) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "余额不足");
|
||||
}
|
||||
String result = "";
|
||||
@ -338,6 +356,7 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
BigDecimal surplus =new BigDecimal(balance).subtract(amount);
|
||||
xhpcAppUser.setBalance(surplus);
|
||||
xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser);
|
||||
updateXhpcRefundOrder(id,2);
|
||||
}
|
||||
return AjaxResult.success("退款成功");
|
||||
}
|
||||
@ -345,6 +364,7 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
AjaxResult.error(e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
updateXhpcRefundOrder(id,1);
|
||||
return AjaxResult.error();
|
||||
}
|
||||
|
||||
@ -353,49 +373,130 @@ public class XhpcRefundAuditController extends BaseController {
|
||||
* 26 * @throws IOException
|
||||
* 27
|
||||
*/
|
||||
public void enterpriseCheckOut() throws AlipayApiException {
|
||||
public AjaxResult zhbCheckOut(@RequestBody XhpcRefundAudit xhpcRefundAudit){
|
||||
//修改订单状态
|
||||
Long refundOrderId = xhpcRefundAudit.getRefundOrderId();
|
||||
//只有审核通过才能退款
|
||||
Map<String, Object> xhpcRefundOrder = iXhpcRefundOrderService.info(xhpcRefundAudit.getRefundOrderId());
|
||||
|
||||
String orderNumber = "alipay" + DateUtils.timePath();
|
||||
if (StringUtils.isNull(xhpcRefundOrder)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.DATA_ERROR, "订单不存在");
|
||||
}
|
||||
String examineStatus = StringUtils.valueOf(xhpcRefundOrder.get("examineStatus"));
|
||||
if (!"1".equals(examineStatus)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款");
|
||||
}
|
||||
String status = StringUtils.valueOf(xhpcRefundOrder.get("status"));
|
||||
if (!"0".equals(status)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单状态不能退款");
|
||||
}
|
||||
String orderOutNumber = StringUtils.valueOf(xhpcRefundOrder.get("refundOrderNumber"));
|
||||
String uid = StringUtils.valueOf(xhpcRefundOrder.get("alipayId"));
|
||||
String money = StringUtils.valueOf(xhpcRefundOrder.get("amount"));
|
||||
Double amount = Double.parseDouble(StringUtils.valueOf(xhpcRefundOrder.get("amount")));
|
||||
//退款金额单位为分
|
||||
Double value = amount * 100;
|
||||
Integer refund_fee = value.intValue();
|
||||
if (refund_fee <= 0) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "订单金额出错");
|
||||
}
|
||||
String userId = StringUtils.valueOf(xhpcRefundOrder.get("userId"));
|
||||
Map<String, Object> appUserInfo = xhpcUserAccountStatementMapper.appUserInfo(Long.parseLong(userId));
|
||||
String balance = StringUtils.valueOf(appUserInfo.get("balance"));
|
||||
|
||||
String filePath = this.getClass().getResource("/").getPath() + "证书名字";
|
||||
System.out.println(filePath);
|
||||
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
||||
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID"));
|
||||
certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY"));//密钥
|
||||
certAlipayRequest.setFormat("json");
|
||||
certAlipayRequest.setCharset("UTF-8");
|
||||
certAlipayRequest.setSignType("RSA2");
|
||||
certAlipayRequest.setCertPath(filePath + "appCertPublicKey.crt");//应用证书
|
||||
certAlipayRequest.setAlipayPublicCertPath(filePath + "alipayCertPublicKey_RSA2.crt");//支付证书
|
||||
certAlipayRequest.setRootCertPath(filePath + "alipayRootCert.crt");
|
||||
DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
//价格
|
||||
Double money = 0.01;
|
||||
//转账标题
|
||||
String order_title = "支付宝提现";
|
||||
//支付宝会员id
|
||||
String identity = "123";
|
||||
//实名信息
|
||||
String name = "";
|
||||
request.setBizContent("{" +
|
||||
"\"out_biz_no\":\"201806300001\"," +
|
||||
if (StringUtils.isNull(appUserInfo)) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.DATA_ERROR, "用户不存在");
|
||||
}
|
||||
BigDecimal surplus = BigDecimal.valueOf(Double.valueOf(balance)).subtract(BigDecimal.valueOf(amount));
|
||||
if (surplus.compareTo(BigDecimal.ZERO) == -1) {
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
return AjaxResult.error(HttpStatus.ERROR_STATUS, "余额不足");
|
||||
}
|
||||
try {
|
||||
String orderNumber = "alipay" + DateUtils.timePath();
|
||||
/** 初始化 **/
|
||||
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
||||
/** 支付宝网关 **/
|
||||
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
/** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/
|
||||
certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID"));
|
||||
/** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/
|
||||
certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY"));
|
||||
/** 应用公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setCertPath(environment.getProperty("CERTPATH"));
|
||||
/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setAlipayPublicCertPath(environment.getProperty("PUBLICCERTPATH"));
|
||||
/** 支付宝根证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setRootCertPath(environment.getProperty("ROOTCRETPATH"));
|
||||
/** 设置签名类型 **/
|
||||
certAlipayRequest.setSignType("RSA2");
|
||||
/** 设置请求格式,固定值json **/
|
||||
certAlipayRequest.setFormat("json");
|
||||
/** 设置编码格式 **/
|
||||
certAlipayRequest.setCharset("UTF-8");
|
||||
|
||||
"\"trans_amount\":" + money + "," +
|
||||
"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +
|
||||
"\"biz_scene\":\"DIRECT_TRANSFER\"," +
|
||||
"\"order_title\":\"" + order_title + "\"," +
|
||||
"\"payee_info\":{" +
|
||||
"\"identity\":\"" + identity + "\"," +
|
||||
"\"identity_type\":\"ALIPAY_USER_ID \"," +
|
||||
" }," +
|
||||
" }");
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
||||
/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.fund.trans.uni.transfer(单笔转账接口) **/
|
||||
AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();
|
||||
/** 设置业务参数,具体接口参数传值以文档说明为准:https://opendocs.alipay.com/apis/api_28/alipay.fund.trans.uni.transfer/ **/
|
||||
AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();
|
||||
/** 商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一 **/
|
||||
model.setOutBizNo(orderNumber);
|
||||
/** 转账金额,TRANS_ACCOUNT_NO_PWD产品取值最低0.1 **/
|
||||
model.setTransAmount(money);
|
||||
/** 产品码,单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD **/
|
||||
model.setProductCode("TRANS_ACCOUNT_NO_PWD");
|
||||
/** 场景码,单笔无密转账到支付宝账户固定为:DIRECT_TRANSFER **/
|
||||
model.setBizScene("DIRECT_TRANSFER");
|
||||
/** 转账业务的标题,用于在支付宝用户的账单里显示 **/
|
||||
model.setOrderTitle("转账标题");
|
||||
Participant participant = new Participant();
|
||||
/** 参与方的唯一标识,收款支付宝账号或者支付宝吧账号唯一会员ID **/
|
||||
participant.setIdentity(uid);
|
||||
/** 参与方的标识类型:ALIPAY_USER_ID 支付宝的会员ID **/
|
||||
participant.setIdentityType("ALIPAY_USER_ID");
|
||||
model.setPayeeInfo(participant);
|
||||
/** 业务备注 **/
|
||||
model.setRemark("单笔转账--"+orderOutNumber);
|
||||
request.setBizModel(model);
|
||||
AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);
|
||||
/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:https://opensupport.alipay.com/support/helpcenter/107 **/
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
Map<String, Object> appUserInfo1 = xhpcUserAccountStatementMapper.appUserInfo(Long.parseLong(userId));
|
||||
//退款成功修改订单
|
||||
if (StringUtils.isNotNull(appUserInfo1)) {
|
||||
String balance1 = StringUtils.valueOf(appUserInfo1.get("balance"));
|
||||
//减少用户余额
|
||||
XhpcAppUser xhpcAppUser = new XhpcAppUser();
|
||||
xhpcAppUser.setAppUserId(Long.parseLong(userId));
|
||||
BigDecimal surplus1 =new BigDecimal(balance1).subtract(BigDecimal.valueOf(amount));
|
||||
xhpcAppUser.setBalance(surplus1);
|
||||
xhpcUserAccountStatementMapper.updateAppUserBalance(xhpcAppUser);
|
||||
|
||||
updateXhpcRefundOrder(refundOrderId,1);
|
||||
}
|
||||
return AjaxResult.success("退款成功");
|
||||
} else {
|
||||
System.out.println("调用失败");
|
||||
|
||||
}
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
updateXhpcRefundOrder(refundOrderId,2);
|
||||
|
||||
return AjaxResult.error("退款失败");
|
||||
}
|
||||
|
||||
public void updateXhpcRefundOrder(Long refundOrderId,Integer status){
|
||||
XhpcRefundOrder refundOrder =new XhpcRefundOrder();
|
||||
refundOrder.setRefundOrderId(refundOrderId);
|
||||
refundOrder.setStatus(status);
|
||||
iXhpcRefundOrderService.update(refundOrder);
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +42,10 @@ public class XhpcRefundAuditServiceImpl implements IXhpcRefundAuditService {
|
||||
XhpcRefundOrder xhpcRefundOrder = new XhpcRefundOrder();
|
||||
xhpcRefundOrder.setRefundOrderId(xhpcRefundAudit.getRefundOrderId());
|
||||
xhpcRefundOrder.setExamineStatus(xhpcRefundAudit.getStatus());
|
||||
|
||||
xhpcRefundOrder.setStatus(StatusConstants.REFUND_ORDER_STATUS_WAIT);
|
||||
|
||||
|
||||
int updateStatus = xhpcRefundOrderMapper.updateExamineStatus(xhpcRefundOrder);
|
||||
if (updateStatus == 0) {
|
||||
return AjaxResult.error();
|
||||
|
||||
@ -23,6 +23,10 @@ spring:
|
||||
# 共享配置
|
||||
shared-configs:
|
||||
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
|
||||
logging:
|
||||
level:
|
||||
com.xhpc.order.mapper: debug
|
||||
|
||||
##获取微信openid地址
|
||||
WXGETJSCODE: "https://api.weixin.qq.com/sns/jscode2session?appid=wxb14ef93e9b7901f3&secret=b5c5672141b5930c30a1abee95a2dcbf&js_code="
|
||||
##阿里云身份证验证地址
|
||||
@ -45,8 +49,14 @@ WXTRANSFERS: "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfer
|
||||
#支付宝支付回调地址
|
||||
ALIPAYPSERVERDOMAIN: "https://www.scxhua.cn/prod-api/xhpc-payment/alipay/notifyUrl"
|
||||
#支付宝公钥
|
||||
ALIPAYPUBLICKEY: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjHDksTgZTpf0wh7oeTVRp0h3SqzTM2smjEJnx9jF1+q3WSXLRB4OzSzq7VsJ/szcyK10ZGO5PxeQ4u9GAG/U+7xhs7ei1cJB/Er55Sg9SbjfkTpwlDv181UJCRJJ/IAcqyqezwTpB8e2trYmHKovUdt0KR9/tVkGa7hsNd5GfxTOUaAFc3zADqRVM+wGimtG0NYfOF2f8tkmBEAiMMLKq5pbAnHU723a1cm/nfVp7gvXfsnO0k2GvRuHzb8mxIhWLiAnwdK9gEu5za/jWxo/xIvf2sdJPYdWj+yfyzA2e1fJkx4uRUzX31CXxZvP2/tfEcnTdI0gxN+OH2eAMiPVswIDAQAB"
|
||||
ALIPAYPUBLICKEY:
|
||||
#应用私钥
|
||||
ALIPAYPRIVATEKEY: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6goPD1M6MqF31hS9+hnzXDvILjaw2AFLhgbXUp4UD+8N1pvx7PkzMzPj9OWLBl0GZyDOwSJnboan4Gw/DGwekHVcgnGJWmlojquqE9ZB0Nu69AkhIs9KnHsYe5QnjLSwa7e+InoRKqB4/XscQ4GnKG8Wpq8UH9O9lqgKdnY9+ShcsEJkY88AzmlMIQtluXlweXfEUnfPVxOCZwX0yEaLYdoJMLgcp6QD+IBpJ049vpPFzzsCzp4j7agInzPlNkG+euOEkC+EWMmLd6P0hXN4OJ4dNSo8IwUcV1cbXHL8FmtnavWnk0pykNZYqeKQdCh+JdhU50t/dmXhuM1ejEe5RAgMBAAECggEAZRo230NOrETgmiUWd9njdpjtcIHd5nAKfZ/Yt2wP2PbzH6Xjm9NLwoEiP/KJrDOYJgq2qkrQzJQ4FPxmcPcID1iwUEc1r4iAcHFIK8cKBVV52Q+Rq4d/G4S9FSZHU9S64eY1QLPdNrMnomZ4NpfQAPVJEw7AAe4uj8e3H0W38Va+4QBVYgov1UAJxbsE9jue8NeBMoLRCol/lu/lXH2ndYK4EpCgiK7xNdg8SuIt5hIoYqmQ3Pbd6Fn64AL8cZqiLiFjVoMTBfYbuv99UwyYrm12WAqJ4fAnzwJvozYbBvZPqZYeor8L0Qv1RJUy0KDnWciRgSJQ+Vo3kXlLH7DK2QKBgQDrqUNZnAL0V+RttCkwF2m0GXgplZXVfC1dIXxNsrJaEQ/4/Q3mYI52cMFOd7T09PCGXw4MU9b90srzPTbxSzUCXUfGeNimr+Ivhz5sDiVkJEv5DdowJaos0/yH4kSBFGPN8DOiDoGBBfAUBojZl0gS3eHMGmjwkXGkWZ3O3WE43wKBgQDKm0sa5LIP1/bfP5JmanNuGBOjTsBhApGEavjBtEzSqhIkj2IrlglQ6b2ckfubAsDhoMtYE32gDBnPiFOAlwmrTuB72XWoAnzdkJupklEH1dafBuT20JIRQXjeTD2kl1Ffa3+IN2miDXJ4slaNiEDYo1YPUYLaL7Kfoy84JP9OzwKBgEjWaBqqPb+H6vJ9XL2gfutLc/hmY4k4eEzwrJrXQIjV/TnX/RPXhDDXaOf319ZeXnkpqA3nW+vX2yKTKQgrVpcEfcq6Tzw14JMQGhsLxELPdSvlPCrleVOhscvOA55hzvc35r2P/jcCvtFxs5qNR5mNOtz6zLSOP7GsgToO8p3BAoGBAKzk9KSQgHsQurUsVMxdDv/mP+veakDepjsv5fO23s/vHehhC09Si8Smko4n7WQMZ3ijdKNGjq+jY+s71LYpLbEocFx/5+1lohSZMJz2JXvgOXQfuAf/WIatLm3U9c2c623YGE6vqs8FVqg017OTkHLOf8Q2tMloZq/f24231L71AoGALwpnQdJG11G/IVb5D8YA1LbASOztW1M5RX9YeVkqISIOFzM+872PUgUq04Qa0QB+P+BOo3TS58o+Q8R6ErTiYF84X2z6nX0dgDzIB3pV6t+VQFCBO5PtsYaSgJQ4H3i5y9i2e5Zt34s9dZ5rdm2BD/RoGijVM9U+ccrNId4wWRE="
|
||||
ALIPAYPRIVATEKEY: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCGHX1s315EKjoIBkNiF3IxCAmvtVg+TdCDL/XmJZWdcZ23tEWmmIMsLRCLUKsaPfTEhnqD6EFJnmpJu4teDImo3aDbOoO31YFEXjMXUnTTS/dtDVEo1OecsRL+Re43KSohOkIL1TMyTuNfeIglQTuhCSZ3LOEOx4OHpYwcrLp8p1ORvAS7x35nsmjLp3oQTJo9RWfzfEaKbm6cxsWLKyr5/5eGDXrUHNC5hIDLjoJbe6iqNKyIiPJHtPZfJ36PcWa7PFvx4X+Ded32KZb2AA3p9w/HX7gn1MnRfT5NGH0k3ggxLNarDU8g6JjQYgNtmE/R8gbp99BudZNfDoSF1llNAgMBAAECggEAaTa9bSoXM/bErALt3ghyx1B8+OGVpts5F5IKoVEe/PNjPfkpIzdGwONhtUnF0cKFQaAWgWE1xuGGlO2Sumevn1Cvnw1axF+1F8Om5UcE67cPFvh5kUTlpyGrutt1tMSQjpy7r7jEf1UwP3e5pzBz7TPWf2wv635OC56uOtivPJZ+8vg7VYon/mNXQuL4AavoxfSDtvo0ad30X2fK1WKeeBtgiT4UzV6ZGZh5igKQHM4lVvmbo/jOeQD0KAod7pRe/h4FBFmCVIWwgW+I+Hnzp8A/nJezoowJ3jiTt0FodC9uBCT64ZCz5dVCryD62LDVjKBxB7cfIoQA+PxCiXr9QQKBgQD+2v38J/MlfK/XCYldclzumizwIw6T0Mv6XvYwXQHYgYDKYNF6k1LhMEUo7fP3EsPdV8h/nXmdU4qadOVm6QSJ/rGEl22yGlO7woUzTY/Ls9eknoqfMYuyI1+ICMnNxmesQbWyc0cOHh44cEF+icfJxEDAmrHGLmBVsKuLUJUuVQKBgQCGt663TF7mixghiUOcT11zC1fqG+dIcvAwHpCHfdxsniYRqnv+SLf6eC5PCkQ5aNAAl/ywOLQAWS0XgYti3LyZ4iuGIYcUE0IDDmhWl68V27iXcLIK+rBRqBGxSdk8xR+zSE8fpO4mXpxn8SH0Butex8PJ+oHTbmdXIUAXdn6HGQKBgQCvAB1rqtsRoL72ADxtCHy78u5srwXxhmyqrc6LgzIjQzn2vejaLJO6wfSbmFnwDNimAwNQbgf2ekkwqphjxBozz8qB66GNrPpWccoZYmcdT48CIUO68MCmQBf3R2GbhWPnKu/ja7kc/p1tz9eJVn70E2kLWK4+EdZgwQHqlhj6SQKBgF4AmbdpYOb5s9Li1vyhHJIEHkpLQi15lkPdb/g7SK26BNJa5b5fu5DYf2fDwCtXCZ0AcN/+EQwVLbOzPzGy2R9/g+NKTdkiPvOnAAM8QH2+HaX+ix3CI3o3DnFpGF6hJieRkzR/f3Ximryks451rZMrTWEIncKMzSstFm3Izy0xAoGBAJQaMqlzpM+QaJiytJNeqRpPWRsi0Dkf4XqJXPWLOrApSISsafZF5vk2ZOeIqRsVCBH3LdfVIJxEBAF4l/Sd2q7xC9JHawJDqa4ea7VwL68ANH2w3jcJ3j6DQqf7NIe/lSGxYF6Jt+74oRFHxN3GDSf+z91DYfZz8hQnyphKDNEJ"
|
||||
#支付宝appid
|
||||
ALIPAYAPPID: "2021002156615717"
|
||||
#应用公钥证书路径
|
||||
CERTPATH: "/www/wwwroot/scxhua.cn/xhpc-payment/appCertPublicKey.crt"
|
||||
#支付宝公钥证书路径
|
||||
PUBLICCERTPATH: "/www/wwwroot/scxhua.cn/xhpc-payment/alipayCertPublicKey_RSA2.crt"
|
||||
#支付宝根证书路径
|
||||
ROOTCRETPATH: "/www/wwwroot/scxhua.cn/xhpc-payment/alipayRootCert.crt"
|
||||
|
||||
@ -2,7 +2,9 @@ package com.xhpc.user.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.CertAlipayRequest;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
|
||||
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
|
||||
@ -20,6 +22,12 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.security.PublicKey;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.CertificateFactory;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
@ -219,11 +227,36 @@ public class XhpcAppUserController extends BaseController {
|
||||
@ApiOperation("支付宝授权")
|
||||
@PostMapping("/alipayEmpower")
|
||||
public AjaxResult alipayEmpower(@RequestParam String code) throws Exception {
|
||||
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", environment.getProperty("ALIPAYAPPID"), environment.getProperty("ALIPAYPRIVATEKEY"), "json", "utf-8", environment.getProperty("ALIPAYPUBLICKEY"), "RSA2");
|
||||
|
||||
/** 初始化 **/
|
||||
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
||||
/** 支付宝网关 **/
|
||||
certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
/** 应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024 **/
|
||||
certAlipayRequest.setAppId(environment.getProperty("ALIPAYAPPID"));
|
||||
/** 应用私钥, 如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602471154?ant_source=antsupport **/
|
||||
certAlipayRequest.setPrivateKey(environment.getProperty("ALIPAYPRIVATEKEY"));
|
||||
/** 应用公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setCertPath(environment.getProperty("CERTPATH"));
|
||||
/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setAlipayPublicCertPath(environment.getProperty("PUBLICCERTPATH"));
|
||||
/** 支付宝根证书路径,下载后保存位置的绝对路径 **/
|
||||
certAlipayRequest.setRootCertPath(environment.getProperty("ROOTCRETPATH"));
|
||||
/** 设置签名类型 **/
|
||||
certAlipayRequest.setSignType("RSA2");
|
||||
/** 设置请求格式,固定值json **/
|
||||
certAlipayRequest.setFormat("json");
|
||||
/** 设置编码格式 **/
|
||||
certAlipayRequest.setCharset("UTF-8");
|
||||
AlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);
|
||||
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
|
||||
request.setGrantType("authorization_code");
|
||||
// auth_code 前端授权后得到的授权码
|
||||
request.setCode(code);
|
||||
AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
|
||||
AlipaySystemOauthTokenResponse response = alipayClient.certificateExecute(request);
|
||||
//服务端请求返回,RSA2密钥和公钥证书请求方式不同,如当面付
|
||||
// RSA2密钥请求response = alipayClient.execute(request);
|
||||
// 公钥证书请求请求response = alipayClient.certificateExecute(request);
|
||||
if (response.isSuccess()) {
|
||||
System.out.println("调用成功");
|
||||
} else {
|
||||
@ -242,4 +275,15 @@ public class XhpcAppUserController extends BaseController {
|
||||
return iXhpcAppUserUserService.logout(phone, code);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -26,8 +26,14 @@ spring:
|
||||
#获取微信openid地址
|
||||
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:
|
||||
#应用私钥
|
||||
ALIPAYPRIVATEKEY: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6goPD1M6MqF31hS9+hnzXDvILjaw2AFLhgbXUp4UD+8N1pvx7PkzMzPj9OWLBl0GZyDOwSJnboan4Gw/DGwekHVcgnGJWmlojquqE9ZB0Nu69AkhIs9KnHsYe5QnjLSwa7e+InoRKqB4/XscQ4GnKG8Wpq8UH9O9lqgKdnY9+ShcsEJkY88AzmlMIQtluXlweXfEUnfPVxOCZwX0yEaLYdoJMLgcp6QD+IBpJ049vpPFzzsCzp4j7agInzPlNkG+euOEkC+EWMmLd6P0hXN4OJ4dNSo8IwUcV1cbXHL8FmtnavWnk0pykNZYqeKQdCh+JdhU50t/dmXhuM1ejEe5RAgMBAAECggEAZRo230NOrETgmiUWd9njdpjtcIHd5nAKfZ/Yt2wP2PbzH6Xjm9NLwoEiP/KJrDOYJgq2qkrQzJQ4FPxmcPcID1iwUEc1r4iAcHFIK8cKBVV52Q+Rq4d/G4S9FSZHU9S64eY1QLPdNrMnomZ4NpfQAPVJEw7AAe4uj8e3H0W38Va+4QBVYgov1UAJxbsE9jue8NeBMoLRCol/lu/lXH2ndYK4EpCgiK7xNdg8SuIt5hIoYqmQ3Pbd6Fn64AL8cZqiLiFjVoMTBfYbuv99UwyYrm12WAqJ4fAnzwJvozYbBvZPqZYeor8L0Qv1RJUy0KDnWciRgSJQ+Vo3kXlLH7DK2QKBgQDrqUNZnAL0V+RttCkwF2m0GXgplZXVfC1dIXxNsrJaEQ/4/Q3mYI52cMFOd7T09PCGXw4MU9b90srzPTbxSzUCXUfGeNimr+Ivhz5sDiVkJEv5DdowJaos0/yH4kSBFGPN8DOiDoGBBfAUBojZl0gS3eHMGmjwkXGkWZ3O3WE43wKBgQDKm0sa5LIP1/bfP5JmanNuGBOjTsBhApGEavjBtEzSqhIkj2IrlglQ6b2ckfubAsDhoMtYE32gDBnPiFOAlwmrTuB72XWoAnzdkJupklEH1dafBuT20JIRQXjeTD2kl1Ffa3+IN2miDXJ4slaNiEDYo1YPUYLaL7Kfoy84JP9OzwKBgEjWaBqqPb+H6vJ9XL2gfutLc/hmY4k4eEzwrJrXQIjV/TnX/RPXhDDXaOf319ZeXnkpqA3nW+vX2yKTKQgrVpcEfcq6Tzw14JMQGhsLxELPdSvlPCrleVOhscvOA55hzvc35r2P/jcCvtFxs5qNR5mNOtz6zLSOP7GsgToO8p3BAoGBAKzk9KSQgHsQurUsVMxdDv/mP+veakDepjsv5fO23s/vHehhC09Si8Smko4n7WQMZ3ijdKNGjq+jY+s71LYpLbEocFx/5+1lohSZMJz2JXvgOXQfuAf/WIatLm3U9c2c623YGE6vqs8FVqg017OTkHLOf8Q2tMloZq/f24231L71AoGALwpnQdJG11G/IVb5D8YA1LbASOztW1M5RX9YeVkqISIOFzM+872PUgUq04Qa0QB+P+BOo3TS58o+Q8R6ErTiYF84X2z6nX0dgDzIB3pV6t+VQFCBO5PtsYaSgJQ4H3i5y9i2e5Zt34s9dZ5rdm2BD/RoGijVM9U+ccrNId4wWRE="
|
||||
ALIPAYPRIVATEKEY: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCGHX1s315EKjoIBkNiF3IxCAmvtVg+TdCDL/XmJZWdcZ23tEWmmIMsLRCLUKsaPfTEhnqD6EFJnmpJu4teDImo3aDbOoO31YFEXjMXUnTTS/dtDVEo1OecsRL+Re43KSohOkIL1TMyTuNfeIglQTuhCSZ3LOEOx4OHpYwcrLp8p1ORvAS7x35nsmjLp3oQTJo9RWfzfEaKbm6cxsWLKyr5/5eGDXrUHNC5hIDLjoJbe6iqNKyIiPJHtPZfJ36PcWa7PFvx4X+Ded32KZb2AA3p9w/HX7gn1MnRfT5NGH0k3ggxLNarDU8g6JjQYgNtmE/R8gbp99BudZNfDoSF1llNAgMBAAECggEAaTa9bSoXM/bErALt3ghyx1B8+OGVpts5F5IKoVEe/PNjPfkpIzdGwONhtUnF0cKFQaAWgWE1xuGGlO2Sumevn1Cvnw1axF+1F8Om5UcE67cPFvh5kUTlpyGrutt1tMSQjpy7r7jEf1UwP3e5pzBz7TPWf2wv635OC56uOtivPJZ+8vg7VYon/mNXQuL4AavoxfSDtvo0ad30X2fK1WKeeBtgiT4UzV6ZGZh5igKQHM4lVvmbo/jOeQD0KAod7pRe/h4FBFmCVIWwgW+I+Hnzp8A/nJezoowJ3jiTt0FodC9uBCT64ZCz5dVCryD62LDVjKBxB7cfIoQA+PxCiXr9QQKBgQD+2v38J/MlfK/XCYldclzumizwIw6T0Mv6XvYwXQHYgYDKYNF6k1LhMEUo7fP3EsPdV8h/nXmdU4qadOVm6QSJ/rGEl22yGlO7woUzTY/Ls9eknoqfMYuyI1+ICMnNxmesQbWyc0cOHh44cEF+icfJxEDAmrHGLmBVsKuLUJUuVQKBgQCGt663TF7mixghiUOcT11zC1fqG+dIcvAwHpCHfdxsniYRqnv+SLf6eC5PCkQ5aNAAl/ywOLQAWS0XgYti3LyZ4iuGIYcUE0IDDmhWl68V27iXcLIK+rBRqBGxSdk8xR+zSE8fpO4mXpxn8SH0Butex8PJ+oHTbmdXIUAXdn6HGQKBgQCvAB1rqtsRoL72ADxtCHy78u5srwXxhmyqrc6LgzIjQzn2vejaLJO6wfSbmFnwDNimAwNQbgf2ekkwqphjxBozz8qB66GNrPpWccoZYmcdT48CIUO68MCmQBf3R2GbhWPnKu/ja7kc/p1tz9eJVn70E2kLWK4+EdZgwQHqlhj6SQKBgF4AmbdpYOb5s9Li1vyhHJIEHkpLQi15lkPdb/g7SK26BNJa5b5fu5DYf2fDwCtXCZ0AcN/+EQwVLbOzPzGy2R9/g+NKTdkiPvOnAAM8QH2+HaX+ix3CI3o3DnFpGF6hJieRkzR/f3Ximryks451rZMrTWEIncKMzSstFm3Izy0xAoGBAJQaMqlzpM+QaJiytJNeqRpPWRsi0Dkf4XqJXPWLOrApSISsafZF5vk2ZOeIqRsVCBH3LdfVIJxEBAF4l/Sd2q7xC9JHawJDqa4ea7VwL68ANH2w3jcJ3j6DQqf7NIe/lSGxYF6Jt+74oRFHxN3GDSf+z91DYfZz8hQnyphKDNEJ"
|
||||
#支付宝appid
|
||||
ALIPAYAPPID: "2021002156615717"
|
||||
#应用公钥证书路径
|
||||
CERTPATH: "/www/wwwroot/scxhua.cn/xhpc-user/appCertPublicKey.crt"
|
||||
#支付宝公钥证书路径
|
||||
PUBLICCERTPATH: "/www/wwwroot/scxhua.cn/xhpc-user/alipayCertPublicKey_RSA2.crt"
|
||||
#支付宝根证书路径
|
||||
ROOTCRETPATH: "/www/wwwroot/scxhua.cn/xhpc-user/alipayRootCert.crt"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user