Browse Source

paypal回调

lyhzzz 2 years ago
parent
commit
b2838965d3

+ 10 - 1
src/main/java/com/fdkankan/pay/controller/OrderController.java

@@ -3,8 +3,10 @@ package com.fdkankan.pay.controller;
 import com.fdkankan.pay.common.ResultCode;
 import com.fdkankan.pay.common.ResultData;
 import com.fdkankan.pay.entity.Order;
+import com.fdkankan.pay.entity.WxConfig;
 import com.fdkankan.pay.exception.BusinessException;
 import com.fdkankan.pay.service.IOrderService;
+import com.fdkankan.pay.service.IWxConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -14,11 +16,18 @@ public class OrderController {
 
     @Autowired
     IOrderService orderService;
+    @Autowired
+    IWxConfigService wxConfigService;
 
     @GetMapping("/info/{orderSn}")
     public ResultData getByOrderSn(@PathVariable String orderSn){
         Order order = orderService.getByOrderSn(orderSn);
-
+        if(order != null){
+            WxConfig wxConfig = wxConfigService.getByServeId(order.getServeId());
+            if(wxConfig != null){
+                order.setWxAppId(wxConfig.getAppid());
+            }
+        }
         return ResultData.ok(order);
     }
 

+ 0 - 21
src/main/java/com/fdkankan/pay/controller/PaypalConfigController.java

@@ -1,21 +0,0 @@
-package com.fdkankan.pay.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author 
- * @since 2023-04-18
- */
-@RestController
-@RequestMapping("/pay/paypalConfig")
-public class PaypalConfigController {
-
-}
-

+ 2 - 0
src/main/java/com/fdkankan/pay/entity/Order.java

@@ -88,4 +88,6 @@ public class Order implements Serializable {
     private Date payTime;
 
 
+    @TableField(exist = false)
+    private String wxAppId;
 }

+ 11 - 0
src/main/java/com/fdkankan/pay/service/impl/PayOrderService.java

@@ -5,6 +5,7 @@ import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.exception.BusinessException;
 import com.fdkankan.pay.service.IOrderService;
 import com.fdkankan.pay.util.alipay.sdk.AlipayService;
+import com.fdkankan.pay.util.paypal.sdk.PaypalService;
 import com.fdkankan.pay.util.wx.WechatPayService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +23,8 @@ public class PayOrderService {
     WechatPayService wechatPayService ;
     @Autowired
     AlipayService alipayService;
+    @Autowired
+    PaypalService paypalService;
 
 
     public Object openPay(Order param, String ipAddr) throws Exception {
@@ -47,6 +50,10 @@ public class PayOrderService {
         if(param.getPayType() == 3 || param.getPayType() == 4 ){
             return alipayService.openPay(order,ipAddr);
         }
+        //paypal支付
+        if(order.getPayType() == 5 ){
+            return paypalService.openPay(order,ipAddr);
+        }
         return null;
     }
 
@@ -63,5 +70,9 @@ public class PayOrderService {
         if(order.getPayType() == 3 || order.getPayType() == 4 ){
             alipayService.callBack(request,response,order);
         }
+        //paypal回调
+        if(order.getPayType() == 5 ){
+            paypalService.callBack(request,response,order);
+        }
     }
 }

+ 62 - 7
src/main/java/com/fdkankan/pay/util/paypal/sdk/PaypalService.java

@@ -7,6 +7,7 @@ import com.fdkankan.pay.entity.Order;
 import com.fdkankan.pay.entity.PaypalConfig;
 import com.fdkankan.pay.entity.WxConfig;
 import com.fdkankan.pay.exception.BusinessException;
+import com.fdkankan.pay.service.IOrderService;
 import com.fdkankan.pay.service.IPaypalConfigService;
 import com.fdkankan.pay.util.CacheUtil;
 import com.fdkankan.pay.util.UrlUtils;
@@ -20,16 +21,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
 import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.net.URLEncoder;
+import java.util.*;
 
 @Log4j2
 @Service
@@ -37,6 +36,8 @@ public class PaypalService {
 
     @Autowired
     IPaypalConfigService paypalConfigService;
+    @Autowired
+    IOrderService orderService;
 
     public Object openPay(Order param, String ip) throws Exception {
 
@@ -78,6 +79,60 @@ public class PaypalService {
         throw new BusinessException(ResultCode.PAYPAL_ERROR);
     }
 
+    public void callBack(HttpServletRequest request, HttpServletResponse response, Order order) {
+
+        log.info("ali-callBack--order:{}",order);
+        Boolean payFlag = false;
+        String trade_no = null;
+        String openId = null;
+        try {
+            Enumeration en = request.getParameterNames();
+            String str = "cmd=_notify-validate";
+            while (en.hasMoreElements()) {
+                String paramName = (String) en.nextElement();
+                String paramValue = request.getParameter(paramName);
+                try {
+                    str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue, "utf-8");
+                } catch (UnsupportedEncodingException e) {
+                    StringWriter trace=new StringWriter();
+                    e.printStackTrace(new PrintWriter(trace));
+                    log.error(trace.toString());
+                }
+                //此处的编码一定要和自己的网站编码一致,不然会出现乱码,paypal回复的通知为‘INVALID’
+            }
+            final String itemName = request.getParameter("item_name");//商品名
+            final String itemNumber = request.getParameter("item_number");//购买数量
+            final String paymentDate = request.getParameter("payment_date");//交易时间
+            final String receiverEmail = request.getParameter("receiver_email");//收款人email
+            final String payerEmail = request.getParameter("payer_email");//付款人email
+            final String paymentAmount = request.getParameter("mc_gross");//交易钱数
+            final String paymentCurrency = request.getParameter("mc_currency");//货币种类
+            final String paymentStatus = request.getParameter("payment_status");//交易状态
+            final String txnId = request.getParameter("txn_id");//交易id
+            String custom = request.getParameter("custom");//发送payment请求时候自定义的业务服务器订单号
+            log.info("paypal回调参数:itemName:{},itemNumber:{},paymentDate:{},receiverEmail:{}," +
+                    "payerEmail:{},paymentAmount:{},paymentCurrency:{},paymentStatus:{},txnId:{},custom:{}",
+                    itemName,itemNumber,paymentDate,receiverEmail,payerEmail,paymentAmount,paymentCurrency,paymentStatus,txnId,custom);
+
+            trade_no = txnId;
+            openId = payerEmail;
+            if ("Completed".equals(paymentStatus)) {
+                //根据自己业务进行处理(修改订单状态,支付时间等等操作)
+                try {
+                    log.info("paypal支付成功回调");
+                    //表示续费,有消费记录id
+                    payFlag = true;
+                } catch (Exception e) {
+                    log.error("paypal支付回调异常,errorMsg:{}", e.getMessage());
+                }
+            }
+        }catch (Exception e) {
+            log.error("paypal支付回调异常,errorMsg:{}", e.getMessage());
+        }finally {
+            orderService.payResult(order.getOrderId(),payFlag,trade_no,openId);
+        }
+    }
+
 
 
     /**