Kaynağa Gözat

报告支付

guomengjiao 9 ay önce
ebeveyn
işleme
407922db96

+ 14 - 0
common/src/main/java/com/jeesite/common/lang/DateUtils.java

@@ -152,6 +152,20 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 		}
 	}
 
+	/**
+	 * 日期型字符串转化为日期 格式   see to DateUtils#parsePatterns
+	 */
+	public static Date parseDateByFormat(Object str, String pattern) {
+		if (str == null){
+			return null;
+		}
+		try {
+			return parseDate(str.toString(), pattern);
+		} catch (ParseException e) {
+			return null;
+		}
+	}
+
 	/**
 	 * 获取过去的天数
 	 * @param date

+ 27 - 2
modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java

@@ -163,9 +163,34 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 
 	public String payAsyncNotify(Map<String, String> paramMap) {
 		logger.info("zfb payAsyncNotify 进来了 {}", JSONObject.toJSONString(paramMap));
-		boolean signVerified = false; //调用SDK验证签名
 		try {
-			signVerified = AlipaySignature.rsaCheckV1(paramMap, alipayUtil.alipay_public_key, alipayUtil.charset, alipayUtil.sign_type);
+			// 交易状态
+			String trade_status = paramMap.get("trade_status");
+			String out_trade_no = paramMap.get("out_trade_no");
+			String total_amount = paramMap.get("total_amount");
+			String gmt_payment = paramMap.get("gmt_payment");
+			boolean signVerified = AlipaySignature.rsaCheckV1(paramMap, alipayUtil.alipay_public_key, alipayUtil.charset, alipayUtil.sign_type);
+			if (signVerified) {
+				// TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
+				if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) {
+					WebsiteUserOrder where = new WebsiteUserOrder();
+					where.setOrderNumber(out_trade_no);
+					where.setPayStatus(Constants.orderPayStatus.WAIT);
+					WebsiteUserOrder websiteUserOrder = dao.get(where);
+					if (websiteUserOrder == null) {
+						logger.error("zfb payAsyncNotify error {}订单不存在未支付", out_trade_no);
+					} else {
+						if (!total_amount.equals(websiteUserOrder.getPayPrice().toString())) {
+							logger.error("zfb payAsyncNotify amount不相等 {} {}", total_amount, websiteUserOrder.getPayPrice().toString());
+							return "failure";
+						}
+						websiteUserOrder.setPayStatus(Constants.orderPayStatus.PAY_SUCCESS);
+						websiteUserOrder.setPayDate(DateUtils.parseDateByFormat(gmt_payment, "yyyy-MM-dd HH:mm:ss"));
+						super.update(websiteUserOrder);
+					}
+					return "success";
+				}
+			}
 		} catch (AlipayApiException e) {
 			logger.error("zfb payAsyncNotify error {}", e);
 			return "failure";