|
@@ -0,0 +1,134 @@
|
|
|
+package com.yonge.toolset.payment.original.ali;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alipay.api.AlipayApiException;
|
|
|
+import com.alipay.api.AlipayClient;
|
|
|
+import com.alipay.api.request.AlipayTradeAppPayRequest;
|
|
|
+import com.alipay.api.request.AlipayTradeQueryRequest;
|
|
|
+import com.alipay.api.response.AlipayTradeAppPayResponse;
|
|
|
+import com.alipay.api.response.AlipayTradeQueryResponse;
|
|
|
+import com.yonge.toolset.base.result.BaseResult;
|
|
|
+import com.yonge.toolset.payment.base.PaymentTemplate;
|
|
|
+import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
|
|
|
+import com.yonge.toolset.payment.base.model.*;
|
|
|
+import com.yonge.toolset.payment.core.props.PaymentProperties;
|
|
|
+import com.yonge.toolset.payment.core.service.SysConfigPaymentService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class OriginalAliAppTemplate implements PaymentTemplate {
|
|
|
+
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(OriginalAliAppTemplate.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PaymentProperties paymentProperties;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SysConfigPaymentService configPaymentService;
|
|
|
+
|
|
|
+ @Resource(name = "alipayClientApp")
|
|
|
+ private AlipayClient alipayClientApp;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResult<Map<String, Object>> getOpenAuthMsg(OpenAuth openAuth) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResult<Payment> executePayment(Payment payment) {
|
|
|
+ AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
|
|
|
+ request.setNotifyUrl(paymentProperties.getNotifyUrl()
|
|
|
+ + "/" + payment.getOpenType().getCode()
|
|
|
+ + "/" + payment.getPayChannel().getCode()
|
|
|
+ + "/executePayment");
|
|
|
+
|
|
|
+ JSONObject bizContent = new JSONObject();
|
|
|
+ bizContent.put("out_trade_no", payment.getPaymentNo());
|
|
|
+ bizContent.put("total_amount", payment.getPayAmt());
|
|
|
+ bizContent.put("subject", payment.getOrderTitle());
|
|
|
+
|
|
|
+ List<Map<String, Object>> orderDetils = new ArrayList<>();
|
|
|
+ for (OrderDetil orderDetil : payment.getOrderDetils()) {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("goods_id", orderDetil.getGoodsId());
|
|
|
+ map.put("goods_name", orderDetil.getGoodName());
|
|
|
+ map.put("quantity", orderDetil.getQuantity());
|
|
|
+ map.put("price", orderDetil.getPrice());
|
|
|
+ orderDetils.add(map);
|
|
|
+ }
|
|
|
+ bizContent.put("goods_detail", orderDetils);
|
|
|
+ bizContent.put("merchant_order_no", payment.getOrderNo());
|
|
|
+ request.setBizContent(bizContent.toString());
|
|
|
+ try {
|
|
|
+ AlipayTradeAppPayResponse response = alipayClientApp.sdkExecute(request);
|
|
|
+ if (response.isSuccess()) {
|
|
|
+ payment.setId(response.getTradeNo());
|
|
|
+ payment.setStatus(TradeStatusEnum.pending);
|
|
|
+ return BaseResult.succeed(payment);
|
|
|
+ } else {
|
|
|
+ return BaseResult.failed(response.getMsg());
|
|
|
+ }
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ log.error("调用支付宝App支付接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
|
|
|
+ return BaseResult.failed("交易失败");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return BaseResult.failed("交易失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResult<Payment> queryPayment(Payment payment) {
|
|
|
+ AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
|
|
+
|
|
|
+ JSONObject bizContent = new JSONObject();
|
|
|
+ bizContent.put("out_trade_no", payment.getId());
|
|
|
+ request.setBizContent(bizContent.toString());
|
|
|
+ try {
|
|
|
+ AlipayTradeQueryResponse response = alipayClientApp.execute(request);
|
|
|
+
|
|
|
+ if (response.isSuccess()) {
|
|
|
+ payment.setPayAmt(response.getPayAmount());
|
|
|
+ //获取交易状态
|
|
|
+ String tradeStatus = response.getTradeStatus();
|
|
|
+ if("WAIT_BUYER_PAY".equals(tradeStatus)){
|
|
|
+ payment.setStatus(TradeStatusEnum.pending);
|
|
|
+ }else if("TRADE_CLOSED".equals(tradeStatus)){
|
|
|
+ payment.setStatus(TradeStatusEnum.succeeded);
|
|
|
+ }else if("TRADE_SUCCESS".equals(tradeStatus)){
|
|
|
+ payment.setStatus(TradeStatusEnum.succeeded);
|
|
|
+ }else if("TRADE_FINISHED".equals(tradeStatus)){
|
|
|
+ payment.setStatus(TradeStatusEnum.succeeded);
|
|
|
+ }
|
|
|
+ return BaseResult.succeed(payment);
|
|
|
+ } else {
|
|
|
+ return BaseResult.failed(response.getMsg());
|
|
|
+ }
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ log.error("调用支付宝APP查询订单接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
|
|
|
+ return BaseResult.failed("查询失败");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return BaseResult.failed("查询失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResult<ClosePayment> closePayment(ClosePayment closePayment) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BaseResult<RefundBill> refundPayment(RefundBill refundBill) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+}
|