ソースを参照

支付宝移动端支付

guomengjiao 9 ヶ月 前
コミット
16e7d8f2e3

+ 10 - 18
.idea/workspace.xml

@@ -30,12 +30,11 @@
   <component name="ChangeListManager">
     <list default="true" id="fc9366aa-6566-4981-8149-d75e02f8e884" name="默认的" comment="个人中心">
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/common/src/main/java/com/jeesite/common/constant/Constants.java" beforeDir="false" afterPath="$PROJECT_DIR$/common/src/main/java/com/jeesite/common/constant/Constants.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.java" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserOrderControllerApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserOrderControllerApi.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUser.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUser.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportLabelService.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportLabelService.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/util/AlipayUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/util/AlipayUtil.java" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -460,7 +459,7 @@
       <workItem from="1734579234738" duration="258000" />
       <workItem from="1734579502121" duration="1272000" />
       <workItem from="1734658594781" duration="126472000" />
-      <workItem from="1735184825354" duration="9411000" />
+      <workItem from="1735184825354" duration="14148000" />
     </task>
     <task id="LOCAL-00001" summary="1">
       <created>1676368709673</created>
@@ -791,7 +790,14 @@
       <option name="project" value="LOCAL" />
       <updated>1735193091988</updated>
     </task>
-    <option name="localTasksCounter" value="48" />
+    <task id="LOCAL-00048" summary="个人中心">
+      <created>1735200866094</created>
+      <option name="number" value="00048" />
+      <option name="presentableId" value="LOCAL-00048" />
+      <option name="project" value="LOCAL" />
+      <updated>1735200866094</updated>
+    </task>
+    <option name="localTasksCounter" value="49" />
     <servers />
   </component>
   <component name="TypeScriptGeneratedFilesManager">
@@ -874,20 +880,6 @@
     <option name="LAST_COMMIT_MESSAGE" value="个人中心" />
   </component>
   <component name="XDebuggerManager">
-    <breakpoint-manager>
-      <breakpoints>
-        <line-breakpoint enabled="true" type="java-line">
-          <url>file://$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/WebsiteUserOrderService.java</url>
-          <line>210</line>
-          <option name="timeStamp" value="26" />
-        </line-breakpoint>
-        <line-breakpoint type="java-line">
-          <url>file://$PROJECT_DIR$/modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportLabelService.java</url>
-          <line>52</line>
-          <option name="timeStamp" value="27" />
-        </line-breakpoint>
-      </breakpoints>
-    </breakpoint-manager>
     <watches-manager>
       <configuration name="SpringBootApplicationConfigurationType">
         <watch expression="query" />

+ 11 - 9
modules/bjflapi/src/main/java/com/jeesite/modules/bjflapi/report/WebsiteUserControllerApi.java

@@ -5,6 +5,7 @@ import com.jeesite.common.config.Global;
 import com.jeesite.common.constant.Constants;
 import com.jeesite.common.idgen.IdGen;
 import com.jeesite.common.image.CaptchaUtils;
+import com.jeesite.common.lang.DateUtils;
 import com.jeesite.common.lang.StringUtils;
 import com.jeesite.common.msg.EmailUtils;
 import com.jeesite.modules.bjflapi.AbstractController;
@@ -17,7 +18,6 @@ import com.jeesite.modules.report.util.oConvertUtils;
 import com.jeesite.modules.sys.annotation.WebsiteAuth;
 import com.jeesite.modules.sys.utils.R;
 import com.jeesite.modules.sys.utils.RedisUtil;
-import com.jeesite.modules.sys.utils.UserUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
@@ -47,9 +47,10 @@ public class WebsiteUserControllerApi extends AbstractController {
     private int EXPIRE;
 
     @GetMapping(value = "getValidCode")
-    public String getValidCode(HttpServletResponse response) throws Exception {
+    public String getValidCode(String unTime, HttpServletResponse response) throws Exception {
         String s = CaptchaUtils.generateCaptcha(response.getOutputStream());
-        UserUtils.putCache(Constants.WEBSITE_VALID_CODE, s);
+        redisUtil.set(Constants.WEBSITE_VALID_CODE + unTime, s);
+        redisUtil.expire(Constants.WEBSITE_VALID_CODE + unTime, 120);
         return s;
     }
 
@@ -72,10 +73,10 @@ public class WebsiteUserControllerApi extends AbstractController {
         password = DesUtils.decode(password, secretKey);
         if (StringUtils.isNotEmpty(websiteUser.getValidCode())) {
             //验证是否一致
-            if (!websiteUser.getValidCode().equals(UserUtils.getCache(Constants.WEBSITE_VALID_CODE))) {
+            if (!websiteUser.getValidCode().equals((String) redisUtil.get(Constants.WEBSITE_VALID_CODE + websiteUser.getUnTime()))) {
                 return R.error("验证码不一致");
             }
-            UserUtils.removeCache(Constants.WEBSITE_VALID_CODE);
+            redisUtil.del(Constants.WEBSITE_VALID_CODE + websiteUser.getUnTime());
         }
         //查询用户
         WebsiteUser oldUser = websiteUserService.findLoginCode(loginCode);
@@ -207,13 +208,14 @@ public class WebsiteUserControllerApi extends AbstractController {
         if (websiteUser == null) {
             return R.error("邮箱不存在");
         }
-        String dateKey = "wuLastDate";
+        String dateKey = "wuLastDate" + email;
         // 操作是否频繁验证, 如果离上次获取验证码小于60秒,则提示操作频繁。
-        Date date = UserUtils.getCache(dateKey);
-        if (date != null && (System.currentTimeMillis()-date.getTime())/(1000L) < 60L){
+        String date = (String) redisUtil.get(dateKey);
+        if (date != null && (System.currentTimeMillis()- DateUtils.parseDate(date).getTime())/(1000L) < 60L){
             return R.error("您当前操作太频繁,请稍等一会再操作!");
         }else{
-            UserUtils.putCache(dateKey, new Date());
+            redisUtil.set(dateKey, new Date());
+            redisUtil.expire(dateKey, 60);
         }
         String uuid = IdGen.uuid();
         // 设置token缓存有效时间

+ 9 - 0
modules/report/src/main/java/com/jeesite/modules/report/entity/WebsiteUser.java

@@ -41,6 +41,7 @@ public class WebsiteUser extends DataEntity<WebsiteUser> {
 	private String addr;		// 公司职务
 	private String confirmNewPassword;
 	private String validCode;
+	private String unTime;
 
 	public WebsiteUser() {
 		this(null);
@@ -148,4 +149,12 @@ public class WebsiteUser extends DataEntity<WebsiteUser> {
 	public void setValidCode(String validCode) {
 		this.validCode = validCode;
 	}
+
+	public String getUnTime() {
+		return unTime;
+	}
+
+	public void setUnTime(String unTime) {
+		this.unTime = unTime;
+	}
 }

+ 3 - 4
modules/report/src/main/java/com/jeesite/modules/report/service/ResearchBriefReportLabelService.java

@@ -47,10 +47,9 @@ public class ResearchBriefReportLabelService extends CrudService<ResearchBriefRe
 	}
 
 	private ResearchBriefReportLabel convert(ResearchBriefReportLabel r) {
-		if (r == null) {
-			return r;
-		}
-		ResearchBriefReportLabel label = super.get(r.getParentId());
+		ResearchBriefReportLabel where = new ResearchBriefReportLabel();
+		where.setId(r.getParentId());
+		ResearchBriefReportLabel label = dao.get(where);
 		if (label != null) {
 			r.setParentName(label.getName());
 		}

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

@@ -150,11 +150,11 @@ public class WebsiteUserOrderService extends CrudService<WebsiteUserOrderDao, We
 				return R.error(e.getErrCode() + e.getErrMsg());
 			}
 		} else if (Constants.orderPayMethod.ZFB_H5.equals(payMethod)) {
-//			try {
-//				payResult = alipayUtil.payH5(websiteUserOrder);
-//			} catch (AlipayApiException e) {
-//				return R.error(e.getErrCode() + e.getErrMsg());
-//			}
+			try {
+				payResult = alipayUtil.payH5(websiteUserOrder);
+			} catch (AlipayApiException e) {
+				return R.error(e.getErrCode() + e.getErrMsg());
+			}
 		}
 		if (StringUtils.isEmpty(payResult)) {
 			return R.error("支付调用第三方失败");

+ 37 - 1
modules/report/src/main/java/com/jeesite/modules/report/util/AlipayUtil.java

@@ -5,12 +5,15 @@ import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.DefaultAlipayClient;
 import com.alipay.api.domain.AlipayTradePagePayModel;
+import com.alipay.api.domain.AlipayTradeWapPayModel;
 import com.alipay.api.request.AlipayTradeCloseRequest;
 import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradeQueryRequest;
+import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.alipay.api.response.AlipayTradeCloseResponse;
 import com.alipay.api.response.AlipayTradePagePayResponse;
 import com.alipay.api.response.AlipayTradeQueryResponse;
+import com.alipay.api.response.AlipayTradeWapPayResponse;
 import com.jeesite.modules.report.entity.WebsiteUserOrder;
 import lombok.Data;
 import org.slf4j.Logger;
@@ -92,7 +95,7 @@ public class AlipayUtil {
         model.setTimeoutExpress(timeout);
 
         alipayRequest.setBizModel(model);
-        AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest);
+        AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest, "POST");
         // 收到支付宝的响应,响应一个页面,浏览器显示这个页面,就会自动到支付宝的收银台页面
         logger.info("支付宝 pay 响应:{}", JSONObject.toJSONString(response));
         if (response.isSuccess()) {
@@ -148,4 +151,37 @@ public class AlipayUtil {
         return new DefaultAlipayClient(gatewayUrl, app_id, app_private_key, "json", charset, alipay_public_key, sign_type);
     }
 
+    public String payH5(WebsiteUserOrder websiteUserOrder) throws AlipayApiException {
+        // 初始化SDK
+        AlipayClient alipayClient = getAlipayClient();
+
+        // 构造请求参数以调用接口
+        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
+        // 设置请求参数
+        request.setReturnUrl(return_url);
+        request.setNotifyUrl(notify_url);
+
+        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
+        // 设置商户订单号
+        model.setOutTradeNo(websiteUserOrder.getOrderNumber());
+        // 设置订单总金额
+        model.setTotalAmount(websiteUserOrder.getPayPrice().toString());
+        // 设置订单标题
+        model.setSubject("简报下载支付" + model.getTotalAmount() + "元");
+        // 设置产品码
+        model.setProductCode("QUICK_WAP_WAY");
+        // 设置PC扫码支付的方式
+        model.setTimeoutExpress(timeout);
+
+        request.setBizModel(model);
+        AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
+        // 如果需要返回GET请求,请使用
+        // AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
+        logger.info("支付宝 payH5 响应:{}", JSONObject.toJSONString(response));
+        if (response.isSuccess()) {
+            return response.getBody();
+        } else {
+            return null;
+        }
+    }
 }