Browse Source

BUG修复

yingp 6 years ago
parent
commit
9c873b83dc

+ 13 - 1
qywx-sdk/src/main/java/com/usoftchina/qywx/sdk/util/UrlUtils.java

@@ -25,7 +25,19 @@ public class UrlUtils {
      */
     public static String generateOAuthUrl(String corpId, String master, String agentCode, String agentBaseUrl, String authUrl, String redirectUrl) throws Exception {
         if (!urlPattern.matcher(redirectUrl).matches()) {
-            redirectUrl = agentBaseUrl + redirectUrl;
+            if (agentBaseUrl.endsWith("/")) {
+                if (redirectUrl.startsWith("/")) {
+                    redirectUrl = agentBaseUrl + redirectUrl.substring(1);
+                } else {
+                    redirectUrl = agentBaseUrl + redirectUrl;
+                }
+            } else {
+                if (redirectUrl.startsWith("/")) {
+                    redirectUrl = agentBaseUrl + redirectUrl;
+                } else {
+                    redirectUrl = agentBaseUrl + "/" + redirectUrl;
+                }
+            }
         }
         String base64Url = Base64.getEncoder().encodeToString(redirectUrl.getBytes());
         String oauthUrl = String.format("%s?agent=%s&url=%s&master=%s", authUrl, agentCode, base64Url, master);

+ 11 - 0
qywx-sdk/src/test/java/com/usoftchina/qywx/sdk/test/MessageSdkTest.java

@@ -7,6 +7,7 @@ import com.usoftchina.qywx.sdk.MessageSdk;
 import com.usoftchina.qywx.sdk.util.UrlUtils;
 import org.junit.Test;
 
+import java.net.URLEncoder;
 import java.util.*;
 
 /**
@@ -49,4 +50,14 @@ public class MessageSdkTest extends BaseTest {
         System.out.println(chatId);
         sdk.sendChat("Uas", new SendChatReq(chatId).text("Hello World"));
     }
+
+    @Test
+    public void sendProcessMessage() throws Exception {
+        String paramsStr = "{\"master\":\"N_USOFTSYS\",\"nodeId\":53840586,\"baseUrl\":\"" + URLEncoder.encode("http://erp.yitoa.com:8888/ERP/", "utf-8") + "\"}";
+        String msgUrl = UrlUtils.generateOAuthUrl("wwd42c39382ee6298e", "N_USOFTSYS", "Uas", "http://erp.yitoa.com:8888/ERP/",
+                "http://erp.yitoa.com:8888/office/api/authorize", "uas/approval/" + URLEncoder.encode(paramsStr, "utf-8"));
+        sdk.send("Uas", new SendMessageReq()
+                .textCard("应鹏的工作日报流程", "单据编号:2020020258", msgUrl, "查看详情")
+                .toUser("U0308"));
+    }
 }

+ 5 - 0
uas-office-core/src/main/java/com/usoftchina/uas/office/service/DataCenterService.java

@@ -29,6 +29,11 @@ public class DataCenterService extends AbstractService {
 
     @CacheEvict("DataCenter")
     public void save(DataCenter dataCenter) throws Exception {
+        if (null != dataCenter.getOuterUrl()) {
+            if (!dataCenter.getOuterUrl().endsWith("/")) {
+                dataCenter.setOuterUrl(dataCenter.getOuterUrl() + "/");
+            }
+        }
         jdbcTemplate.update("update DataCenter set url=?,username=?,password=?,driverClassName=?,outerUrl=?",
                 dataCenter.getUrl(), dataCenter.getUsername(), dataCenter.getPassword(), dataCenter.getDriverClassName(), dataCenter.getOuterUrl());
         dynamicDataSourceRegister.unregister(dataCenter);

+ 1 - 1
uas-office-qywx/src/main/java/com/usoftchina/uas/office/qywx/controller/QywxAuthController.java

@@ -82,7 +82,7 @@ public class QywxAuthController {
             }
             QywxAgent uasAgent = agentService.findByCode("Uas");
             redisTemplate.opsForValue().set(code, employee.getEm_id(), Duration.ofMinutes(1));
-            response.sendRedirect(String.format("%s/open/authorize.action?token=%s&master=%s&url=%s",
+            response.sendRedirect(String.format("%sopen/authorize.action?token=%s&master=%s&url=%s",
                     uasAgent.getOuterUrl(), code, master == null ? "" : master, url));
             return null;
         } finally {

+ 1 - 1
uas-office-qywx/src/main/java/com/usoftchina/uas/office/qywx/listener/UasProcessListener.java

@@ -77,7 +77,7 @@ public class UasProcessListener {
             QywxAgent agent = getUasAgent();
             String paramsStr = "{\"master\":\"" + event.getMaster() + "\",\"nodeId\":" + process.getJp_nodeid() + ",\"baseUrl\":\"" + URLEncoder.encode(agent.getOuterUrl(), "utf-8") + "\"}";
             String msgUrl = UrlUtils.generateOAuthUrl(messageSdk.getCorpId(), event.getMaster(), "Uas", agent.getOuterUrl(),
-                    dataCenter.getOuterUrl() + "/api/authorize", "uas/approval/" + URLEncoder.encode(paramsStr, "utf-8"));
+                    dataCenter.getOuterUrl() + "api/authorize", "uas/approval/" + URLEncoder.encode(paramsStr, "utf-8"));
             messageSdk.send("Uas", new SendMessageReq()
                     .textCard(title, description, msgUrl, "查看详情")
                     .toUser(employee.getEm_qywx()));

+ 1 - 1
uas-office-qywx/src/main/java/com/usoftchina/uas/office/qywx/manage/controller/QywxAgentController.java

@@ -93,7 +93,7 @@ public class QywxAgentController {
                 return Result.error("应用外网地址未设置");
             }
             String authUrl = UrlUtils.generateOAuthUrl(qywxProperties.getCorpId(), dataCenter.getUsername(), code,
-                    agent.getOuterUrl(), dataCenter.getOuterUrl() + "/api/authorize", "/");
+                    agent.getOuterUrl(), dataCenter.getOuterUrl() + "api/authorize", "/");
             return Result.success(authUrl);
         } finally {
             DataSourceHolder.clear();

+ 5 - 0
uas-office-qywx/src/main/java/com/usoftchina/uas/office/qywx/manage/service/QywxAgentService.java

@@ -38,6 +38,11 @@ public class QywxAgentService extends AbstractService {
 
     @CacheEvict(value = "QywxAgent", key = "#agent.code")
     public void save(QywxAgent agent) {
+        if (null != agent.getOuterUrl()) {
+            if (!agent.getOuterUrl().endsWith("/")) {
+                agent.setOuterUrl(agent.getOuterUrl() + "/");
+            }
+        }
         int count = queryForObject("select count(1) from QywxAgent where code=?", Integer.class, agent.getCode());
         if (count == 0) {
             jdbcTemplate.update("insert into QywxAgent(code,description,agent_id,secret,readonly,outer_url) values (?,?,?,?,?,?)",