Bläddra i källkod

支付宝支付PC端前台回调

小柒2012 6 år sedan
förälder
incheckning
58273ba3d5

+ 46 - 1
src/main/java/com/itstyle/modules/alipay/controller/AliPayController.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiOperation;
 import java.io.BufferedOutputStream;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import javax.servlet.http.HttpServletRequest;
@@ -82,7 +83,7 @@ public class AliPayController {
 		return "alipay/pay";
     }
     /**
-     * 支付宝支付回调(二维码、H5、网站)
+     * 支付宝支付后台回调(二维码、H5、网站)
      * @Author  科帮网
      * @param request
      * @param response
@@ -144,4 +145,48 @@ public class AliPayController {
 		out.flush();
 		out.close();
 	}
+	
+	/**
+	 * 支付宝支付PC端前台回调
+	 * @Author  科帮网
+	 * @param request
+	 * @return  String
+	 * @Date	2018年11月20日
+	 * 更新日志
+	 * 2018年11月20日  科帮网 首次创建
+	 */
+	@RequestMapping("/frontRcvResponse")
+	public String  frontRcvResponse(HttpServletRequest request){
+		try {
+			//获取支付宝GET过来反馈信息
+			Map<String,String> params = new HashMap<String,String>();
+			Map<String,String[]> requestParams = request.getParameterMap();
+			for (Iterator<String> 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");
+				params.put(name, valueStr);
+			}
+			//商户订单号
+			String orderNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
+			//前台回调验证签名 v1 or v2
+			boolean signVerified = aliPayService.rsaCheckV1(params);
+			if(signVerified) {
+				logger.info("订单号"+orderNo+"验证签名结果[成功].");
+				//处理业务逻辑
+			}else {
+				logger.info("订单号"+orderNo+"验证签名结果[失败].");
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		//支付成功、跳转到成功页面
+		return "success.html";
+	}
 }

+ 15 - 0
src/main/java/com/itstyle/modules/alipay/service/IAliPayService.java

@@ -1,4 +1,6 @@
 package com.itstyle.modules.alipay.service;
+import java.util.Map;
+
 import com.itstyle.common.model.Product;
 /**
  * 扫码支付以及手机H5支付
@@ -94,4 +96,17 @@ public interface IAliPayService {
 	 *
 	 */
 	String appPay(Product product);
+	
+	/**
+	 * 验证签名1
+	 * @param params
+	 * @return
+	 */
+	boolean rsaCheckV1(Map<String,String> params);
+	/**
+	 * 验证签名2
+	 * @param params
+	 * @return
+	 */
+	boolean rsaCheckV2(Map<String,String> params);
 }

+ 25 - 1
src/main/java/com/itstyle/modules/alipay/service/impl/AliPayServiceImpl.java

@@ -1,6 +1,7 @@
 package com.itstyle.modules.alipay.service.impl;
 
 import java.io.File;
+import java.util.Map;
 
 import net.sf.json.JSONObject;
 
@@ -15,6 +16,7 @@ import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.AlipayResponse;
 import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.internal.util.AlipaySignature;
 import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
 import com.alipay.api.request.AlipayTradeAppPayRequest;
 import com.alipay.api.request.AlipayTradeCloseRequest;
@@ -42,7 +44,7 @@ import com.itstyle.modules.alipay.util.AliPayConfig;
  * 创建时间	2018年1月15日
  */
 @Service
-@Component
+@Component("aliPayService")
 public class AliPayServiceImpl implements IAliPayService {
 	private static final Logger logger = LoggerFactory.getLogger(AliPayServiceImpl.class);
 	
@@ -312,4 +314,26 @@ public class AliPayServiceImpl implements IAliPayService {
 		}
 		return orderString ;
 	}
+	@Override
+	public boolean rsaCheckV1(Map<String, String> params) {
+		//验证签名 校验签名
+		boolean signVerified = false;
+	    try {
+			signVerified = AlipaySignature.rsaCheckV1(params, Configs.getAlipayPublicKey(), "UTF-8");
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return signVerified;
+	}
+	@Override
+	public boolean rsaCheckV2(Map<String, String> params) {
+		//验证签名 校验签名
+		boolean signVerified = false;
+	    try {
+			signVerified = AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(), "UTF-8");
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return signVerified;
+	}
 }

+ 3 - 1
src/main/resources/application-dev.properties

@@ -54,8 +54,10 @@ unionpay.notify.url=https://blog.52itstyle.com/union/pay
 spring.dubbo.application.id=springboot_pay
 spring.dubbo.application.name=springboot_pay
 spring.dubbo.registry.address=zookeeper://192.168.1.127:2181
+#spring.dubbo.registry.username=admin
+#spring.dubbo.registry.password=admin
 spring.dubbo.provider.threads=10
 spring.dubbo.provider.threadpool=fixed
 spring.dubbo.provider.loadbalance=roundrobin
 spring.dubbo.server=true
-spring.dubbo.protocol.name=dubbo
+spring.dubbo.protocol.name=dubbo