微信云数据管理工具:WxCloudUtil - 代码解析与应用
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 Listjava \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等。
原文地址: https://www.cveoy.top/t/topic/qmjW 著作权归作者所有。请勿转载和采集!