begin new project
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package com.peanut.modules.pay.alipay.config;
|
||||
|
||||
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
|
||||
/**
|
||||
* 支付宝开放平台常量
|
||||
*/
|
||||
public class AliPayConfig {
|
||||
|
||||
/**
|
||||
* 花生appId 沙箱id 2021002161620176
|
||||
*/
|
||||
public static final String HS_APP_ID ="2021003191621137";
|
||||
//花生应用私钥
|
||||
public static final String HS_MERCHANT_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCa+oIVGBAKp+VjHIeE/IFUFWifnUWQYBPwffWEC5+EKJbqEC/wcVSfZPKXpPAB3T0c6V6yxCOMxguUZEdeRM5W93Wf0jktrtius34Xo79vgnLXsj2TtAN1ku9Qp5ebVVw+WPdpIl1nOFNwCoiaSPmwXOsVIT5MccxUvmGUDNUg8dYVoD9WHYu13O30c4vm+jYGCu7lviRqcjnEFooJ/ORocLqJbHFaTzWMGiiAYnUUSTL1BI5vhDNJDhm3B5wUZ7/j49EWQYZbV0fXlCrZRerfPLrAgXYR95P+62K9Xh8edzThTrPXmLXP9/jTqz2118ijXSoF8EgfhVD2NLCSDid3AgMBAAECggEAR3cPN0TyWMeVer+0Knn59Vkt9rSiWHJFn5el+K8Xbuz8spCmWp0YJax6Rb10Q5fOz5854PubXRYSTupzEqBt+iKApiNd5JgFKYJxudrzsysXZCm4RX00PypzmuC9g464S7Pg2yVSpv+NUlQ5K9RM96vRZ9v9i2jKjaWA/7FvMpI3auOJgrJVoSbPYNx6/QIN1b9imukCMSga9OzF66LhfzACWxJx+DzgAX+7GcfhTF8PbhytPPg9LhlfcGq2gA/TcG6zUorFz5Qy+k//g4rxIvjcPnGfcRgoT+Xgi7I8wnm3O5icIZ6k6+B+wwN3zRTBSmXwbwsgdncGA1RUhe2tAQKBgQDweYu2ij8Io/g7KCvCtVpGHqhzKxgaOZXy0nvPFXY5KFcrrapACriztCaxjvRTXm7t25KJQazICs50OvyTZL5+U3GHp/8GK7KwzZKz5NkHHMtKoKwQADBNau/nHdro4E+PnvL9ucaFX69JF4DZqiw2aDkQkDB/BablHyvuTagJgQKBgQCk++uzero6bXOxFMadLLyWTvlOJP71U1fVSf4Nou+L4ce7k2bMpSDyEDNDOUW3WOO7zz9i8mFGCTUaoX3mhC+B9UQqKZXK2rjFgZtkNDumoCTzvjuPIWTMNN6ABetiLxbq/UD0O1xwThVQNmYwTOzwMHUMkT21ynD23KXE0JL89wKBgGg1Q8YmwooMBFYeYlhOHoCkaHsAAcHbko9Xhy+GLWU3hg73gv+dpcy6FMp9GIPIOGn67NVuEGHfzPexWCLHVYWIw3n14x3ZceYML7alRSc/4xjD58xHSKdD4BJXbbXc/p1OVB5/kvfZLyyNctjgVah+Ibx7v4hL+rbveyoZnOgBAoGAG34je+giqmPc2JB2vHBdCMsmPkBqACWgSFmpLUqOkofQSdC5W7bUs6HBeR1NIc19Pam+jVWIoiwcnlB083nplMVzU3dUj9Y83iTH6T3PBug+4CM+N47ABkt1HG5gGB9yuTv0m/5cXBaW9KPsCXZ4MVpR1wNI/kc65dhFA3QiWmcCgYEA6CfUjOWe201IC332e142WfPGp7hy8p6RHrPtlXS5YnuxVsJVusyuncVdG10kPkvPHakFokqNNUW76Trf++IPnNooMP9ucYj060hYTM7JK9F0mAdx0Mo/+nDC7voXw8rBSsLZHAWfxMh/KjQ5D7L6E2S71wP6ep25hoOuuuLTnrI=";
|
||||
//应用公钥
|
||||
public static final String HS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmvqCFRgQCqflYxyHhPyBVBVon51FkGAT8H31hAufhCiW6hAv8HFUn2Tyl6TwAd09HOlessQjjMYLlGRHXkTOVvd1n9I5La7YrrN+F6O/b4Jy17I9k7QDdZLvUKeXm1VcPlj3aSJdZzhTcAqImkj5sFzrFSE+THHMVL5hlAzVIPHWFaA/Vh2Ltdzt9HOL5vo2Bgru5b4kanI5xBaKCfzkaHC6iWxxWk81jBoogGJ1FEky9QSOb4QzSQ4ZtwecFGe/4+PRFkGGW1dH15Qq2UXq3zy6wIF2EfeT/utivV4fHnc04U6z15i1z/f406s9tdfIo10qBfBIH4VQ9jSwkg4ndwIDAQAB";
|
||||
//支付宝公钥
|
||||
public static final String HS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiVLUVTnNuq+2C1FRtcIRcG3rCgtVVulkz2QljKbPr7NNWTJJIIfGwyhNuH76s5D1lvNmn2NkuoqM0cMJCSd+W+JW9KpdQ0dgumFHCoRA/OWUoqpLvEOmm2hRMaWpvd+OQq2aPz+p+z6pqZ9SAlgUIolzrUn4idCvgIycqRaGsf1sEJFR5W+rneqtMhNYHdwemqaqnysInwshHR3cHs1AC6y/eL6pcQhaYJ5qVMIRg54/6Lr4CU114Rmph7UM9C28ulmHkFMN/DKPUDbM1+glxjzmqHQChY293Db0dlwZeiDWF3Tli2BVd6pz5KEkQlUsGeLW1O0rT9T9sxzsavxArwIDAQAB";
|
||||
|
||||
/**
|
||||
* 灵枢appId 沙箱id 2021002161620176
|
||||
*/
|
||||
public static final String LS_APP_ID ="2021005102688295";
|
||||
//灵枢应用私钥
|
||||
public static final String LS_MERCHANT_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDD0he2sQIRIW5nFVSlA238HK2xHSobJh6QFqot9Hse4ziB9q9dT2peuxCvzzJwdt2VzH61OokUsFHHgvQFTtxpQ55hsjkhv9C/AvsgicyHl5zZRRDe9wTvM5SwydHYnAs4itn+q/xv79005KuOOVDRdfBatcnm5MGBanglOfh/EDN1hcni/8+U24CrTL7Zf0mTD054nJ++ISmGiprgPDezD/l4BatLuQzntzeTRuDLZfcvNvrCRYWrxyDfqic0Onl0e4WcVc3/UHuWeXIFGfv2a6qRlpDYfkcsoXFX9nc77hoS6hKJC4XhVUpTTJpvInDDvhObP534lmM8DsYnvbsfAgMBAAECggEBAKZP0D4klfnQqAC6+BnyEL536PktKO7H8Fs2NLE1HEB+gSa4SfZ5FYGBZUm8Mz2bZtTsSo1HOtesbLiDOxcrBD4O5PxarvVAAV3JfVoETwa2OMu7QfnsWG+EInwH3McYuNr76uvGTG8RjJF4yU/Q1BgiD9Iq5WDJ1qNAtuv/EVNwBGC7mLxevdb0gemMz4Oqu4Nn3ujQ9h0JMoX8AGhPHk1ZJ5iBXwkFiAtBLLGZZtgzMpHRBcmSj0Wq/oUAcu3NgHdLFtbPmzZyN+Qbzt/MdH239WW/numsKPmbDgiJXXKetdG/hZi0PiIiCbXWuECxEcX3qWLnKWY5UPBb4P0z/ckCgYEA889dJg0LglpUiZNrC6kgoIRvM5jvba7hOBkhxvOoWGYX+cPkigUBx5Ux3Yks3x1l9ubZVlNU4qNug7eqGQiLd04z4lqtc1JfR9Lu6aOmeo5aJDvwzu/7io+ZakoiE1kLr0r2w0TJ+zF9O0537WXMA90YAZTA8McweR4S+OhlIHUCgYEAzZx9v1EJrGvOiieabL1eVBI4Y9VaDgrt/HEZrC4vDa6h1O6WF2/EMcbENvwfvDbRpDpsNJcUsPVJGYVCgFd+ikCI1hxvBjD53/fdI+utGKJjxeEiU143Aus/FR2pwUiiJRc+sKoSIOzIlTUvfiGXuURgEDOTCT7e5JqlzZB9usMCgYBXkcxgJWFT4YPpohRZrNZ2MPsL6ktc9uoXzxcNsWhuz8Sexhho5mF8QP8XFfUS8ik0ZDf9xJKBkLfaAXbL5QDKykDidTVFbXmhf4amTkw2SrjfuNPGT/XmD6vHvHa+wkXrIR6+hg+R9HWJfqaekuiTHq9Hqhkeojyr0/x2gGoKHQKBgEi19qIZflpDJZ8lsi6SKTGB3/8uC9K7er2zIWkKTAmCoCg0108ibzdLG0h2kKJ2oFx7bJiMdPy/QUKNJZ9NUaqCd+F/3KNL3pGdjc6OIYB8rNvlacYho0Kc/onxG38GuJB1T+4Ztp9+HNDnJgxsxML3syEHnA/A9AHTzp6LYmsRAoGBANBnsJcQopaPePqNc0ZBHKeAg3WSKoAmdTnqj0Ly+zuAjwPjZwHwrupEFCTTAbVw7jjiScjL916hR2/eLWU79KabkAo7Y2VLWsWIhryz6G1KPIuQ3a2ntFHYwlqiLy6s882UIXGduRZWXpOAXAjSkY8XphbRC4OgwSRPhJeFGrX9";
|
||||
//应用公钥
|
||||
public static final String LS_ALI_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw9IXtrECESFuZxVUpQNt/BytsR0qGyYekBaqLfR7HuM4gfavXU9qXrsQr88ycHbdlcx+tTqJFLBRx4L0BU7caUOeYbI5Ib/QvwL7IInMh5ec2UUQ3vcE7zOUsMnR2JwLOIrZ/qv8b+/dNOSrjjlQ0XXwWrXJ5uTBgWp4JTn4fxAzdYXJ4v/PlNuAq0y+2X9Jkw9OeJyfviEphoqa4Dw3sw/5eAWrS7kM57c3k0bgy2X3Lzb6wkWFq8cg36onNDp5dHuFnFXN/1B7lnlyBRn79muqkZaQ2H5HLKFxV/Z3O+4aEuoSiQuF4VVKU0yabyJww74Tmz+d+JZjPA7GJ727HwIDAQAB";
|
||||
//支付宝公钥
|
||||
public static final String LS_ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXZVU7vQn/1DokwAFLvGmogJgX6fkgWVU31FI1kpebWpdRXJYJyzQfIC45UY3sbhjF0gGNPxhVY1RjQ5aHmdCkeLPo841x8uS7bdOQcE7IuehRh/B7sHNH1qmrBBcDg6Ym0CirJ44bmf9OR5qibkcVeoFG2KQT/Iz/auZ7UY9cNvYv1/VGP9OQWLUNCxQ6dhAk0cqVWJTT7TSzWBJIO9kwS8JHMncc1QntA5pVBJ5+DpAhKaMEOiWoMB7smgGq0f1xPCodZz/MTktfpcyk9oj80lw5/GVKaQZUqG9RPAvUTe+/oO6y2L6Z2U/2AFI84A7AMCSvy/kcIA4+sOnb/YDwIDAQAB";
|
||||
|
||||
|
||||
/**
|
||||
* 回调地址 因为是内网开发 目前为内网穿透地址
|
||||
*/
|
||||
// public static final String NOTIFY_URL = "http://z6f8f828.natappfree.cc/pb/pay/aliPay/notify";
|
||||
public static final String NOTIFY_URL = "https://api.nuttyreading.com/pay/aliPay/notify";
|
||||
|
||||
|
||||
/**
|
||||
* 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
|
||||
*/
|
||||
public static final String RETURN_URL = "http://外网ip:端口/sccess.html";
|
||||
|
||||
/**
|
||||
* 签名方式
|
||||
*/
|
||||
public static final String SIGN_TYPE = "RSA2";
|
||||
|
||||
/**
|
||||
* 字符编码格式
|
||||
*/
|
||||
public static final String CHARSET = "utf-8";
|
||||
|
||||
/**
|
||||
* 返回格式
|
||||
*/
|
||||
public static String FORMAT = "json";
|
||||
|
||||
/**
|
||||
* 支付宝网关
|
||||
*/
|
||||
public static final String GATEWAYURL = "https://openapi.alipay.com/gateway.do";
|
||||
|
||||
public static AlipayClient getAliPayClient(String mchName) throws AlipayApiException {
|
||||
if ("LS".equals(mchName)) {
|
||||
return new DefaultAlipayClient(GATEWAYURL, LS_APP_ID, LS_MERCHANT_PRIVATE_KEY,
|
||||
FORMAT, CHARSET, LS_ALIPAY_PUBLIC_KEY, SIGN_TYPE);
|
||||
}else {
|
||||
return new DefaultAlipayClient(GATEWAYURL, HS_APP_ID, HS_MERCHANT_PRIVATE_KEY,
|
||||
FORMAT, CHARSET, HS_ALIPAY_PUBLIC_KEY, SIGN_TYPE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
package com.peanut.modules.pay.alipay.config;
|
||||
|
||||
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.domain.*;
|
||||
import com.alipay.api.request.*;
|
||||
import com.alipay.api.response.*;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.peanut.modules.pay.alipay.dto.AlipayDTO;
|
||||
import com.peanut.modules.pay.alipay.dto.ReFundDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class AliPayUtil {
|
||||
|
||||
private static ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
/**
|
||||
* 功能描述 下单支付
|
||||
*
|
||||
* @param aliPayDto
|
||||
* @return Map<String, Object>
|
||||
*/
|
||||
public Map<String, Object> aliPayOrder(AlipayDTO aliPayDto) {
|
||||
log.info(">>>>>>>>>>支付宝下单 订单号 = {}", aliPayDto.getOutTradeNo());
|
||||
Map map = new HashMap();
|
||||
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
|
||||
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
|
||||
//(否)对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
|
||||
model.setBody(aliPayDto.getBody());
|
||||
//(是)商品的标题/交易标题/订单标题/订单关键字等
|
||||
model.setSubject(aliPayDto.getSubject());
|
||||
//(是)商户网站唯一订单号
|
||||
model.setOutTradeNo(aliPayDto.getOutTradeNo());
|
||||
//(是)订单总金额,单位为元,精确到小数点后两位
|
||||
model.setTotalAmount(aliPayDto.getTotalAmount());
|
||||
//(否)设置未付款支付宝交易的超时时间,一旦超时,该笔交易就会自动被关闭。
|
||||
model.setTimeoutExpress("30m");
|
||||
//(是)销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
|
||||
model.setProductCode("QUICK_MSECURITY_PAY");
|
||||
request.setBizModel(model);
|
||||
request.setNotifyUrl(AliPayConfig.NOTIFY_URL);
|
||||
try {
|
||||
//这里和普通的接口调用不同,使用的是sdkExecute
|
||||
AlipayTradeAppPayResponse responseStr = AliPayConfig.getAliPayClient(aliPayDto.getMchName()).sdkExecute(request);
|
||||
//可以直接给客户端请求,无需再做处理。
|
||||
map.put("msg", responseStr.getBody());
|
||||
} catch (AlipayApiException e) {
|
||||
log.info(">>>>>>>>>>支付出现异常 exception = {}", e);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* H5请求支付宝支付
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public AlipayTradeWapPayResponse aliPayH5(AlipayDTO h5PayDto) {
|
||||
try {
|
||||
AlipayClient alipayClient = AliPayConfig.getAliPayClient(h5PayDto.getMchName());
|
||||
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
|
||||
request.setNotifyUrl(AliPayConfig.NOTIFY_URL);
|
||||
request.setBizContent(getAliPayRequest(h5PayDto).toString());
|
||||
request.setReturnUrl(h5PayDto.getReturnUrl());
|
||||
AlipayTradeWapPayResponse responseStr = alipayClient.pageExecute(request);
|
||||
log.info(responseStr.getBody());
|
||||
return responseStr;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 退款申请
|
||||
*
|
||||
* @param reFundDTO
|
||||
* @return Map<String,Object>
|
||||
*/
|
||||
public Map<String, Object> aliPayRefund(ReFundDTO reFundDTO) {
|
||||
log.info(">>>>>>>>>支付宝退款 订单号 = {}", reFundDTO.getOutTrandeNo());
|
||||
Map map = new HashMap();
|
||||
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
|
||||
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
|
||||
// 退款金额
|
||||
model.setRefundAmount(String.valueOf(reFundDTO.getRefundAmount()));
|
||||
// 支付宝交易号
|
||||
model.setTradeNo(reFundDTO.getTradeNo());
|
||||
if (StringUtils.isNotBlank(reFundDTO.getRefundReason())) {
|
||||
// 退款原因
|
||||
model.setRefundReason(reFundDTO.getRefundReason());
|
||||
}
|
||||
//退款请求号。标识一次退款请求,需要保证在交易号下唯一,如需部分退款,则此参数必传。
|
||||
model.setOutRequestNo(reFundDTO.getOutRequestNo());
|
||||
request.setBizModel(model);
|
||||
AlipayTradeRefundResponse response = null;
|
||||
|
||||
try {
|
||||
response = AliPayConfig.getAliPayClient(reFundDTO.getMchName()).execute(request);
|
||||
map.put("msg", response.getBody());
|
||||
} catch (Exception e) {
|
||||
log.info(">>>>>>>>>>退款出现异常 exception = {}", e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 查询订单
|
||||
* @param outTradeNo
|
||||
*/
|
||||
public AlipayTradeQueryResponse getAliPayOrder(String outTradeNo,String mchName) {
|
||||
log.info(">>>>>>>>>查询支付宝订单 订单号 = {}", outTradeNo);
|
||||
Map map = new HashMap();
|
||||
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
||||
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
|
||||
model.setOutTradeNo(outTradeNo);
|
||||
request.setBizModel(model);
|
||||
AlipayTradeQueryResponse response = null;
|
||||
try {
|
||||
response = AliPayConfig.getAliPayClient(mchName).execute(request);
|
||||
return response;
|
||||
} catch (Exception e) {
|
||||
log.info(">>>>>>>>>>查询订单出现异常 exception = {}", e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
private ObjectNode getAliPayRequest(AlipayDTO h5PayDto) {
|
||||
ObjectNode obj = mapper.createObjectNode();
|
||||
//obj.put("subject", URLEncoder.encode(payRequest.getBody(), "GBK"));
|
||||
obj.put("subject", h5PayDto.getSubject());
|
||||
obj.put("out_trade_no", h5PayDto.getOutTradeNo());
|
||||
obj.put("timeout_express", 30d);
|
||||
//obj.put("time_expire", DateTimeUtils.getYmdhmFormatDate(System.currentTimeMillis() + DateUtils.DAY_IN_MILLS));
|
||||
obj.put("total_amount", h5PayDto.getTotalAmount());
|
||||
obj.put("quit_url", h5PayDto.getReturnUrl());
|
||||
obj.put("product_code", "QUICK_WAP_PAY");
|
||||
obj.put("body", h5PayDto.getBody());
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.peanut.modules.pay.alipay.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.peanut.common.utils.R;
|
||||
import com.peanut.modules.pay.alipay.dto.AlipayDTO;
|
||||
import com.peanut.modules.pay.alipay.dto.ReFundDTO;
|
||||
import com.peanut.modules.pay.alipay.service.AliPayService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* 支付宝支付控制层
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/pay/aliPay")
|
||||
@Slf4j
|
||||
public class AliPayController {
|
||||
|
||||
@Autowired
|
||||
private AliPayService aliPayService;
|
||||
|
||||
/**
|
||||
* 请求支付宝接口支付
|
||||
*
|
||||
* @param payDto
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/pay")
|
||||
public R pay(AlipayDTO payDto) {
|
||||
String pay = aliPayService.pay(payDto);
|
||||
return R.ok().put("orderInfo",pay);
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping( "/notify")
|
||||
public R notify_url(HttpServletRequest request) {
|
||||
Map<String, String[]> parameterMap = request.getParameterMap();
|
||||
String aliNotify = aliPayService.aliNotify(request);
|
||||
return R.ok().put("aliNotify",aliNotify);
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付宝退款
|
||||
*/
|
||||
@RequestMapping("/refund")
|
||||
public R refund(@RequestBody Map<String,Object> params) {
|
||||
String refund = aliPayService.refund(params);
|
||||
return R.ok().put("msg",refund);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.peanut.modules.pay.alipay.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 支付实体对象
|
||||
*/
|
||||
@Data
|
||||
public class AlipayDTO {
|
||||
/**
|
||||
* 商户订单号,必填
|
||||
*/
|
||||
private String outTradeNo;
|
||||
|
||||
|
||||
/**
|
||||
* 订单名称,必填
|
||||
*/
|
||||
private String subject;
|
||||
|
||||
/**
|
||||
* 付款金额,必填
|
||||
*/
|
||||
private String totalAmount;
|
||||
|
||||
/**
|
||||
* 商品描述,可空
|
||||
*/
|
||||
private String body;
|
||||
|
||||
/**
|
||||
* 超时时间参数
|
||||
*/
|
||||
private String timeoutExpress = "10m";
|
||||
|
||||
/**
|
||||
* 销售产品码,与支付宝签约的产品码名称
|
||||
*/
|
||||
private String productCode = "QUICK_MSECURITY_PAY";
|
||||
|
||||
/**
|
||||
* 支付成功后回跳地址,H5支付特有
|
||||
*/
|
||||
private String returnUrl;
|
||||
|
||||
/**
|
||||
* 类型 如果type ==1。是H5支付,如果type == 2是app支付
|
||||
*/
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 客户编号
|
||||
*/
|
||||
private String customerId;
|
||||
|
||||
private String relevanceoid;
|
||||
|
||||
private String mchName;//商户名 ""为默认商户号,"ls"为灵枢商户
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.peanut.modules.pay.alipay.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 退款实体对象
|
||||
*/
|
||||
@Data
|
||||
public class ReFundDTO {
|
||||
|
||||
/**
|
||||
* 退款金额
|
||||
*/
|
||||
public BigDecimal refundAmount;
|
||||
|
||||
/**
|
||||
* 支付时商户订单号
|
||||
*/
|
||||
public String outTrandeNo;
|
||||
|
||||
/**
|
||||
* 支付宝交易编号
|
||||
*/
|
||||
public String tradeNo;
|
||||
|
||||
/**
|
||||
* 退款原因
|
||||
*/
|
||||
private String refundReason;
|
||||
|
||||
/**
|
||||
* 客户编号
|
||||
*/
|
||||
private String customerId;
|
||||
|
||||
/**
|
||||
* 退款请求号 标识一次退款请求,需要保证在交易号下唯一,如需部分退款,则此参数必传。
|
||||
*/
|
||||
private String outRequestNo;
|
||||
|
||||
private String mchName;//商户名 ""为默认商户号,"ls"为灵枢商户
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.peanut.modules.pay.alipay.service;
|
||||
|
||||
|
||||
|
||||
import com.peanut.modules.pay.alipay.dto.AlipayDTO;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public interface AliPayService {
|
||||
|
||||
/**
|
||||
* 支付
|
||||
* @param alipayDTO
|
||||
* @return
|
||||
*/
|
||||
String pay(AlipayDTO alipayDTO);
|
||||
|
||||
|
||||
/**
|
||||
* 支付宝异步回调
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
String aliNotify(HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 支付宝退款
|
||||
*/
|
||||
String refund(Map<String,Object> params);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,395 @@
|
||||
package com.peanut.modules.pay.alipay.service.impl;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.peanut.common.utils.CopyUtils;
|
||||
import com.peanut.common.utils.OrderUtils;
|
||||
import com.peanut.modules.book.service.BookBuyConfigService;
|
||||
import com.peanut.modules.book.service.BuyOrderService;
|
||||
import com.peanut.modules.book.service.MyUserService;
|
||||
import com.peanut.modules.book.service.TransactionDetailsService;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.book.service.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.service.*;
|
||||
import com.peanut.modules.master.service.UserCourseBuyService;
|
||||
import com.peanut.modules.pay.alipay.config.AliPayConfig;
|
||||
import com.peanut.modules.pay.alipay.config.AliPayUtil;
|
||||
import com.peanut.modules.pay.alipay.dto.AlipayDTO;
|
||||
import com.peanut.modules.pay.alipay.dto.ReFundDTO;
|
||||
import com.peanut.modules.pay.alipay.service.AliPayService;
|
||||
import com.peanut.modules.pay.refund.entity.PayRefundOrder;
|
||||
import com.peanut.modules.pay.refund.service.PayRefundOrderService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
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 jakarta.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 支付宝支付实现
|
||||
*/
|
||||
@Service("AliPayService")
|
||||
@Slf4j
|
||||
public class AliPayServiceImpl implements AliPayService {
|
||||
|
||||
@Autowired
|
||||
private AliPayUtil aliPayUtil;
|
||||
@Autowired
|
||||
private MyUserService userService;
|
||||
@Autowired
|
||||
private PayZfbOrderService payZfbOrderService;
|
||||
@Autowired
|
||||
private BookBuyConfigService bookBuyConfigService;
|
||||
@Autowired
|
||||
private BuyOrderProductDao buyOrderProductDao;
|
||||
@Autowired
|
||||
private TransactionDetailsService transactionDetailsService;
|
||||
@Autowired
|
||||
private PayPaymentOrderService payPaymentOrderService;
|
||||
@Autowired
|
||||
private BuyOrderService buyOrderService;
|
||||
@Autowired
|
||||
private ShopProductBookDao shopProductBookDao;
|
||||
@Autowired
|
||||
private UserEbookBuyDao userEbookBuyDao;
|
||||
@Autowired
|
||||
private PayRefundOrderService refundOrderService;
|
||||
@Autowired
|
||||
private UserCourseBuyDao userCourseBuyDao;
|
||||
@Autowired
|
||||
private UserCourseBuyService userCourseBuyService;
|
||||
@Autowired
|
||||
private JfTransactionDetailsDao jfTransactionDetailsDao;
|
||||
@Autowired
|
||||
private UserVipService userVipService;
|
||||
@Autowired
|
||||
private CouponService couponService;
|
||||
@Autowired
|
||||
private CouponHistoryService couponHistoryService;
|
||||
@Autowired
|
||||
private TrainingClassService trainingClassService;
|
||||
@Autowired
|
||||
private AiVipLogService aiVipLogService;
|
||||
|
||||
@Override
|
||||
public String pay(AlipayDTO payDto) {
|
||||
Integer type = payDto.getType();
|
||||
//培训班订单用灵枢商户收款
|
||||
BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper<BuyOrder>()
|
||||
.eq(BuyOrder::getOrderSn,payDto.getRelevanceoid()));
|
||||
String mchName = "";
|
||||
if (buyOrder != null &&("trainingClass".equals(buyOrder.getOrderType())||"lsorder".equals(buyOrder.getOrderType()))) {
|
||||
mchName = "LS";
|
||||
}
|
||||
payDto.setMchName(mchName);
|
||||
|
||||
String orderInfo = "";
|
||||
if (type == 1) {
|
||||
// 走H5请求支付宝支付接口
|
||||
log.info(">>>>>>>>>>H5请求支付宝支付接口");
|
||||
String result = aliPayUtil.aliPayH5(payDto).getBody();
|
||||
log.info(">>>>>>>>>>>支付宝返回的信息是 result = {}", result);
|
||||
orderInfo = result;
|
||||
}
|
||||
if (type == 2) {
|
||||
// 走APP请求支付宝支付接口
|
||||
log.info(">>>>>>>>>>App请求支付宝支付接口");
|
||||
// payDto.setOutTradeNo(OrderUtils.getOrderCode(Integer.valueOf(payDto.getCustomerId())));
|
||||
payDto.setOutTradeNo(payDto.getRelevanceoid());
|
||||
Map<String, Object> map = aliPayUtil.aliPayOrder(payDto);
|
||||
Object obj = map.get("msg");
|
||||
String resJson = obj.toString();
|
||||
|
||||
log.info(">>>>>>>>>>>支付宝返回的信息是 resJson = {}", resJson);
|
||||
PayZfbOrderEntity aliNotifyDto = new PayZfbOrderEntity();
|
||||
aliNotifyDto.setOutTradeNo(payDto.getOutTradeNo());
|
||||
aliNotifyDto.setCustomerid(payDto.getCustomerId());
|
||||
aliNotifyDto.setRelevanceoid(payDto.getRelevanceoid());
|
||||
payZfbOrderService.save(aliNotifyDto);
|
||||
|
||||
orderInfo = resJson;
|
||||
}
|
||||
return orderInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public String aliNotify(HttpServletRequest request) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
try {
|
||||
Map requestParams = request.getParameterMap();
|
||||
// log.error("回调测试参数:"+requestParams.toString());
|
||||
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
|
||||
String name = (String) iter.next();
|
||||
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] + ",";
|
||||
}
|
||||
valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
|
||||
params.put(name, valueStr);
|
||||
}
|
||||
log.info(">>>>>>>>>>支付宝回调 sign = {}, trade_status = {}, out_trade_no = {}, 参数 = {}", params.get("sign"),
|
||||
params.get("trade_status"), params.get("out_trade_no"), params.toString());
|
||||
//调用SDK验证签名,验证是阿里回调,而不是其他恶意回调
|
||||
BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper<BuyOrder>()
|
||||
.eq(BuyOrder::getOrderSn,params.get("out_trade_no")));
|
||||
String alipayPublicKey = AliPayConfig.HS_ALIPAY_PUBLIC_KEY;
|
||||
if (buyOrder != null && ("trainingClass".equals(buyOrder.getOrderType())||"lsorder".equals(buyOrder.getOrderType()))) {
|
||||
alipayPublicKey = AliPayConfig.LS_ALIPAY_PUBLIC_KEY;
|
||||
}
|
||||
boolean flag = AlipaySignature.rsaCheckV1(params, alipayPublicKey, AliPayConfig.CHARSET, AliPayConfig.SIGN_TYPE);
|
||||
// log.error(">>>>>>>>>>验签结果 flag = {}", flag);
|
||||
if (flag) {
|
||||
log.info(">>>>>>>>>>验签通过");
|
||||
//验签通过 获取交易状态
|
||||
String tradeStatus = params.get("trade_status");
|
||||
//只处理支付成功的订单: 修改交易表状态,支付成功
|
||||
//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。
|
||||
if (tradeStatus.equals("TRADE_SUCCESS") || tradeStatus.equals("TRADE_FINISHED")) {
|
||||
//TODO 获取支付宝通知完成充值后续业务
|
||||
//交易成功 获取商户订单号
|
||||
/**修改订单信息*/
|
||||
String toJSON = JSONObject.toJSONString(params);
|
||||
PayZfbOrderEntity aliNotifyDto = JSONObject.toJavaObject(JSON.parseObject(toJSON), PayZfbOrderEntity.class);
|
||||
//判断数据库是否存在当前订单
|
||||
PayZfbOrderEntity payZfbOrderEntity = payZfbOrderService.getOne(new QueryWrapper<PayZfbOrderEntity>().eq("trade_no", aliNotifyDto.getTradeNo()));
|
||||
if (payZfbOrderEntity != null) {
|
||||
return "success";
|
||||
}
|
||||
PayZfbOrderEntity oldPayZfbOrderEntity = payZfbOrderService.getOne(new QueryWrapper<PayZfbOrderEntity>().eq("out_trade_no", aliNotifyDto.getOutTradeNo()));
|
||||
CopyUtils.copyProperties(aliNotifyDto,oldPayZfbOrderEntity);
|
||||
|
||||
payZfbOrderService.updateById(oldPayZfbOrderEntity);
|
||||
|
||||
// 会员开通
|
||||
String body = oldPayZfbOrderEntity.getBody();
|
||||
String customerid = oldPayZfbOrderEntity.getCustomerid();
|
||||
|
||||
BuyOrder order = buyOrderService.getBaseMapper().selectOne(new QueryWrapper<BuyOrder>()
|
||||
.eq("order_sn", oldPayZfbOrderEntity.getRelevanceoid()));
|
||||
|
||||
String subject = order.getOrderType();
|
||||
//使用优惠券
|
||||
if (order.getCouponId()!=null&&order.getCouponId()!=0){
|
||||
CouponHistory couponHistory = couponHistoryService.getById(order.getCouponId());
|
||||
couponHistory.setOrderId(order.getOrderId());
|
||||
couponService.useCouponAmount(couponHistory);
|
||||
}
|
||||
//处理抵扣积分
|
||||
if(order.getJfDeduction().compareTo(BigDecimal.ZERO)>0){
|
||||
userCoinJf(order);
|
||||
}
|
||||
|
||||
if("trainingClass".equals(subject)){
|
||||
//更新 订单 记录
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2");
|
||||
//插入培训班
|
||||
trainingClassService.addTrainingClassForUser(order);
|
||||
}
|
||||
|
||||
if("relearn".equals(subject)){
|
||||
//更新 订单 记录
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2");
|
||||
//插入复读记录
|
||||
userCourseBuyService.addUserCourseBuyRelearn(order,"支付宝购买:"+order.getOrderSn());
|
||||
}
|
||||
|
||||
if ("vip".equals(subject)) {
|
||||
//更新 订单 记录
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2");
|
||||
//开通vip
|
||||
userVipService.openVipForUser(order);
|
||||
}
|
||||
|
||||
if ("aiVip".equals(subject)) {
|
||||
//更新 订单 记录
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2");
|
||||
//开通aivip
|
||||
aiVipLogService.openAiVip(order);
|
||||
}
|
||||
|
||||
if("point".equals(subject)){
|
||||
// 插入花生币 变动记录
|
||||
BookBuyConfigEntity bookBuyConfigEntity = bookBuyConfigService.getById(Integer.valueOf(body));
|
||||
MyUserEntity userEntity = userService.getById(order.getUserId());
|
||||
if (Integer.valueOf(body)==0){//自定义充值
|
||||
bookBuyConfigEntity = new BookBuyConfigEntity();
|
||||
bookBuyConfigEntity.setRealMoney(order.getRealMoney());
|
||||
bookBuyConfigEntity.setMoney(order.getRealMoney());
|
||||
bookBuyConfigEntity.setQudao("Android");
|
||||
}
|
||||
//充值送积分
|
||||
if (bookBuyConfigEntity != null && bookBuyConfigEntity.getGivejf() != null && bookBuyConfigEntity.getGivejf().compareTo(BigDecimal.ZERO)>0) {
|
||||
userEntity.setJf(userEntity.getJf().add(bookBuyConfigEntity.getGivejf()));
|
||||
userService.updateById(userEntity);
|
||||
JfTransactionDetails jfTransactionDetails = new JfTransactionDetails();
|
||||
jfTransactionDetails.setUserId(userEntity.getId());
|
||||
jfTransactionDetails.setChangeAmount(bookBuyConfigEntity.getGivejf());
|
||||
jfTransactionDetails.setActType(0);
|
||||
jfTransactionDetails.setUserBalance(userEntity.getJf());
|
||||
jfTransactionDetails.setRelationId(order.getOrderId());
|
||||
jfTransactionDetails.setRemark("充币送积分:"+bookBuyConfigEntity.getDescription()+",订单号:"+order.getOrderSn());
|
||||
jfTransactionDetailsDao.insert(jfTransactionDetails);
|
||||
}
|
||||
BigDecimal realMoney = bookBuyConfigEntity.getRealMoney();
|
||||
userService.rechargeHSPoint(userEntity,realMoney.intValue());
|
||||
//插入虚拟币消费记录
|
||||
transactionDetailsService.rechargeRecord(userEntity,realMoney.toString(),oldPayZfbOrderEntity.getId().intValue(),"支付宝",order.getOrderSn());
|
||||
//插入花生币充值记录
|
||||
payPaymentOrderService.insertDetail(userEntity,bookBuyConfigEntity,oldPayZfbOrderEntity.getId().toString());
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),"2");
|
||||
}
|
||||
if ("order".equals(subject)||"lsorder".equals(subject)) {
|
||||
//更新 订单 记录
|
||||
String ActString = buyOrderService.checkWlOrder(order.getOrderSn())?"0":"2";
|
||||
buyOrderService.updateOrderStatus(Integer.valueOf(customerid),oldPayZfbOrderEntity.getRelevanceoid(),ActString);
|
||||
/* 记录用户购买的书籍 */
|
||||
// 查询订单的所有 book_id
|
||||
List<Integer> orderBookIdList = shopProductBookDao.getOrderBookId(order.getOrderSn());
|
||||
// 去重
|
||||
Set<Integer> set = new HashSet<>(orderBookIdList);
|
||||
orderBookIdList.clear();
|
||||
orderBookIdList.addAll(set);
|
||||
// 查询用户的所有 book_id
|
||||
List<Integer> userBookIdList = userEbookBuyDao.getUserBookId(order.getUserId());
|
||||
// 取差集
|
||||
orderBookIdList.removeAll(userBookIdList);
|
||||
// 为用户添加书籍
|
||||
for (Integer bookId : orderBookIdList) {
|
||||
UserEbookBuyEntity entity = new UserEbookBuyEntity();
|
||||
entity.setUserId(order.getUserId());
|
||||
entity.setBookId(bookId);
|
||||
userEbookBuyDao.insert(entity);
|
||||
}
|
||||
//开通course,start
|
||||
buyOrderService.addCourseToUser("支付宝",order);
|
||||
//开通course,end
|
||||
//发放优惠卷
|
||||
couponService.insertCouponHistoryByProductId(order);
|
||||
|
||||
List<Integer> collect = buyOrderProductDao.selectList(new LambdaQueryWrapper<BuyOrderProduct>().eq(BuyOrderProduct::getOrderId, order.getOrderId())).stream().map(BuyOrderProduct::getProductId).collect(Collectors.toList());
|
||||
//手摸脚模购买后会开启用户的脉穴的功能
|
||||
if(collect.contains(128)||collect.contains(129)||collect.contains(130)||collect.contains(131)
|
||||
||collect.contains(136)||collect.contains(137)||collect.contains(139)||collect.contains(1612)
|
||||
||collect.contains(1957)){
|
||||
MyUserEntity userInfo = userService.getById(order.getUserId());
|
||||
userInfo.setPointPower(1);
|
||||
userService.updateById(userInfo);
|
||||
}
|
||||
if(collect.contains(133)||collect.contains(134)||collect.contains(135)){
|
||||
MyUserEntity userInfo = userService.getById(order.getUserId());
|
||||
userInfo.setTgdzPower(1);
|
||||
userService.updateById(userInfo);
|
||||
}
|
||||
if(collect.contains(39)||collect.contains(62)||collect.contains(123)||collect.contains(127)){
|
||||
MyUserEntity userInfo = userService.getById(order.getUserId());
|
||||
userInfo.setWylqPower(1);
|
||||
userService.updateById(userInfo);
|
||||
}
|
||||
|
||||
if(collect.contains(43)||collect.contains(62)||collect.contains(124)){
|
||||
MyUserEntity userInfo = userService.getById(order.getUserId());
|
||||
userInfo.setPrescriptBPower(1);
|
||||
userService.updateById(userInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**余额到账*/
|
||||
//这里就主要是做你们自己的业务需求了,修改一些表什么的..
|
||||
}
|
||||
return "success";
|
||||
}
|
||||
log.error(">>>>>>>>>>验签失败 params = {}", params.toString());
|
||||
return "fail";
|
||||
} catch (Exception e) {
|
||||
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
log.error(">>>>>>>>>>订单回调异常: 订单号 = {}, msg = {}", params.toString(), e.getMessage());
|
||||
return "fail";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public String refund(Map<String,Object> params) {
|
||||
log.info(">>>>>>>>>>App请求支付宝退款接口");
|
||||
LambdaQueryWrapper<PayZfbOrderEntity> wrapper = new LambdaQueryWrapper();
|
||||
wrapper.eq(PayZfbOrderEntity::getRelevanceoid,params.get("orderSn").toString());
|
||||
PayZfbOrderEntity payZfbOrder = payZfbOrderService.getOne(wrapper);
|
||||
ReFundDTO reFundDTO = new ReFundDTO();
|
||||
reFundDTO.setOutTrandeNo(payZfbOrder.getOutTradeNo());
|
||||
reFundDTO.setTradeNo(payZfbOrder.getTradeNo());
|
||||
reFundDTO.setCustomerId(payZfbOrder.getCustomerid());
|
||||
reFundDTO.setRefundReason(params.get("reason").toString());
|
||||
reFundDTO.setRefundAmount(new BigDecimal(params.get("refundFee").toString()));
|
||||
// reFundDTO.setOutRequestNo(params.get("outRequestNo").toString());
|
||||
reFundDTO.setOutRequestNo(UUID.randomUUID().toString());
|
||||
BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper<BuyOrder>()
|
||||
.eq(BuyOrder::getOrderSn,params.get("orderSn")));
|
||||
String mchName = "";
|
||||
if (buyOrder != null && "trainingClass".equals(buyOrder.getOrderType())) {
|
||||
mchName = "LS";
|
||||
}
|
||||
reFundDTO.setMchName(mchName);
|
||||
Map<String, Object> map = aliPayUtil.aliPayRefund(reFundDTO);
|
||||
Object obj = map.get("msg");
|
||||
String resJson = obj.toString();
|
||||
log.info(">>>>>>>>>>>支付宝返回的信息是 resJson = {}", resJson);
|
||||
Map<String,Object> res = JSONObject.parseObject(resJson);
|
||||
//10000表示接口请求成功,Y表示资金变动成功
|
||||
if ("10000".equals(((Map)res.get("alipay_trade_refund_response")).get("code"))&&
|
||||
"Y".equals(((Map)res.get("alipay_trade_refund_response")).get("fund_change"))){
|
||||
log.info(">>>>>>>>>>>支付宝退款成功!<<<<<<<<<<<<<");
|
||||
//表操作
|
||||
MPJLambdaWrapper<BuyOrder> w = new MPJLambdaWrapper();
|
||||
w.leftJoin(PayZfbOrderEntity.class,PayZfbOrderEntity::getRelevanceoid, BuyOrder::getOrderSn);
|
||||
w.eq("trade_no",((Map)res.get("alipay_trade_refund_response")).get("trade_no"));
|
||||
BuyOrder order = buyOrderService.getOne(w);
|
||||
PayRefundOrder refund = new PayRefundOrder();
|
||||
refund.setPayType("2");
|
||||
refund.setOrderId(order.getOrderId());
|
||||
refund.setTradeNo(((Map)res.get("alipay_trade_refund_response")).get("trade_no").toString());
|
||||
refund.setOutTradeNo(((Map)res.get("alipay_trade_refund_response")).get("out_trade_no").toString());
|
||||
refund.setRefundFee(((Map)res.get("alipay_trade_refund_response")).get("refund_fee").toString());
|
||||
refundOrderService.save(refund);
|
||||
refundOrderService.businessOpt(order);
|
||||
}
|
||||
return resJson;
|
||||
}
|
||||
|
||||
private void userCoinJf(BuyOrder order){
|
||||
MyUserEntity userEntity = userService.getById(order.getUserId());
|
||||
userEntity.setJf(userEntity.getJf().subtract(order.getJfDeduction()));
|
||||
userService.updateById(userEntity);
|
||||
JfTransactionDetails jfTransactionDetails = new JfTransactionDetails();
|
||||
jfTransactionDetails.setUserId(userEntity.getId());
|
||||
jfTransactionDetails.setChangeAmount(order.getJfDeduction().negate());
|
||||
jfTransactionDetails.setActType(1);
|
||||
jfTransactionDetails.setUserBalance(userEntity.getJf());
|
||||
jfTransactionDetails.setRelationId(order.getOrderId());
|
||||
jfTransactionDetails.setRemark("消费积分抵扣:"+order.getJfDeduction().toString()+",订单号:"+order.getOrderSn());
|
||||
jfTransactionDetailsDao.insert(jfTransactionDetails);
|
||||
}
|
||||
|
||||
//TODO 更新订单状态
|
||||
//TODO 更新用户优惠券状态
|
||||
//TODO 推送一路健康优惠券
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user