package com.ydproject.util; \nimport java.util.ArrayList; \nimport java.util.Date; \nimport java.util.List; \nimport org.json.JSONArray; \nimport org.json.JSONObject; \nimport com.ydproject.dao.DaoWx; \nimport com.ydproject.model.WxModel; \npublic class WxCloudUtil \n{ \n\tprivate String appid = "667778866666666666"; \n\tprivate String secret = "234556677777777777777777"; \n\tprivate String entranceBase = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="; \n\tprivate String entranceTail = "&response_type=code&scope=snsapi_base&state=123#wechat_redirect"; \n\tprivate String tokenFile = "token.ini"; \n\tprivate String cloud_env = "cloud1-659e2"; \n\tprivate String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret; \n\tprivate String query_url = "https://api.weixin.qq.com/tcb/databasequery?access_token="; \n\tprivate String count_url = "https://api.weixin.qq.com/tcb/databasecount?access_token="; \n\tprivate String update_url = "https://api.weixin.qq.com/tcb/databaseupdate?access_token="; \n\tprivate String delete_url = "https://api.weixin.qq.com/tcb/databasedelete?access_token="; \n\tprivate String add_url = "https://api.weixin.qq.com/tcb/databaseadd?access_token="; \n\tprivate String download_url = "https://api.weixin.qq.com/tcb/batchdownloadfile?access_token="; \n\tprivate String deletefile_url = "https://api.weixin.qq.com/tcb/batchdeletefile?access_token="; \n\tprivate String dbExport_url = "https://api.weixin.qq.com/tcb/databasemigrateexport?access_token="; \n\tprivate String dbExportStatus_url = "https://api.weixin.qq.com/tcb/databasemigratequeryinfo?access_token="; \n\t@SuppressWarnings("unused") \n\tprivate String downloadFolder = "user/"; \n\tpublic WxCloudUtil() \n\t{ \n\t\t \n\t} \n\tpublic WxCloudUtil(String tokenFile, String downloadFolder, String appid, String secret, String cloud_env) \n\t{ \n\t\tthis.tokenFile = tokenFile; \n\t\tthis.downloadFolder = downloadFolder; \n\t\tthis.appid = appid; \n\t\tthis.secret = secret; \n\t\tthis.cloud_env = cloud_env; \n\t\tthis.token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret; \n\t} \n\tpublic String getCode2SessionURL(String code) \n\t{ \n\t\treturn getCode2SessionURL(this.appid, this.secret, code); \n\t} \n\tpublic String getCode2SessionURL(String appid, String secret, String code) \n\t{ \n\t\treturn "https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code"; \n\t} \n\tpublic String getBaseAuthUrl(String redirUrl) \n\t{ \n\t\t//只能带一个自定义参数 \n\t\treturn entranceBase+redirUrl+entranceTail; \n\t} \n\t//初始获取token \n\tpublic String getToken(String source) \n\t{ \n\t\tString token = null; \n\t\tdouble expire = -1; \n\t\tif(source.equals("file")) \n\t\t{ \n\t\t\tFileUtil fp = new FileUtil(tokenFile, "utf8"); \n\t\t\tString line = fp.read(); \n\t\t\tif(line != null) \n\t\t\t{ \n\t\t\t\ttoken = line.split("\|")[0]; \n\t\t\t\texpire = Double.parseDouble(line.split("\|")[1]); \n\t\t\t} \n\t\t} \n\t\telse if(source.equals("db")) \n\t\t{ \n\t\t\tWxModel wxModel = new WxModel(); \n\t\t\twxModel.setAppid(appid); \n\t\t\tDaoWx daoWx = new DaoWx(); \n\t\t\tWxModel temp = daoWx.getAppInfo(wxModel); \n\t\t\tif(temp != null) \n\t\t\t{ \n\t\t\t\ttoken = temp.getToken(); \n\t\t\t\texpire = Double.parseDouble(temp.getExpire()); \n\t\t\t} \n\t\t} \n\t\tlong now = new Date().getTime(); \n\t\tif(now >= expire || token == null) \n\t\t{ \n\t\t\ttoken = refreshToken(source); \n\t\t\tif(token != null) \n\t\t\t{ \n\t\t\t\texpire = Double.parseDouble(token.split("\|")[1]); \n\t\t\t\ttoken = token.split("\|")[0]; \n\t\t\t} \n\t\t} \n\t\treturn token==null ? token : token+"|"+expire; \n\t} \n\t//检查token有效 返回可用token|expire \n\tpublic String checkToken(String token, double expire, String source) \n\t{ \n\t\tif(new Date().getTime() >= expire) \n\t\t{ \n\t\t\ttoken = refreshToken(source); \n\t\t} \n\t\treturn token; // null or token|expire \n\t} \n\t//云函数查询 query count delete update add deletefile \n\tpublic JSONObject cloudQuery(String queryType, String token, JSONObject query) \n\t{ \n\t\tString url = ""; \n\t\tif(queryType.equals("query")) \n\t\t{ \n\t\t\t// query:"" \n\t\t\turl = query_url + token; \n\t\t} \n\t\telse if(queryType.equals("count")) \n\t\t{ \n\t\t\t// query:"" \n\t\t\turl = count_url + token; \n\t\t} \n\t\telse if(queryType.equals("delete")) \n\t\t{ \n\t\t\t// query:"" \n\t\t\turl = delete_url + token; \n\t\t} \n\t\telse if(queryType.equals("update")) \n\t\t{ \n\t\t\t// query:"" \n\t\t\turl = update_url + token; \n\t\t} \n\t\telse if(queryType.equals("add")) \n\t\t{ \n\t\t\t// query:"" \n\t\t\turl = add_url + token; \n\t\t} \n\t\telse if(queryType.equals("deletefile")) \n\t\t{ \n\t\t\t//fileid_list:[] \n\t\t\turl = deletefile_url + token; \n\t\t} \n\t\tquery.put("env", cloud_env); \n\t\treturn sendCloudAction(url, query); //null or json \n\t} \n\t//云函数数据库导出 \n\tpublic String cloudExport(String filename, String filetype, String token, JSONObject query) \n\t{ \n\t\tString downURL = null; \n\t\tfiletype = filetype.equals("csv") ? "2" : "1"; \n\t\tString url = dbExport_url + token; \n\t\tquery.put("env", cloud_env); \n\t\tquery.put("file_type", filetype); \n\t\tquery.put("file_path", filename); \n\t\tJSONObject re = sendCloudAction(url, query); \n\t\tif(re != null && re.optString("errcode").equals("0")) \n\t\t{ \n\t\t\t//success \n\t\t\tString jobID = re.optString("job_id"); \n\t\t\turl = dbExportStatus_url + token; \n\t\t\tquery = new JSONObject(); \n\t\t\tquery.put("job_id", jobID); \n\t\t\tquery.put("env", cloud_env); \n\t\t\tre = sendCloudAction(url, query); \n\t\t\tif(re != null && re.optString("status").equals("success")) \n\t\t\t{ \n\t\t\t\tdownURL = re.optString("file_url"); \n\t\t\t} \n\t\t} \n\t\treturn downURL; \n\t} \n\t//云函数下载文件 \n\tpublic List cloudDownload(String[] fileIDs, int maxAge) \n\t{ \n\t\tString url = download_url; \n\t\tJSONArray arr = new JSONArray(); \n\t\tJSONObject query = new JSONObject(); \n\t\tquery.put("env", cloud_env); \n\t\tquery.put("file_list", arr); \n\t\tfor(int i=0; i<fileIDs.length; i++) \n\t\t{ \n\t\t\tJSONObject temp = new JSONObject(); \n\t\t\ttemp.put("fileid", fileIDs[i]); \n\t\t\ttemp.put("max_age", maxAge); \n\t\t\tarr.put(temp); \n\t\t} \n\t\tJSONObject re = sendCloudAction(url, query); \n\t\tList downUrls = new ArrayList(); \n\t\tif(re.optString("errcode").equals("0")) \n\t\t{ \n\t\t\tJSONArray list = re.optJSONArray("file_list"); \n\t\t\tfor(int i=0; i<list.length(); i++) \n\t\t\t{ \n\t\t\t\tJSONObject item = list.getJSONObject(i); \n\t\t\t\tif(item.optString("status").equals("0")) \n\t\t\t\t{ \n\t\t\t\t\tdownUrls.add(item.optString("download_url")); \n\t\t\t\t} \n\t\t\t\telse \n\t\t\t\t{ \n\t\t\t\t\tdownUrls.add(""); \n\t\t\t\t} \n\t\t\t} \n\t\t} \n\t\telse \n\t\t{ \n\t\t\tdownUrls = null; \n\t\t} \n\t\treturn downUrls; \n\t} \n\tpublic String cloudUrlToHttpUrl(String cloudUrl) \n\t{ \n\t\tString url = ""; \n\t\tString[] arr = cloudUrl.split("\."); \n\t\tString[] contentArr = arr[1].split("\/"); \n\t\turl = "https://"+contentArr[0]+".tcb.qcloud.la"+cloudUrl.replace(arr[0]+"."+contentArr[0], ""); \n\t\treturn url; \n\t} \n\t///////////////////////////////////////////////////////////////////////////// \n\t//token更新 token|expire \n\tprivate String refreshToken(String source) \n\t{ \n\t\tString token = null; \n\t\tdouble expire = -1; \n\t\tlong now = new Date().getTime(); \n\t\tHttpClientUtil client = new HttpClientUtil("https"); \n\t\ttry \n\t\t{ \n\t\t\tString context = client.sendGet("", token_url, "utf8", true); \n\t\t\tif(!context.contains("errcode")) \n\t\t\t{ \n\t\t\t\tJSONObject temp = new JSONObject(context); \n\t\t\t\ttoken = temp.optString("access_token"); \n\t\t\t\texpire = now + temp.optDouble("expires_in")*1000; \n\t\t\t\tif(!token.equals("")) \n\t\t\t\t{ \n\t\t\t\t\tif(source.equals("file")) \n\t\t\t\t\t{ \n\t\t\t\t\t\tFileUtil fp = new FileUtil(tokenFile, "utf8"); \n\t\t\t\t\t\tfp.write(token+"|"+expire, false); \n\t\t\t\t\t} \n\t\t\t\t\telse if(source.equals("db")) \n\t\t\t\t\t{ \n\t\t\t\t\t\tDaoWx daoWx = new DaoWx(); \n\t\t\t\t\t\tWxModel wxModel = new WxModel(); \n\t\t\t\t\t\twxModel.setAppid(appid); \n\t\t\t\t\t\twxModel.setToken(token); \n\t\t\t\t\t\twxModel.setExpire(expire+""); \n\t\t\t\t\t\tint flag = daoWx.updateAppInfo(wxModel); \n\t\t\t\t\t\ttoken = flag<=0 ? null : token; \n\t\t\t\t\t} \n\t\t\t\t} \n\t\t\t} \n\t\t} \n\t\tcatch (Exception e) \n\t\t{ \n\t\t\tclient.closeHttpClient(); \n\t\t\ttoken = null; \n\t\t} \n\t\treturn token==null ? token : token+"|"+expire; \n\t} \n\t//发起云函数请求 \n\tprivate JSONObject sendCloudAction(String url, JSONObject query) \n\t{ \n\t\tJSONObject re = null; \n\t\ttry \n\t\t{ \n\t\t\tif(url != null && url.contains("http")) \n\t\t\t{ \n\t\t\t\tHttpClientUtil httpclient = new HttpClientUtil("https"); \n\t\t\t\tString res = httpclient.httpsJsonPost(url, query, "utf8"); \n\t\t\t\tre = new JSONObject(res); \n\t\t\t} \n\t\t} \n\t\tcatch (Exception e) \n\t\t{ \n\t\t\te.printStackTrace(); \n\t\t} \n\t\treturn re; \n\t} \n} \n已知微信云的链接怎么在WxService.java中调取以上代码获取微信云中的数据,代码实现内容:可以在WxService.java中创建一个方法,并使用WxCloudUtil类来调用微信云的接口来获取数据。以下是一个示例实现: \n\njava \nimport com.ydproject.util.WxCloudUtil; \n\npublic class WxService { \n\n public String getDataFromWxCloud() { \n // 创建WxCloudUtil实例 \n WxCloudUtil wxCloudUtil = new WxCloudUtil(); \n\n // 获取token \n String token = wxCloudUtil.getToken("file"); \n\n // 构造查询参数 \n JSONObject query = new JSONObject(); \n query.put("collection", "myCollection"); \n\n // 调用云函数查询接口 \n JSONObject result = wxCloudUtil.cloudQuery("query", token, query); \n\n // 处理查询结果 \n if (result != null && result.optString("errcode").equals("0")) { \n // 查询成功 \n JSONArray data = result.optJSONArray("data"); \n // 进行数据处理... \n // 返回处理后的数据 \n return data.toString(); \n } else { \n // 查询失败 \n return null; \n } \n } \n} \n \n\n在上述示例代码中,首先我们创建了一个WxCloudUtil实例,并调用其getToken方法来获取token。然后,我们构造了一个查询参数JSONObject,指定了要查询的集合。接下来,我们调用WxCloudUtil的cloudQuery方法来执行云函数查询操作,并将查询结果存储在result变量中。最后,我们根据查询结果进行相应的处理,并返回处理后的数据。 \n\n需要注意的是,上述代码仅为示例,实际使用时可能需要根据具体的业务需求进行相应的修改和扩展。另外,还需要根据实际情况配置WxCloudUtil的相关参数,如appid、secret、cloud_env等。

微信云数据管理工具:WxCloudUtil - 代码解析与应用

原文地址: https://www.cveoy.top/t/topic/qmjW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录