Przeglądaj źródła

微信推送和小程序获取openid添加

guozx 3 lat temu
rodzic
commit
1a80225b85

+ 34 - 0
application-facade/src/main/java/com/factory/controller/wx/WxController.java

@@ -1,18 +1,26 @@
 package com.factory.controller.wx;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.factory.base.entity.aggregates.ResponseBean;
+import com.factory.base.util.res.ResponseBeanBuilder;
+import com.factory.util.client.HttpCilentUntil;
 import com.factory.wx.entity.res.FunctionsRes;
 import com.factory.wx.service.WxService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 小程序功能显示
@@ -35,4 +43,30 @@ public class WxController {
         Long userId = (Long) request.getAttribute("LOGIN_USER_ID");//获取用户id
         return wxService.getUserFunction(userId);
     }
+    @Value("${wx.minprogram.appsecret}")
+    private String appsecret;
+
+    @Value("${wx.minprogram.appid}")
+    private String appid;
+
+    @ApiOperation(value = "小程序获取openid")
+    @GetMapping("/minprogram/openId")
+    public ResponseBean<String>  requestWeChatOpenid(HttpServletResponse response, HttpServletRequest request) throws Throwable {
+        String code = request.getParameter("code");//获取code
+        response.setContentType("text/html");
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+        Map params = new HashMap();
+        params.put("secret",appsecret);
+        params.put("appid", appid);
+        params.put("grant_type", "authorization_code");
+        params.put("js_code", code);
+        params.put("connect_redirect","1");
+        String result = HttpCilentUntil.httpGetToString(
+                "https://api.weixin.qq.com/sns/jscode2session", params);
+        JSONObject jsonObject = JSON.parseObject(result);
+        String openid = jsonObject.get("openid").toString();
+       return ResponseBeanBuilder.ok(openid);
+    }
+
 }

+ 15 - 0
application-facade/src/main/java/com/factory/util/client/AppEntry.java

@@ -0,0 +1,15 @@
+package com.factory.util.client;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class AppEntry {
+
+    private String secret;
+    private String appId;
+
+
+
+}

+ 34 - 1
application-facade/src/main/java/com/factory/util/client/HttpCilentUntil.java

@@ -4,11 +4,14 @@ import org.apache.http.HttpEntity;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 
 import java.net.URLEncoder;
+import java.nio.charset.Charset;
 import java.util.Map;
 
 public class HttpCilentUntil {
@@ -19,7 +22,7 @@ public class HttpCilentUntil {
      * @param params
      * @return
      */
-    public static String httpRequestToString(String url, Map<String, String> params) {
+    public static String httpGetToString(String url, Map<String, String> params) {
         String result = null;
         CloseableHttpClient hp=null;
         try {
@@ -56,4 +59,34 @@ public class HttpCilentUntil {
         return result;
     }
 
+    /**
+     * 提交一个json信息
+     * @param url
+     * @param jsonParam
+     * @return
+     */
+    public static String httpJsonToString(String url, String jsonParam) {
+        String result = null;
+        CloseableHttpClient client=null;
+        try {
+            client = HttpClients.createDefault();
+            RequestConfig requestConfig = RequestConfig.custom()
+                    .setConnectTimeout(5000).setConnectionRequestTimeout(1000)
+                    .setSocketTimeout(5000).build();
+            HttpPost hp = new HttpPost( url);
+
+            hp.addHeader("Content-type","application/json; charset=utf-8");
+            hp.setHeader("Accept", "application/json");
+            hp.setEntity(new StringEntity(jsonParam, Charset.forName("UTF-8")));
+            hp.setConfig(requestConfig);
+            CloseableHttpResponse response=client.execute(hp);
+            HttpEntity entity = response.getEntity();
+            result = EntityUtils.toString(entity, "utf-8");
+        } catch (Throwable e) {
+            e.printStackTrace();
+            return null;
+        }
+        return result;
+    }
+
 }

+ 12 - 0
application-facade/src/main/java/com/factory/util/client/PushResult.java

@@ -0,0 +1,12 @@
+package com.factory.util.client;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class PushResult {
+
+    private long errCode;
+    private String errMsg;
+}

+ 45 - 0
application-facade/src/main/java/com/factory/util/client/PushWxMessage.java

@@ -0,0 +1,45 @@
+package com.factory.util.client;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class PushWxMessage {
+
+   public static String  sendMessage(AppEntry appinfo,TemplateEntry template){
+     try {
+         Map params = new HashMap();
+         params.put("secret", appinfo.getSecret());
+         params.put("appid", appinfo.getAppId());
+         params.put("grant_type", "client_credential");
+         String result = HttpCilentUntil.httpGetToString(
+                 "https://api.weixin.qq.com/cgi-bin/token", params);
+         JSONObject jsonObject = JSON.parseObject(result);
+         String access_token = jsonObject.get("access_token").toString();
+         String pushUrl = new StringBuffer("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=").append(access_token).toString();
+         result = HttpCilentUntil.httpJsonToString(pushUrl, JSON.toJSONString(template));
+         jsonObject = JSON.parseObject(result);
+         String errCode = jsonObject.get("errCode").toString();
+         String errMsg = jsonObject.get("errMsg").toString();
+         System.out.println(errCode);
+         return errCode;
+     }catch (Throwable e){
+         e.printStackTrace();
+         return "-1";
+     }
+   }
+
+    public static void main(String[] args) {
+        AppEntry app=AppEntry.builder().appId("wx7811e5dd1856711c").secret("47dbeb1f0dfac08a963a09301c7eb50c").build();
+        HashMap<String,ValEntry> dataMap=new HashMap();
+        dataMap.put("thing1",ValEntry.builder().value("this is one").build());
+        dataMap.put("thing2",ValEntry.builder().value("this is two").build());
+        dataMap.put("time3",ValEntry.builder().value("2021-07-23 20:00").build());
+        dataMap.put("thing4",ValEntry.builder().value("Bella").build());
+        TemplateEntry tpl=TemplateEntry.builder().template_id("3RatcsOA-T0Dsgevr-1UGvYzZvhS0UY9A86fnTFax50").touser("openid").data(dataMap).build();
+        PushWxMessage.sendMessage(app,tpl);
+    }
+
+}

+ 17 - 0
application-facade/src/main/java/com/factory/util/client/TemplateEntry.java

@@ -0,0 +1,17 @@
+package com.factory.util.client;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.HashMap;
+
+@Data
+@Builder
+public class TemplateEntry {
+    private String touser; //openid
+    private String template_id; //模板id
+    private HashMap<String,ValEntry> data; //模板数据
+    private String page;//不是必填
+    private String miniprogram_state; //不是必填
+    private String lang;//不是必填
+}

+ 10 - 0
application-facade/src/main/java/com/factory/util/client/ValEntry.java

@@ -0,0 +1,10 @@
+package com.factory.util.client;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class ValEntry {
+    private String value;
+}

+ 4 - 1
application-facade/src/main/resources/application.yml

@@ -73,4 +73,7 @@ mybatis-plus:
       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
+wx:
+  minprogram:
+     appid: wxeb29362c7f2e9e48
+     appsecret: f637286fcda117a3e5598df9338ad82