From a02db2e7c1d45ff6adeb9280ed4489f40c13b374 Mon Sep 17 00:00:00 2001 From: chengkun <2500338766@qq.com> Date: Wed, 31 Aug 2022 10:04:53 +0800 Subject: [PATCH] =?UTF-8?q?feature1.0.0-img:=E6=B7=BB=E5=8A=A0=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E5=AE=9D=E6=94=AF=E4=BB=98=E5=8F=8A=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../img/controller/CommonController.java | 37 ++++++++ .../com/bnyer/img/dto/AlipayParamDto.java | 31 ++++++ .../com/bnyer/img/service/AlipayService.java | 26 +++++ .../img/service/impl/AlipayServiceImpl.java | 95 +++++++++++++++++++ 4 files changed, 189 insertions(+) create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CommonController.java create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/AlipayParamDto.java create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/AlipayService.java create mode 100644 bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/AlipayServiceImpl.java diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CommonController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CommonController.java new file mode 100644 index 0000000..62abab7 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CommonController.java @@ -0,0 +1,37 @@ +package com.bnyer.img.controller; + +import com.bnyer.common.core.utils.StringUtils; +import com.bnyer.common.core.web.controller.BaseController; +import com.bnyer.common.core.web.domain.AjaxResult; +import com.bnyer.img.service.AlipayService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(value = "【图文平台】公共接口",tags = "【图文平台】公共接口") +@RestController +@RequestMapping("/img/common") +@Slf4j +public class CommonController extends BaseController { + + @Autowired + private AlipayService alipayService; + + //@RequiresPermissions("system:config:list") + @ApiOperation(value = "支付宝回调通知") + @PostMapping("/alipayCallback") + public AjaxResult alipayCallback(@RequestBody HttpServletRequest request) { + String result = alipayService.alipayCallBack(request); + if (StringUtils.isNotBlank(result)){ + return AjaxResult.success(result); + } + return AjaxResult.error(); + } +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/AlipayParamDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/AlipayParamDto.java new file mode 100644 index 0000000..7a82bb7 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/AlipayParamDto.java @@ -0,0 +1,31 @@ +package com.bnyer.img.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.io.Serializable; + + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ApiModel("支付宝支付参数接收类") +public class AlipayParamDto implements Serializable { + + @ApiModelProperty(value="商户订单号") + private String outTradeNo; + + @ApiModelProperty(value="订单名称") + private String subject; + + @ApiModelProperty(value="付款金额") + private String totalAmount; + + @ApiModelProperty(value="备注") + private String body; +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/AlipayService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/AlipayService.java new file mode 100644 index 0000000..332cf23 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/AlipayService.java @@ -0,0 +1,26 @@ +package com.bnyer.img.service; + +import com.bnyer.img.dto.AlipayParamDto; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author chengkun + * @date 2022/8/30 16:42 + */ +public interface AlipayService { + + /** + * 支付宝支付 + * @param params 支付参数 + * @return - + */ + String aliPay(AlipayParamDto params); + + /** + * 支付宝回调 + * @param request 回调请求 + * @return - + */ + String alipayCallBack(HttpServletRequest request); +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/AlipayServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/AlipayServiceImpl.java new file mode 100644 index 0000000..1dea344 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/AlipayServiceImpl.java @@ -0,0 +1,95 @@ +package com.bnyer.img.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.internal.util.AlipaySignature; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.bnyer.img.config.AlipayConfig; +import com.bnyer.img.dto.AlipayParamDto; +import com.bnyer.img.service.AlipayService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * @author chengkun + * @date 2022/8/30 17:09 + */ +@Service +@Slf4j +public class AlipayServiceImpl implements AlipayService { + + @Autowired + private AlipayConfig alipayConfig; + + @Override + public String aliPay(AlipayParamDto params) { + String result = null; + //1、获得初始化的AlipayClient + AlipayClient client = new DefaultAlipayClient( + alipayConfig.getGatewayUrl(), + alipayConfig.getAppId(), + alipayConfig.getPrivateKey(), + alipayConfig.getCharset(), + alipayConfig.getPublicKey(), + alipayConfig.getSignType()); + //2、设置请求参数 + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + //页面跳转同步通知页面路径 + request.setReturnUrl(alipayConfig.getReturnUrl()); + // 服务器异步通知页面路径 + request.setNotifyUrl(alipayConfig.getNotifyUrl()); + //封装参数 + request.setBizContent(JSON.toJSONString(client)); + try { + //3、请求支付宝进行付款,并获取支付结果 + result = client.pageExecute(request).getBody(); + } catch (AlipayApiException e) { + log.error("支付宝支付失败!错误原因为:", e); + return null; + } + return result; + } + + @Override + public String alipayCallBack(HttpServletRequest request) { + Map result = new HashMap<>(); + Map requestParams = request.getParameterMap(); + 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"); + result.put(name, valueStr); + } + + String outTradeNo = result.get("out_trade_no"); + String appId = result.get("app_id"); + String sellerId = result.get("out_trade_no"); + String totalAmount = result.get("total_amount"); + log.info("outTradeNo=={},appId=={},sellerId=={},totalAmount=={}",outTradeNo,appId,sellerId,totalAmount); + try { + boolean flag = AlipaySignature.rsaCheckV1(result, alipayConfig.getPublicKey(), alipayConfig.getCharset(), alipayConfig.getSignType()); + if (flag) { + return "success"; + } else { + return "failure"; + } + } catch (AlipayApiException e) { + e.printStackTrace(); + return "failure"; + } + } +}