package com.iformall.controller; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.controller.base.BaseController; import com.iformall.domain.dto.WxWeappCodeAuditDto; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxWeappCodeStatusVo; import com.iformall.enums.*; import com.iformall.service.*; import com.iformall.service.wechat.FmOpenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.open.api.WxOpenMaService; import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo; import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage; import me.chanjar.weixin.open.bean.result.*; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.Date; import java.util.List; import java.util.Map; /** * Stormeye Wu */ @RestController @RequestMapping("/weappCode") @Api(description = "微信第三方开发平台-小程序-代码管理") public class WechatWeappCodeController extends BaseController { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private FmOpenService openService; @Autowired private WxWeappCodeStatusService weappCodeStatusService; @Autowired private WxWeappAuditStatusService weappAuditStatusService; @Autowired private WxWeappReleaseStatusService weappReleaseStatusService; @Autowired private WxAppinfoService appinfoService; @Autowired private WxAuthorizerInfoService authorizerInfoService; @Autowired private WxWeappExtSetService weappExtSetService; @ApiOperation(value = "为授权的小程序帐号上传小程序代码", notes = "extInfo参考https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html") @PostMapping("/codeCommit") public ResultData codeCommit(Long templateId, String userVersion, String userDesc, String extInfoStr) { Gson gson = new GsonBuilder().create(); WxMaOpenCommitExtInfo extInfo = gson.fromJson(extInfoStr, new TypeToken() {}.getType()); String appId = extInfo.getExtAppid(); // 检查appId是否已授权 WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId); if(authorizerInfo == null) { return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH); } if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) { return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH); } WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId); WxAppinfo appinfo = appinfoService.getByAppId(appId); int iAppType = 0; String appTypeStr = userVersion.substring(0, 1); if(appTypeStr.equalsIgnoreCase("C")) iAppType = EnumAppType.C.getCode(); else if(appTypeStr.equalsIgnoreCase("B")) iAppType = EnumAppType.B.getCode(); try { // code提交 WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); logger.info(extInfo.toString()); WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo); logger.info(openRet.toString()); boolean codeCommitStatus = false; if (openRet.isSuccess()) { codeCommitStatus = true; } if (codeStatus == null) { codeStatus = new WxWeappCodeStatus(); codeStatus.setAppId(appId); if (appinfo != null) { codeStatus.setTenantId(appinfo.getTenantId()); codeStatus.setType(appinfo.getType()); } codeStatus.setUserVersion(userVersion); codeStatus.setVersionDesc(userDesc); if(codeCommitStatus) { codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode()); } else { codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode()); codeStatus.setCodeErrCode(gson.toJson(openRet)); } codeStatus.setCodeTime(new Date()); weappCodeStatusService.saveStatus(codeStatus); } else { codeStatus.setUserVersion(userVersion); codeStatus.setVersionDesc(userDesc); if(codeCommitStatus) { codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode()); } else { codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode()); codeStatus.setCodeErrCode(gson.toJson(openRet)); } codeStatus.setCodeTime(new Date()); weappCodeStatusService.updateStatus(codeStatus); } return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); if (codeStatus == null) { codeStatus = new WxWeappCodeStatus(); codeStatus.setAppId(appId); if (appinfo != null) { codeStatus.setTenantId(appinfo.getTenantId()); codeStatus.setType(appinfo.getType()); } codeStatus.setUserVersion(userVersion); codeStatus.setVersionDesc(userDesc); codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode()); codeStatus.setCodeErrCode(e.getMessage()); codeStatus.setCodeTime(new Date()); weappCodeStatusService.saveStatus(codeStatus); } else { codeStatus.setUserVersion(userVersion); codeStatus.setVersionDesc(userDesc); codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode()); codeStatus.setCodeErrCode(e.getMessage()); codeStatus.setCodeTime(new Date()); weappCodeStatusService.updateStatus(codeStatus); } return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("获取体验小程序的体验二维码") @GetMapping("/getQrcode") public void getQrcode(@RequestParam(value = "appId") String appId, @RequestParam(value = "pagePath") String pagePath, @RequestParam(value = "params", required = false) Map params, HttpServletResponse response, HttpServletRequest req) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); File file = openMaService.getTestQrcode(pagePath, params); ServletOutputStream out = response.getOutputStream(); response.reset(); response.setContentType("image/jpeg"); String agent = req.getHeader("user-agent"); String filename = "QRCode.jpg"; if (agent.contains("Firefox")) { response.setHeader("Content-disposition", "attachment; filename=" + new String(filename.getBytes("GB2312"),"ISO-8859-1")); } else { response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(filename,"UTF-8")); } // 循环取出流中的数据 byte[] b = new byte[1024]; int len; InputStream inStream = new FileInputStream(file); while ((len = inStream.read(b)) > 0) response.getOutputStream().write(b, 0, len); inStream.close(); } catch (WxErrorException e) { logger.error(e.getMessage()); } catch (IOException e) { logger.error(e.getMessage()); } } @ApiOperation("获取授权小程序帐号已设置的类目") @GetMapping("/getCategory") public ResultData getCategory(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaCategoryListResult openRet = openMaService.getCategoryList(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("获取小程序的第三方提交代码的页面配置") @GetMapping("/getPage") public ResultData getPage(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaPageListResult openRet = openMaService.getPageList(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("将第三方提交的代码包提交审核 -- 即将废弃") @GetMapping("/submitAudit") @ApiImplicitParams({ @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "version", value = "version", dataType = "String", paramType = "query")}) public ResultData submitAudit(String appId, String version) { Gson gson = new GsonBuilder().create(); WxWeappExtSet extSetQ = new WxWeappExtSet(); extSetQ.setAppId(appId); WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ); if(StringUtils.isBlank(extSet.getReleaseJson())) { logger.error("Release JSON is null"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo(); codeQ.setAppId(appId); if(StringUtils.isNotBlank(version)) { codeQ.setUserVersion(version); } List codeStatusList = weappCodeStatusService.getList(codeQ); if(codeStatusList.size() == 1) { WxWeappCodeStatusVo codeStatus = codeStatusList.get(0); WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken() {}.getType()); if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) { WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); boolean submitStatus = false; String codeErrCode = ""; Long auditId = null; try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage); logger.info(openRet.toString()); if(openRet.isSuccess()) { submitStatus = true; codeErrCode = gson.toJson(openRet); auditId = openRet.getAuditId(); } else { submitStatus = false; codeErrCode = gson.toJson(openRet); } } catch (WxErrorException e) { logger.error(e.getMessage()); submitStatus = false; codeErrCode = e.getMessage(); } if (auditStatus == null) { auditStatus = new WxWeappAuditStatus(); auditStatus.setId(codeStatus.getId()); auditStatus.setTenantId(codeStatus.getTenantId()); auditStatus.setAppId(codeStatus.getAppId()); auditStatus.setType(codeStatus.getType()); auditStatus.setUserVersion(codeStatus.getUserVersion()); auditStatus.setVersionDesc(codeStatus.getVersionDesc()); if(submitStatus) { auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); } else { auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); } auditStatus.setAuditErrCode(codeErrCode); auditStatus.setAuditTime(new Date()); weappAuditStatusService.saveStatus(auditStatus); } else { if(!submitStatus) { if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion()) && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) { // 提交审核失败不替换当前审核中的数据 return new ResultData(ErrorCode.WEAPP_HAD_AUDITING); } codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode()); codeStatus.setCodeErrCode(codeErrCode); } else { codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode()); } auditStatus.setUserVersion(codeStatus.getUserVersion()); auditStatus.setVersionDesc(codeStatus.getVersionDesc()); auditStatus.setAuditTime(new Date()); weappAuditStatusService.updateStatus(auditStatus); } if(submitStatus) { return new ResultData(codeErrCode); } else { return new ResultData(ErrorCode.WEAPP_AUDIT_ERR); } } else { logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage()); return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR); } } return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR); } @ApiOperation("查询服务商的当月提审限额(quota)和加急次数") @GetMapping("/queryQuota") @ApiImplicitParams({ @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true)}) public ResultData queryQuota(String appId) { logger.debug("[" + getIpAddr() + "] WechatWeappCodeController::queryQuota"); try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaQueryQuotaResult openRet = openMaService.queryQuota(); logger.info(openRet.toString()); return new ResultData(openRet.toString()); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(e.getMessage()); } } @ApiOperation("将第三方提交的代码包提交审核") @PostMapping("/submitAuditWithFeedBack") public ResultData submitAudit(@RequestBody WxWeappCodeAuditDto codeAuditDto) { Gson gson = new GsonBuilder().create(); WxWeappExtSet extSetQ = new WxWeappExtSet(); extSetQ.setAppId(codeAuditDto.getAppId()); WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ); if(StringUtils.isBlank(extSet.getReleaseJson())) { logger.error("Release JSON is null"); return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo(); codeQ.setAppId(codeAuditDto.getAppId()); if(StringUtils.isNotBlank(codeAuditDto.getVersion())) { codeQ.setUserVersion(codeAuditDto.getVersion()); } List codeStatusList = weappCodeStatusService.getList(codeQ); if(codeStatusList.size() == 1) { WxWeappCodeStatusVo codeStatus = codeStatusList.get(0); WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken() {}.getType()); if(StringUtils.isNotBlank(codeAuditDto.getFeedbackInfo())) { subMessage.setFeedbackInfo(codeAuditDto.getFeedbackInfo()); } if(StringUtils.isNotBlank(codeAuditDto.getFeedbackStuff())) { subMessage.setFeedbackStuff(codeAuditDto.getFeedbackStuff()); } if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) { WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(codeAuditDto.getAppId()); boolean submitStatus = false; String codeErrCode = ""; Long auditId = null; try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(codeAuditDto.getAppId()); WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage); logger.info(openRet.toString()); if(openRet.isSuccess()) { submitStatus = true; codeErrCode = gson.toJson(openRet); auditId = openRet.getAuditId(); } else { submitStatus = false; codeErrCode = gson.toJson(openRet); } } catch (WxErrorException e) { logger.error(e.getMessage()); submitStatus = false; codeErrCode = e.getMessage(); } if (auditStatus == null) { auditStatus = new WxWeappAuditStatus(); auditStatus.setId(codeStatus.getId()); auditStatus.setTenantId(codeStatus.getTenantId()); auditStatus.setAppId(codeStatus.getAppId()); auditStatus.setType(codeStatus.getType()); auditStatus.setUserVersion(codeStatus.getUserVersion()); auditStatus.setVersionDesc(codeStatus.getVersionDesc()); auditStatus.setAuditid(auditId); if(submitStatus) { auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); } else { auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); } auditStatus.setAuditErrCode(codeErrCode); auditStatus.setAuditTime(new Date()); weappAuditStatusService.saveStatus(auditStatus); } else { if(!submitStatus) { if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion()) && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) { // 提交审核失败不替换当前审核中的数据 return new ResultData(ErrorCode.WEAPP_HAD_AUDITING); } codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode()); codeStatus.setCodeErrCode(codeErrCode); } else { codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode()); } auditStatus.setUserVersion(codeStatus.getUserVersion()); auditStatus.setVersionDesc(codeStatus.getVersionDesc()); auditStatus.setAuditid(auditId); auditStatus.setAuditTime(new Date()); weappAuditStatusService.updateStatus(auditStatus); } if(submitStatus) { return new ResultData(codeErrCode); } else { return new ResultData(ErrorCode.WEAPP_AUDIT_ERR); } } else { logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage()); return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR); } } return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR); } @ApiOperation("加速某个指定版本的审核状态") @GetMapping("/speedAudit") @ApiImplicitParams({ @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "auditid", value = "auditid", dataType = "Long", paramType = "query", required = true)}) public ResultData speedAudit(String appId, Long auditid) { logger.debug("[" + getIpAddr() + "] WechatWeappCodeController::speedAudit"); try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); Boolean ret = openMaService.speedAudit(Long.valueOf(auditid)); return new ResultData(ret.toString()); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(e.getMessage()); } } @ApiOperation("查询某个指定版本的审核状态") @PostMapping("/getAuditstatus") public ResultData getAuditstatus(String appId, String auditidStr) { Gson gson = new GsonBuilder().create(); Long auditId = Long.valueOf(auditidStr); WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); if(auditStatus != null && auditStatus.getAuditid().equals(auditId)) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaQueryAuditResult openRet = openMaService.getAuditStatus(auditId); logger.info(openRet.toString()); if (openRet.isSuccess()) { auditStatus.setAuditid(openRet.getAuditId()); // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回 switch (openRet.getStatus().intValue()) { case 0: auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode()); break; case 1: auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); break; case 2: auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); break; case 3: auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode()); break; default: auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); break; } auditStatus.setAuditErrCode(gson.toJson(openRet)); auditStatus.setAuditTime(new Date()); weappAuditStatusService.updateStatus(auditStatus); } return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } return new ResultData(Result.ERROR, "auditid不对应"); } @ApiOperation("查询最新一次提交的审核状态") @GetMapping("/getLatestAuditstatus") public ResultData get_latest_auditstatus(String appId) { Gson gson = new GsonBuilder().create(); WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); if(auditStatus != null && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaQueryAuditResult openRet = openMaService.getLatestAuditStatus(); logger.info(openRet.toString()); if (openRet.isSuccess()) { auditStatus.setAuditid(openRet.getAuditId()); // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回 switch (openRet.getStatus().intValue()) { case 0: auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode()); break; case 1: auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode()); break; case 2: auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); break; case 3: auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode()); break; default: auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode()); break; } auditStatus.setAuditErrCode(gson.toJson(openRet)); auditStatus.setAuditTime(new Date()); weappAuditStatusService.updateStatus(auditStatus); } return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } else { return new ResultData(Result.ERROR, "审核状态不是审核中"); } } @ApiOperation("发布已通过审核的小程序") @GetMapping("/releaseAudited") public ResultData releaesAudited(String appId) { if(StringUtils.isBlank(appId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); } Gson gson = new GsonBuilder().create(); WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); if(auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.SUCCESS.getCode())) { boolean isUpdate = false; WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId); if(releaseStatus != null) { // 版本已发布成功,跳过 if(releaseStatus.getUserVersion().equals(auditStatus.getUserVersion()) && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) { return new ResultData(ErrorCode.WEAPP_APP_RELEASEED); } releaseStatus.setUserVersion(auditStatus.getUserVersion()); releaseStatus.setVersionDesc(auditStatus.getVersionDesc()); isUpdate = true; } else { releaseStatus = new WxWeappReleaseStatus(); releaseStatus.setId(auditStatus.getId()); releaseStatus.setTenantId(auditStatus.getTenantId()); releaseStatus.setAppId(auditStatus.getAppId()); releaseStatus.setType(auditStatus.getType()); releaseStatus.setUserVersion(auditStatus.getUserVersion()); releaseStatus.setVersionDesc(auditStatus.getVersionDesc()); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.releaesAudited(); logger.info(openRet.toString()); boolean releaseSuccess = false; if(openRet.isSuccess()) { releaseSuccess = true; } if(releaseSuccess) { releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode()); } else { if(openRet.getErrcode().equals("85052")) { // app is already released releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode()); } else { releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode()); } } releaseStatus.setReleaseErrCode(gson.toJson(openRet)); releaseStatus.setReleaseTime(new Date()); if(isUpdate) { weappReleaseStatusService.updateStatus(releaseStatus); } else { weappReleaseStatusService.saveStatus(releaseStatus); } return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); if(e.getError().getErrorCode() == 85052) { releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode()); } else { releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode()); } releaseStatus.setReleaseErrCode(e.getMessage()); releaseStatus.setReleaseTime(new Date()); if(isUpdate) { weappReleaseStatusService.updateStatus(releaseStatus); } else { weappReleaseStatusService.saveStatus(releaseStatus); } return new ResultData(Result.ERROR, e.getMessage()); } } else { return new ResultData(ErrorCode.WEAPP_NOT_AUDITED); } } @ApiOperation("小程序版本回退") @GetMapping("/revertCodeRelease") public ResultData revertCodeRelease(String appId) { Gson gson = new GsonBuilder().create(); WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId); try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.revertCodeReleaes(); logger.info(openRet.toString()); if(openRet.isSuccess()) { if(releaseStatus != null) { releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.BACK.getCode()); releaseStatus.setReleaseErrCode(gson.toJson(openRet)); releaseStatus.setReleaseTime(new Date()); weappReleaseStatusService.updateStatus(releaseStatus); } return new ResultData(); } return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("查询当前设置的最低基础库版本及各版本用户占比") @GetMapping("/getSupportVersion") public ResultData getSupportVersion(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String openRet = openMaService.getSupportVersion(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("设置最低基础库版本") @GetMapping("/setSupportVersion") public ResultData setSupportVersion(String appId, String version) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String openRet = openMaService.setSupportVersion(version); logger.info(openRet); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation(value = "小程序审核撤回", notes = "单个帐号每天审核撤回次数最多不超过1次,一个月不超过10次。") @GetMapping("/undoCodeAudit") public ResultData undoCodeAudit(String appId) { Gson gson = new GsonBuilder().create(); WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId); if(auditStatus != null) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openResult = openMaService.undoCodeAudit(); Date curDate = new Date(); if(openResult.isSuccess()) { // 审核状态 auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode()); auditStatus.setAuditErrCode(gson.toJson(openResult)); auditStatus.setAuditTime(curDate); weappAuditStatusService.updateStatus(auditStatus); // 审核次数记入wx_authorizer_info WxAuthorizerInfo authorizerInfo = new WxAuthorizerInfo(); authorizerInfo.setAuthorizerAppid(appId); authorizerInfo.setAuditBackTime(curDate); authorizerInfoService.updateAuthBackInfo(authorizerInfo); return new ResultData("审核撤回成功"); } return new ResultData(Result.ERROR, "审核撤回失败"); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } return new ResultData(Result.ERROR, "没有审核记录,不能撤回"); } }