You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
507 lines
24 KiB
507 lines
24 KiB
package com.cyjd.rights.controller;
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alipay.api.AlipayApiException;
|
|
import com.alipay.api.AlipayConstants;
|
|
import com.alipay.api.CertAlipayRequest;
|
|
import com.alipay.api.internal.util.AlipaySignature;
|
|
import com.alipay.api.response.AlipayTradePayResponse;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
import com.cyjd.rights.beans.AliPayProperties;
|
|
import com.cyjd.rights.beans.R;
|
|
import com.cyjd.rights.business.service.AliPayOrderService;
|
|
import com.cyjd.rights.business.service.AliPayService;
|
|
import com.cyjd.rights.business.service.AliPaySigningOrderService;
|
|
import com.cyjd.rights.constant.AliPayConstant;
|
|
import com.cyjd.rights.constant.EnumPeriodType;
|
|
import com.cyjd.rights.dto.AliPayInOrderByAgreementDto;
|
|
import com.cyjd.rights.dto.AliPaySignUpDto;
|
|
import com.cyjd.rights.entity.AliPayOrderEntity;
|
|
import com.cyjd.rights.entity.AliPaySigningOrderEntity;
|
|
import com.cyjd.rights.result.FResult;
|
|
import com.cyjd.rights.utils.EntityConvertUtil;
|
|
import com.cyjd.rights.utils.OrderUtil;
|
|
import com.cyjd.rights.vo.AliPayInOrderByAgreementReq;
|
|
import com.cyjd.rights.vo.AliPayQueryPageSignReq;
|
|
import com.cyjd.rights.vo.AliPayTradeQueryReq;
|
|
import com.cyjd.rights.vo.AliPayUserPageSignReq;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import lombok.extern.java.Log;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.annotation.PostConstruct;
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.time.LocalDateTime;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* @author :WXC
|
|
* @Date :2023/05/16
|
|
* @description :
|
|
*/
|
|
@Component
|
|
@Api(tags = "阿里支付测试")
|
|
@RestController
|
|
@RequestMapping("/alipay")
|
|
@Slf4j
|
|
public class AliPayController {
|
|
|
|
|
|
@Autowired
|
|
private AliPayService aliPayService;
|
|
|
|
@Autowired
|
|
private AliPayOrderService aliPayOrderService;
|
|
|
|
@Autowired
|
|
private AliPaySigningOrderService aliPaySigningOrderService;
|
|
/**
|
|
* 支付配置
|
|
*/
|
|
@Resource
|
|
private AliPayProperties aliPayProperties;
|
|
|
|
|
|
private CertAlipayRequest certAlipayRequest;
|
|
|
|
private static String[] unicom = {"130", "131", "132", "140", "155", "156", "185", "186", "145", "171", "176", "175", "166"};
|
|
private static String[] mobileArray = {"134", "135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "178", "182", "183", "184", "187", "188", "195", "198"};
|
|
private static String[] tel = {"133", "153", "177", "180", "181", "189", "173", "149", "199"};
|
|
|
|
|
|
@PostConstruct
|
|
public void init() {
|
|
CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
|
|
//设置文件地址
|
|
// if (isSkipSign) {
|
|
// aliPayProperties.setCertPath("D:\\daima\\hy\\ringback-q\\02Ypcl\\01Code\\01Plantform\\Server\\vrbt-client-controller\\src\\main\\resources\\config\\");
|
|
// } else {
|
|
// aliPayProperties.setCertPath("/home/ypcl/server-client/config/");
|
|
// }
|
|
certAlipayRequest.setServerUrl(AliPayConstant.serverUrl);
|
|
certAlipayRequest.setAppId(aliPayProperties.getAppId());
|
|
certAlipayRequest.setPrivateKey(aliPayProperties.getPrivateKey());
|
|
certAlipayRequest.setFormat(AlipayConstants.FORMAT_JSON);
|
|
certAlipayRequest.setCharset(AlipayConstants.CHARSET_UTF8);
|
|
certAlipayRequest.setSignType(AlipayConstants.SIGN_TYPE_RSA2);
|
|
certAlipayRequest.setCertPath(aliPayProperties.getCertPath() + "appCertPublicKey_" + aliPayProperties.getAppId() + ".crt");
|
|
certAlipayRequest.setAlipayPublicCertPath(aliPayProperties.getCertPath() + "alipayCertPublicKey_RSA2.crt");
|
|
certAlipayRequest.setRootCertPath(aliPayProperties.getCertPath() + "alipayRootCert.crt");
|
|
this.certAlipayRequest = certAlipayRequest;
|
|
}
|
|
|
|
|
|
@ApiOperation(value = "支付宝签约", notes = "前端先调用此接口,由服务端请求支付宝组装scheme地址,之后前端通过该地址唤起支付宝进行签约")
|
|
@PostMapping("/signUp")
|
|
public R signUp(@RequestBody AliPaySignUpDto signUpDto) {
|
|
String price="19.9";
|
|
//查询数据库用户签约记录
|
|
|
|
AliPayUserPageSignReq signReq = new AliPayUserPageSignReq();
|
|
signUpDto.setIsPage(true);
|
|
signUpDto.setPeriod("31"); //设置天数
|
|
signUpDto.setSingleAmount(price); //设置金额
|
|
signReq.setBusinessType(2);
|
|
signReq.setType(0);
|
|
String agreementNo = OrderUtil.getAgreementNo();
|
|
int i = checkFrom(signUpDto.getMobile());
|
|
//如果未签约,调用支付宝接口获取支付宝签约跳转地址
|
|
signReq.setExternalAgreementNo(agreementNo);
|
|
signReq.setIsPage(signUpDto.getIsPage());
|
|
AliPayUserPageSignReq.PeriodRuleParams periodRuleParams = new AliPayUserPageSignReq.PeriodRuleParams();
|
|
periodRuleParams.setPeriod(signUpDto.getPeriod());
|
|
periodRuleParams.setPeriodType(EnumPeriodType.DAY);
|
|
periodRuleParams.setSingleAmount(signUpDto.getSingleAmount());
|
|
signReq.setPeriodRuleParams(periodRuleParams);
|
|
//aliPayUserPageSignReq.setSignScene("INDUSTRY|DIGITAL_MEDIA");
|
|
String signUrl = aliPayService.signUp(signReq);
|
|
//保存签约订单
|
|
AliPaySigningOrderEntity aliPaySigningOrderEntity = new AliPaySigningOrderEntity();
|
|
aliPaySigningOrderEntity.setOrderId(agreementNo);
|
|
aliPaySigningOrderEntity.setOrderTime(LocalDateTime.now());
|
|
aliPaySigningOrderEntity.setMobile(signUpDto.getMobile());
|
|
aliPaySigningOrderEntity.setLinkId(signUpDto.getLinkId());
|
|
aliPaySigningOrderEntity.setLinkName("推广名字"); //先定死
|
|
aliPaySigningOrderEntity.setOperatorsId(1); //先定死可能不要这个参数
|
|
aliPaySigningOrderEntity.setIsPage(signUpDto.getIsPage()?1:0);
|
|
aliPaySigningOrderEntity.setOrderName("优爱腾三方权益业务");
|
|
aliPaySigningOrderEntity.setPrice(price);
|
|
aliPaySigningOrderEntity.setBusinessType(1);
|
|
if (StringUtils.isBlank(signUrl)) {
|
|
aliPaySigningOrderEntity.setStatus(0);
|
|
aliPaySigningOrderService.save(aliPaySigningOrderEntity);
|
|
return R.error("签约失败,请重试");
|
|
}
|
|
aliPaySigningOrderEntity.setStatus(2);
|
|
aliPaySigningOrderEntity.setOpenAddress(signUrl);
|
|
aliPaySigningOrderService.save(aliPaySigningOrderEntity);
|
|
return R.ok().put("result", signUrl).put("signOrderId", agreementNo);
|
|
|
|
}
|
|
|
|
@ApiOperation(value = "支付宝签约状态查询", notes = "签约成功以后前端可调用此接口查询是否签约成功")
|
|
@PostMapping("/querySign")
|
|
public FResult<?> querySign(@RequestParam String externalAgreementNo) {
|
|
AliPayQueryPageSignReq aliPayQueryPageSignReq = new AliPayQueryPageSignReq();
|
|
aliPayQueryPageSignReq.setExternalAgreementNo(externalAgreementNo);
|
|
boolean querySign = aliPayService.querySign(aliPayQueryPageSignReq);
|
|
return FResult.ok(querySign);
|
|
}
|
|
|
|
@ApiOperation(value = "支付宝支付状态查询", notes = "代扣以后可调用此接口查询是否成功")
|
|
@PostMapping("/queryOrder")
|
|
public FResult<?> queryOrder(@RequestParam String outTradeNo) {
|
|
AliPayTradeQueryReq aliPayTradeQueryReq = new AliPayTradeQueryReq();
|
|
aliPayTradeQueryReq.setOutTradeNo(outTradeNo);
|
|
boolean queryOrder = aliPayService.queryOrder(aliPayTradeQueryReq);
|
|
return FResult.ok(queryOrder);
|
|
}
|
|
|
|
// @ApiOperation(value = "支付宝代扣", notes = "签约完成以后,通过支付宝签约号进行代扣操作,签约号需要在签约回调中获取并保存到数据库中,之后通过定时任务轮询扫描数据库进行代扣")
|
|
// @PostMapping("/agreementPay")
|
|
// public FResult<?> agreementPay(@RequestBody AliPayInOrderByAgreementDto inOrderByAgreementDto) {
|
|
// //AliPayEntity aliPayEntity = aliPayService.getOne(new QueryWrapper<AliPayEntity>().eq("mobile", inOrderByAgreementDto.getMobile()).eq("type", 1).eq("status", 1).orderByDesc("order_time"));
|
|
// inOrderByAgreementDto.setAuthCode("签约号");
|
|
// inOrderByAgreementDto.setSubject("会员随心选");
|
|
// inOrderByAgreementDto.setTotalAmount("19.90");
|
|
// String outTradeNo = OrderUtil.getOutTradeNo();
|
|
// inOrderByAgreementDto.setOutTradeNo(outTradeNo);
|
|
// AliPayInOrderByAgreementReq payInOrderByAgreementReq = EntityConvertUtil.copy(inOrderByAgreementDto, AliPayInOrderByAgreementReq.class);
|
|
// AlipayTradePayResponse alipayTradePayResponse = aliPayService.aliPayTradePayByAgreement(payInOrderByAgreementReq);
|
|
// return FResult.ok(alipayTradePayResponse);
|
|
// }
|
|
|
|
@ApiOperation(value = "支付宝签约回调", notes = "签约完成后由支付宝发起,服务端根据回调的数据入库")
|
|
@PostMapping("/signNotify")
|
|
public String signNotify(HttpServletRequest request) {
|
|
// 获取支付宝的请求信息
|
|
Map<String, String> inMap = getNotifyMap(request);
|
|
if (inMap == null) {
|
|
return "fail";
|
|
}
|
|
return signNotify(inMap);
|
|
}
|
|
|
|
@ApiOperation(value = "代扣回调", notes = "定时周期任务代扣结果通知")
|
|
@PostMapping("/agreementNotify")
|
|
public String agreementNotify(HttpServletRequest request) {
|
|
// 获取支付宝的请求信息
|
|
Map<String, String> inMap = getNotifyMap(request);
|
|
if (inMap == null) {
|
|
return "fail";
|
|
}
|
|
String result = agreementNotify(inMap);
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
//@Scheduled(cron = "0 0 8,20 * * ?")
|
|
|
|
/**
|
|
* 获取请求参数转为map
|
|
*
|
|
* @param request
|
|
* @return
|
|
*/
|
|
private static Map<String, String> getNotifyMap(HttpServletRequest request) {
|
|
// 获取支付宝的请求信息
|
|
Map<String, String> map = new HashMap<>();
|
|
Map<String, String[]> requestParams = request.getParameterMap();
|
|
if (requestParams.isEmpty()) {
|
|
return null;
|
|
}
|
|
//将 Map<String,String[]> 转为 Map<String,String>
|
|
for (String name : requestParams.keySet()) {
|
|
String[] values = requestParams.get(name);
|
|
String valueStr = "";
|
|
for (int i = 0; i < values.length; i++) {
|
|
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
|
|
}
|
|
map.put(name, valueStr);
|
|
}
|
|
return map;
|
|
}
|
|
|
|
|
|
/**
|
|
* 签约
|
|
* {
|
|
* "external_agreement_no":"Y2023052217492063821000",
|
|
* "product_code":"CYCLE_PAY_AUTH",
|
|
* "personal_product_code":"CYCLE_PAY_AUTH_P",
|
|
* "sign_scene":"INDUSTRY|MOBILE",
|
|
* "access_params":{
|
|
* "channel":"ALIPAYAPP"
|
|
* },
|
|
* "period_rule_params":{
|
|
* "period":"7",
|
|
* "period_type":"DAY",
|
|
* "execute_time":"2023-05-22",
|
|
* "single_amount":"0.01"
|
|
* }
|
|
* }
|
|
*
|
|
* @param aliPayUserPageSignReq
|
|
* @return
|
|
*/
|
|
public String signUp(AliPayUserPageSignReq aliPayUserPageSignReq) {
|
|
return null;
|
|
}
|
|
|
|
|
|
/**
|
|
* 签约回调通知
|
|
* {
|
|
* "charset":"UTF-8",
|
|
* "notify_time":"2023-05-22 17:50:02",
|
|
* "alipay_user_id":"2088722249554680",
|
|
* "sign":"SbhJupeGzltbiNwbiZJd8u6+V9RXrQYfSo5b0kZYW5ayfmF+7eVCSlB+hhZTa0rzhNQMy0eiYxjCZG9NSq0V8E72Q5IT2vqPiL3BIIo49/zP8fW1PSoJyrH6wwJ45oOV05kOyMc9XbhMSnCxkvzJmVX4VunsKtDh7SJYuVLSmzlW1Afk12L45KSAIzebTIbSJX4RxxpRRZz3XpMAYT2wovqJCBL59boMv0ze+6yO/lPuq5Fl1K+uCU9mSvd2LvwC0rBDluE9i6Ri5s/23t7KGoKvKZRZbzVx6Z1EC+8q0qWVlh4urMMKnttBfTiSAsdp09zZUlQWFj4lP1gw8ckREQ==",
|
|
* "external_agreement_no":"Y2023052217492063821000",
|
|
* "version":"1.0",
|
|
* "sign_time":"2023-05-22 17:50:02",
|
|
* "notify_id":"2023052201222175002009751491422699",
|
|
* "notify_type":"dut_user_sign",
|
|
* "agreement_no":"20235322942117682668",
|
|
* "invalid_time":"2115-02-01 00:00:00",
|
|
* "auth_app_id":"2021003127667792",
|
|
* "personal_product_code":"CYCLE_PAY_AUTH_P",
|
|
* "valid_time":"2023-05-22 17:50:02",
|
|
* "//login_token":"a8c9583559c99df56f59d6ae1f8b9580_68",
|
|
* "app_id":"2021003127667792",
|
|
* "sign_type":"RSA2",
|
|
* "sign_scene":"INDUSTRY|MOBILE",
|
|
* "status":"NORMAL",
|
|
* "alipay_//logon_id":"151******06"
|
|
* }external_agreement_no -> Y2023052220155843561000
|
|
*
|
|
* @param inMap
|
|
* @return
|
|
*/
|
|
public String signNotify(Map<String, String> inMap) {
|
|
log.info("===========================我是签约回调============================");
|
|
//log.info("支付宝签约回调开始:request{}", JSON.toJSONString(inMap));
|
|
try {
|
|
//验签
|
|
boolean signVerified = AlipaySignature.certVerifyV1(inMap, certAlipayRequest.getAlipayPublicCertPath(), AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
|
|
if (signVerified) {
|
|
//按照支付结果异步通知中的描述,对支付结果中的业务内容进行1\2\3\4二次校验,校验成功后在response中返回success
|
|
//协议状态,NORMAL:正常。UNSIGN:解约。
|
|
String status = inMap.get("status");
|
|
//代扣协议中标示用户的唯一签约号,商家自定义。仅签约接口传入时返回。
|
|
String externalAgreementNo = inMap.get("external_agreement_no");
|
|
//支付宝系统中用以唯一标识用户签约记录的编号。
|
|
String agreementNo = inMap.get("agreement_no");
|
|
//异步通知类型,dut_user_sign:当 status = NORMAL 表示签约成功。dut_user_unsign:当 status = UNSIGN 表示解约成功。
|
|
String notifyType = inMap.get("notify_type");
|
|
//签约协议场景。
|
|
String signScene = inMap.get("sign_scene");
|
|
//协议产品码。
|
|
String personalProductCode = inMap.get("personal_product_code");
|
|
//用户的支付宝账号对应的支付宝唯一用户号。
|
|
String alipayUserId = inMap.get("alipay_user_id");
|
|
//用户的支付宝登录账号。
|
|
String alipayLogonId = inMap.get("alipay_//logon_id");
|
|
log.info("支付宝签约回调通知:" + inMap.toString());
|
|
|
|
//更新订单签约信息
|
|
AliPaySigningOrderEntity aliPaySigningOrder = aliPaySigningOrderService.getOne(new QueryWrapper<AliPaySigningOrderEntity>().eq("order_id", externalAgreementNo));
|
|
if (aliPaySigningOrder==null){
|
|
return "fail";
|
|
}
|
|
aliPaySigningOrder.setAliUserId(alipayUserId);
|
|
aliPaySigningOrder.setSignCode(agreementNo);
|
|
//处理签约成功的回调
|
|
if ("NORMAL".equals(status)) {
|
|
//修改订单状态为成功
|
|
aliPaySigningOrder.setStatus(1);
|
|
//aliPaySigningOrderService.update(new AliPaySigningOrderEntity(), updateWrapper);
|
|
AliPayInOrderByAgreementReq payInOrderByAgreementReq = new AliPayInOrderByAgreementReq();
|
|
payInOrderByAgreementReq.setAuthCode(agreementNo);
|
|
payInOrderByAgreementReq.setSubject("会员随心选");
|
|
String price = "19.9";
|
|
payInOrderByAgreementReq.setTotalAmount(price);
|
|
String outTradeNo = OrderUtil.getOutTradeNo();
|
|
//保存支付的订单号
|
|
aliPaySigningOrder.setOtherOrderId(outTradeNo);
|
|
payInOrderByAgreementReq.setOutTradeNo(outTradeNo);
|
|
aliPaySigningOrder.setStatus(1);
|
|
//设置下次续费的时间
|
|
aliPaySigningOrder.setNextPayTime(LocalDateTime.now().plusDays(31));
|
|
log.info("支付宝签约修改成功订单"+aliPaySigningOrder+"================================");
|
|
boolean b = aliPaySigningOrderService.updateById(aliPaySigningOrder);
|
|
log.info("支付宝签约修改结果:=========================================================="+b);
|
|
|
|
//进行扣款
|
|
aliPayService.aliPayTradePayByAgreement(payInOrderByAgreementReq,aliPaySigningOrder);
|
|
}else {
|
|
//修改订单状态为失败
|
|
aliPaySigningOrder.setStatus(0);
|
|
aliPaySigningOrderService.updateById(aliPaySigningOrder);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return "success";
|
|
} catch (AlipayApiException e) {
|
|
//log.info("支付宝签约回调:处理过程异常,error:{}",e.getMessage());
|
|
}
|
|
return "fail";
|
|
}
|
|
|
|
/**
|
|
* 代扣支付回调
|
|
* {
|
|
* "gmt_create":"2023-05-22 18:04:31",
|
|
* "charset":"UTF-8",
|
|
* "seller_email":"heyuwangluo2020@163.com",
|
|
* "subject":"测试扣款",
|
|
* "sign":"sTtiNS55mONsj2w54+llyqhmDjW9VsxqzI6omvbS6WaWLsCz4yTUMqebESl/S1q9IWsC3o1iJnG/fSax/YXtSldNAzKAKeTU/2zzcGp4o/9nUu9kKIRR92H51otgjK6ja5/4vfAwZ96LwnaJn0BWVYx0YE7kHtGtd84MsvVJ+rGEuWv8TsWJEjey3bcKQRPE3TJwuflwZbfG7Com+U+6H2zQ93O351To0H/oqG3exAXGBdbv5Tw2Rc63Jg4rospSw3f8qUSNq+B8nXcUKfto5RMgehg4yA9GlyzXPmC4eDLDPQ+qsTCja9sWVbz70rVsme4M9V2SB8vEozPKCK6mIQ==",
|
|
* "buyer_id":"2088722249554680",
|
|
* "invoice_amount":"0.01",
|
|
* "notify_id":"2023052201222180433054681491186225",
|
|
* "fund_bill_list":"[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",
|
|
* "notify_type":"trade_status_sync",
|
|
* "trade_status":"TRADE_SUCCESS",
|
|
* "receipt_amount":"0.01",
|
|
* "app_id":"2021003127667792",
|
|
* "buyer_pay_amount":"0.01",
|
|
* "sign_type":"RSA2",
|
|
* "seller_id":"2088441130447941",
|
|
* "gmt_payment":"2023-05-22 18:04:32",
|
|
* "notify_time":"2023-05-22 18:07:19",
|
|
* "version":"1.0",
|
|
* "out_trade_no":"Y2023052218043074501000",
|
|
* "total_amount":"0.01",
|
|
* "trade_no":"2023052222001454681455191308",
|
|
* "auth_app_id":"2021003127667792",
|
|
* "buyer_//logon_id":"151****4506",
|
|
* "point_amount":"0.00"
|
|
* }
|
|
*
|
|
* @param inMap
|
|
* @return
|
|
*/
|
|
@ApiOperation(value = "ces", notes = "cs")
|
|
@PostMapping("/ces")
|
|
public String agreementNotify(@RequestBody Map<String, String> inMap) {
|
|
log.info("支付宝代扣回调开始:request{}"+JSON.toJSONString(inMap));
|
|
try {
|
|
//验签
|
|
boolean signVerified = AlipaySignature.certVerifyV1(inMap, certAlipayRequest.getAlipayPublicCertPath(), AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2);
|
|
if (signVerified) {
|
|
//支付宝交易号。支付宝交易凭证号。
|
|
String tradeNo = inMap.get("trade_no");
|
|
//商户订单号
|
|
String outTradeNo = inMap.get("out_trade_no");
|
|
//卖家支付宝账号。
|
|
String sellerEmail = inMap.get("seller_email");
|
|
//订单标题。商品的标题/交易标题/订单标题/订单关键字等,是请求时对应的参数,原样通知回来。
|
|
String subject = inMap.get("subject");
|
|
//买家支付宝用户号。买家支付宝账号对应的支付宝唯一用户号。
|
|
String buyerId = inMap.get("buyer_id");
|
|
//开票金额。用户在交易中支付的可开发票的金额。支持小数点后两位。
|
|
String invoiceAmount = inMap.get("invoice_amount");
|
|
//支付金额信息。支付成功的各个渠道金额信息,详请可查看下表 资金明细信息说明 。
|
|
String fundBillList = inMap.get("fund_bill_list");
|
|
//通知类型。枚举值:trade_status_sync。
|
|
String notifyType = inMap.get("notify_type");
|
|
//交易状态。咨询目前所处的状态。 TRADE_CLOSED
|
|
String tradeStatus = inMap.get("trade_status");
|
|
//实收金额。商家在交易中实际收到的款项,单位为人民币(元)。支持小数点后两位。
|
|
String receiptAmount = inMap.get("receipt_amount");
|
|
//开发者的 app_id。支付宝分配给开发者的应用 APPID。
|
|
String appId = inMap.get("app_id");
|
|
//付款金额。用户在咨询中支付的金额。支持小数点后两位。
|
|
String buyerPayAmount = inMap.get("buyer_pay_amount");
|
|
//卖家支付宝用户号。
|
|
String sellerId = inMap.get("seller_id");
|
|
//订单金额。本次交易支付的订单金额,单位为人民币(元)。支持小数点后两位。
|
|
String totalAmount = inMap.get("total_amount");
|
|
//交易创建时间。该笔交易创建的时间。格式 为 yyyy-MM-dd HH:mm:ss。
|
|
String gmtCreate = inMap.get("gmt_create");
|
|
//交易 付款时间。该笔交易的买家付款时间。格式为 yyyy-MM-dd HH:mm:ss。
|
|
String gmtPayment = inMap.get("gmt_payment");
|
|
//通知时间。通知的发送时间。格式为 yyyy-MM-dd HH:mm:ss。
|
|
String notifyTime = inMap.get("notify_time");
|
|
log.info("支付宝支付回调:" + inMap.toString());
|
|
log.info("outTradeNo====================="+outTradeNo);
|
|
AliPaySigningOrderEntity aliPaySigningOrderEntity = aliPaySigningOrderService.getOne(new QueryWrapper<AliPaySigningOrderEntity>().eq("other_order_id", outTradeNo));
|
|
// for (AliPayOrderEntity aliPayOrderEntity : aliPayOrderService.list(new QueryWrapper<>())) {
|
|
// System.out.println(aliPayOrderEntity);
|
|
// }
|
|
|
|
if (aliPaySigningOrderEntity==null){
|
|
log.info("未查询到订单");
|
|
return "success";
|
|
}
|
|
AliPayOrderEntity aliPayOrderEntity = new AliPayOrderEntity();
|
|
aliPayOrderEntity.setOrderId(System.currentTimeMillis()+"");
|
|
aliPayOrderEntity.setOrderTime(LocalDateTime.now());
|
|
aliPayOrderEntity.setPrice(aliPaySigningOrderEntity.getPrice());
|
|
aliPayOrderEntity.setIsPage(aliPaySigningOrderEntity.getIsPage());
|
|
aliPayOrderEntity.setAliUserId(aliPaySigningOrderEntity.getAliUserId());
|
|
aliPayOrderEntity.setOtherOrderId(aliPaySigningOrderEntity.getOtherOrderId());
|
|
aliPayOrderEntity.setMobile(aliPaySigningOrderEntity.getMobile());
|
|
aliPayOrderEntity.setSignCode(aliPaySigningOrderEntity.getSignCode());
|
|
aliPayOrderEntity.setBusinessType(aliPaySigningOrderEntity.getBusinessType());
|
|
aliPayOrderEntity.setLinkId(aliPaySigningOrderEntity.getLinkId());
|
|
aliPayOrderEntity.setLinkName(aliPaySigningOrderEntity.getLinkName());
|
|
aliPayOrderEntity.setOrderName("会员随心选");
|
|
if ("TRADE_SUCCESS".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) {
|
|
// TODO: 2023/05/22 1.处理业务
|
|
aliPayOrderEntity.setStatus(1);
|
|
aliPayOrderService.save(aliPayOrderEntity);
|
|
log.info("支付订单保存成功"+aliPayOrderEntity);
|
|
// if (b){
|
|
// log.info("支付订单保存成功"+aliPayEntity.getOrderId()+"=====status:"+aliPayEntity.getStatus());
|
|
//
|
|
// }
|
|
|
|
return "success";
|
|
}
|
|
aliPayOrderEntity.setStatus(0);
|
|
aliPayOrderService.save(aliPayOrderEntity);
|
|
log.info("支付开通失败订单保存成功"+aliPayOrderEntity);
|
|
|
|
}
|
|
} catch (AlipayApiException e) {
|
|
log.info("支付宝代扣支付回调:处理过程异常,error:{}" + e.getMessage());
|
|
}
|
|
return "fail";
|
|
}
|
|
|
|
|
|
private int checkFrom(String mobile) {
|
|
mobile = mobile.substring(0, 3);
|
|
List<String> uniList = Arrays.asList(unicom);
|
|
List<String> mobileList = Arrays.asList(mobileArray);
|
|
List<String> telList = Arrays.asList(tel);
|
|
int operatorsId = 0;
|
|
if (mobileList.contains(mobile)) {
|
|
operatorsId = 1;
|
|
} else if (uniList.contains(mobile)) {
|
|
operatorsId = 2;
|
|
} else if (telList.contains(mobile)) {
|
|
operatorsId = 3;
|
|
} else {
|
|
operatorsId = 0;
|
|
}
|
|
return operatorsId;
|
|
}
|
|
|
|
|
|
}
|
|
|