ソースを参照

xiaochengxu api

xujunwei 4 年 前
コミット
10e05fd1cb

+ 22 - 0
framework-common/src/main/java/com/mrxu/framework/common/xcx/api/Jscode2session.java

@@ -0,0 +1,22 @@
+package com.mrxu.framework.common.xcx.api;
+
+import com.mrxu.framework.common.xcx.base.XcxHttp;
+import com.mrxu.framework.common.xcx.bean.Session;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Jscode2session {
+	
+	private static String url = "https://api.weixin.qq.com/sns/jscode2session";
+
+	public static Session getSession(String appId,String appSecret,String jsCode) {
+		Map<String, String> queryParas = new HashMap<String, String>();
+		queryParas.put("appid",appId);
+		queryParas.put("secret",appSecret);
+		queryParas.put("js_code",jsCode);
+		queryParas.put("grant_type","authorization_code");
+		Session rs = XcxHttp.get(Session.class,url, queryParas);
+		return rs;
+	}
+}

+ 117 - 0
framework-common/src/main/java/com/mrxu/framework/common/xcx/base/ErrorCode.java

@@ -0,0 +1,117 @@
+package com.mrxu.framework.common.xcx.base;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 微信接口全局返回码
+ */
+public class ErrorCode {
+
+    @SuppressWarnings("serial")
+    private static final Map<Integer, String> errCodeToErrMsg = new HashMap<Integer, String>(128) {
+        {
+            put(-1, "系统繁忙");
+            put(0, "请求成功");
+            put(40001, "获取access_token时AppSecret错误,或者access_token无效");
+            put(40002, "不合法的凭证类型");
+            put(40003, "不合法的OpenID");
+            put(40004, "不合法的媒体文件类型");
+            put(40005, "不合法的文件类型");
+            put(40006, "不合法的文件大小");
+            put(40007, "不合法的媒体文件id");
+            put(40008, "不合法的消息类型");
+            put(40009, "不合法的图片文件大小");
+            put(40010, "不合法的语音文件大小");
+            put(40011, "不合法的视频文件大小");
+            put(40012, "不合法的缩略图文件大小");
+            put(40013, "不合法的APPID");
+            put(40014, "不合法的access_token");
+            put(40015, "不合法的菜单类型");
+            put(40016, "不合法的按钮个数");
+            put(40017, "不合法的按钮个数");
+            put(40018, "不合法的按钮名字长度");
+            put(40019, "不合法的按钮KEY长度");
+            put(40020, "不合法的按钮URL长度");
+            put(40021, "不合法的菜单版本号");
+            put(40022, "不合法的子菜单级数");
+            put(40023, "不合法的子菜单按钮个数");
+            put(40024, "不合法的子菜单按钮类型");
+            put(40025, "不合法的子菜单按钮名字长度");
+            put(40026, "不合法的子菜单按钮KEY长度");
+            put(40027, "不合法的子菜单按钮URL长度");
+            put(40028, "不合法的自定义菜单使用用户");
+            put(40029, "不合法的oauth_code");
+            put(40030, "不合法的refresh_token");
+            put(40031, "不合法的openid列表");
+            put(40032, "不合法的openid列表长度");
+            put(40033, "不合法的请求字符,不能包含\\uxxxx格式的字符");
+            put(40035, "不合法的参数");
+            put(40038, "不合法的请求格式");
+            put(40039, "不合法的URL长度");
+            put(40050, "不合法的分组id");
+            put(40051, "分组名字不合法");
+            put(41001, "缺少access_token参数");
+            put(41002, "缺少appid参数");
+            put(41003, "缺少refresh_token参数");
+            put(41004, "缺少secret参数");
+            put(41005, "缺少多媒体文件数据");
+            put(41006, "缺少media_id参数");
+            put(41007, "缺少子菜单数据");
+            put(41008, "缺少oauth code");
+            put(41009, "缺少openid");
+            put(42001, "access_token超时");
+            put(42002, "refresh_token超时");
+            put(42003, "oauth_code超时");
+            put(43001, "需要GET请求");
+            put(43002, "需要POST请求");
+            put(43003, "需要HTTPS请求");
+            put(43004, "需要接收者关注");
+            put(43005, "需要好友关系");
+            put(44001, "多媒体文件为空");
+            put(44002, "POST的数据包为空");
+            put(44003, "图文消息内容为空");
+            put(44004, "文本消息内容为空");
+            put(45001, "多媒体文件大小超过限制");
+            put(45002, "消息内容超过限制");
+            put(45003, "标题字段超过限制");
+            put(45004, "描述字段超过限制");
+            put(45005, "链接字段超过限制");
+            put(45006, "图片链接字段超过限制");
+            put(45007, "语音播放时间超过限制");
+            put(45008, "图文消息超过限制");
+            put(45009, "接口调用超过限制");
+            put(45010, "创建菜单个数超过限制");
+            put(45015, "回复时间超过限制");
+            put(45016, "系统分组,不允许修改");
+            put(45017, "分组名字过长");
+            put(45018, "分组数量超过上限");
+            put(46001, "不存在媒体数据");
+            put(46002, "不存在的菜单版本");
+            put(46003, "不存在的菜单数据");
+            put(46004, "不存在的用户");
+            put(47001, "解析JSON/XML内容错误");
+            put(48001, "api功能未授权");
+            put(50001, "用户未授权该api");
+
+            // 客服
+            put(61451, "参数错误");
+            put(61452, "无效客服账号");
+            put(61453, "账号已存在");
+            put(61454, "账号名长度超过限制(前缀10个英文字符)");
+            put(61455, "账号名包含非法字符(英文+数字)");
+            put(61456, "账号个数超过限制(100个客服账号)");
+            put(61457, "无效头像文件类型");
+
+        }
+    };
+
+    /**
+     * 通过返回码获取返回信息
+     */
+    public static String get(int errCode) {
+        String result = errCodeToErrMsg.get(errCode);
+        return result != null ? result : "未知返回码:" + errCode;
+    }
+}

+ 50 - 0
framework-common/src/main/java/com/mrxu/framework/common/xcx/base/XcxHttp.java

@@ -0,0 +1,50 @@
+package com.mrxu.framework.common.xcx.base;
+
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.mrxu.framework.common.util.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+
+public class XcxHttp {
+	
+	private static int GLOBAL_CONNECT_TIMEOUT = 5000;
+
+	private static int GLOBAL_READ_TIMEOUT = 10000;
+
+	private static final Logger logger = LoggerFactory.getLogger(XcxHttp.class);
+	
+	public static <T extends XcxResult> T get(Class<T> clazz, String url, Map<String, String> queryParas) {
+		String rs = HttpUtil.get(GLOBAL_CONNECT_TIMEOUT, GLOBAL_READ_TIMEOUT, url, queryParas, null);
+		if(rs == null) {
+			throw new RuntimeException("与微信服务器网络不通");
+		}
+		T wxRs = JSON.parseObject(rs, clazz);
+		if(!wxRs.isSuccess()) {
+			throw new RuntimeException("调用微信接口出错:"+wxRs.getErrmsg());
+		}
+		return wxRs;
+    }
+	
+	public static JSONObject get(String url, Map<String, String> queryParas) {
+		String rs = HttpUtil.get(GLOBAL_CONNECT_TIMEOUT, GLOBAL_READ_TIMEOUT, url, queryParas, null);
+        return JSON.parseObject(rs);
+    }
+	
+	public static <T extends XcxResult> T post(Class<T> clazz,String url,JSONObject json) {
+		String rs = HttpUtil.post(GLOBAL_CONNECT_TIMEOUT, GLOBAL_READ_TIMEOUT, url,json.toJSONString());
+		if(rs == null) {
+			throw new RuntimeException("与微信服务器网络不通");
+		}
+		T wxRs = JSON.parseObject(rs, clazz);
+		if(!wxRs.isSuccess()) {
+			logger.error(rs);
+			throw new RuntimeException("调用微信接口出错:"+wxRs.getErrmsg());
+		}
+        return wxRs;
+    }
+	
+}

+ 52 - 0
framework-common/src/main/java/com/mrxu/framework/common/xcx/base/XcxResult.java

@@ -0,0 +1,52 @@
+package com.mrxu.framework.common.xcx.base;
+
+import com.alibaba.fastjson.JSONObject;
+import com.mrxu.framework.common.xcx.base.ErrorCode;
+
+public class XcxResult {
+
+    private Integer errcode;
+    private String errmsg = "SUCCESS";
+
+    public String toJsonString() {
+        return JSONObject.toJSONString(this);
+    }
+
+    public void setErrcode(Integer errcode) {
+        this.errcode = errcode;
+    }
+
+    public void setErrmsg(String errmsg) {
+        this.errmsg = errmsg;
+    }
+
+    /**
+     * errorCode 为 0 时也可以表示为成功
+     */
+    public boolean isSuccess() {
+        return errcode == null || errcode == 0;
+    }
+
+    public Integer getErrcode() {
+        return errcode;
+    }
+
+    public String getErrmsg() {
+        if (errcode != null) {
+            String result = ErrorCode.get(errcode);
+            if (result != null)
+                return result;
+        }
+        return errmsg;
+    }
+
+    /**
+     * 判断 API 请求结果失败是否由于 access_token 无效引起的 无效可能的情况 error_code 值: 40001 =
+     * 获取access_token时AppSecret错误,或者access_token无效(刷新后也可以引起老access_token失效)
+     * 42001 = access_token超时 42002 = refresh_token超时 40014 = 不合法的access_token
+     */
+    public boolean isAccessTokenInvalid() {
+        return errcode != null && (errcode == 40001 || errcode == 42001 || errcode == 42002 || errcode == 40014);
+    }
+    
+}

+ 27 - 0
framework-common/src/main/java/com/mrxu/framework/common/xcx/bean/Session.java

@@ -0,0 +1,27 @@
+package com.mrxu.framework.common.xcx.bean;
+
+import com.mrxu.framework.common.xcx.base.XcxResult;
+
+public class Session extends XcxResult {
+	private String openid;//用户唯一标识
+	private String session_key;//会话密钥
+	private String unionid;//用户在开放平台的唯一标识符。本字段在满足一定条件的情况下才返回。具体参看UnionID机制说明
+	public String getOpenid() {
+		return openid;
+	}
+	public void setOpenid(String openid) {
+		this.openid = openid;
+	}
+	public String getSession_key() {
+		return session_key;
+	}
+	public void setSession_key(String session_key) {
+		this.session_key = session_key;
+	}
+	public String getUnionid() {
+		return unionid;
+	}
+	public void setUnionid(String unionid) {
+		this.unionid = unionid;
+	}
+}