/** * Copyright (c) 2021 Toby All rights reserved. *
* https://www.scjydz.com *
* 版权所有,侵权必究!
*/
package com.wjp.modules.pay.controller;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.ijpay.alipay.AliPayApi;
import com.ijpay.alipay.AliPayApiConfig;
import com.ijpay.alipay.AliPayApiConfigKit;
import com.wjp.common.constant.Constant;
import com.wjp.common.exception.MyException;
import com.wjp.modules.pay.config.AliPayProperties;
import com.wjp.modules.pay.dto.AlipayNotifyLogDTO;
import com.wjp.modules.pay.entity.OrderEntity;
import com.wjp.modules.pay.service.AlipayNotifyLogService;
import com.wjp.modules.pay.service.OrderService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.Map;
/**
* 支付宝支付
*
* @author Toby javatangbin@163.com
*/
@AllArgsConstructor
@RestController
@RequestMapping("pay/alipay")
public class AliPayController extends AbstractAliPayApiController {
private final AliPayProperties properties;
private final OrderService orderService;
private final AlipayNotifyLogService alipayNotifyLogService;
@Override
public AliPayApiConfig getApiConfig() throws AlipayApiException {
AliPayApiConfig aliPayApiConfig;
try {
aliPayApiConfig = AliPayApiConfigKit.getApiConfig(properties.getAppId());
} catch (Exception e) {
aliPayApiConfig = AliPayApiConfig.builder()
.setAppId(properties.getAppId())
.setAliPayPublicKey(properties.getPublicKey())
.setAppCertPath(properties.getAppCertPath())
.setAliPayCertPath(properties.getAliPayCertPath())
.setAliPayRootCertPath(properties.getAliPayRootCertPath())
.setCharset("UTF-8")
.setPrivateKey(properties.getPrivateKey())
.setServiceUrl(properties.getServerUrl())
.setSignType("RSA2")
// 普通公钥方式
//.build();
// 证书模式
.buildByCert();
}
return aliPayApiConfig;
}
/**
* Web支付
*/
@RequestMapping(value = "/webPay")
public void webPay(HttpServletResponse response, Long orderId) throws Exception {
OrderEntity order = orderService.getByOrderId(orderId);
if (order == null) {
throw new MyException("订单不存在");
}
if (order.getStatus() != Constant.OrderStatus.WAITING.getValue()) {
throw new MyException("订单已失效");
}
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo(order.getOrderId() + "");
//固定值
model.setProductCode("FAST_INSTANT_TRADE_PAY");
model.setTotalAmount(order.getPayAmount().toString());
model.setSubject(order.getProductName());
//公用回传参数,没有则无需设置
//model.setPassbackParams("passback_params");
AliPayApi.tradePage(response, model, properties.getNotifyUrl(), properties.getReturnUrl());
}
/**
* 支付宝异步通知接口
*/
@PostMapping("notify_url")
public String notifyUrl(HttpServletRequest request) throws Exception {
//支付宝异步通知内容
Map