You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

561 lines
26 KiB

  1. package com.iformall.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.google.gson.Gson;
  4. import com.google.gson.GsonBuilder;
  5. import com.google.gson.reflect.TypeToken;
  6. import com.iformall.common.ErrorCode;
  7. import com.iformall.common.Result;
  8. import com.iformall.common.ResultData;
  9. import com.iformall.domain.po.*;
  10. import com.iformall.domain.vo.WxWeappCodeStatusVo;
  11. import com.iformall.enums.*;
  12. import com.iformall.service.*;
  13. import com.iformall.service.wechat.WxOpenService;
  14. import io.swagger.annotations.Api;
  15. import io.swagger.annotations.ApiImplicitParam;
  16. import io.swagger.annotations.ApiImplicitParams;
  17. import io.swagger.annotations.ApiOperation;
  18. import me.chanjar.weixin.common.error.WxErrorException;
  19. import me.chanjar.weixin.open.api.WxOpenMaService;
  20. import me.chanjar.weixin.open.bean.ma.WxMaOpenCommitExtInfo;
  21. import me.chanjar.weixin.open.bean.message.WxOpenMaSubmitAuditMessage;
  22. import me.chanjar.weixin.open.bean.result.*;
  23. import org.apache.commons.lang3.StringUtils;
  24. import org.slf4j.Logger;
  25. import org.slf4j.LoggerFactory;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.web.bind.annotation.*;
  28. import javax.servlet.ServletOutputStream;
  29. import javax.servlet.http.HttpServletRequest;
  30. import javax.servlet.http.HttpServletResponse;
  31. import java.io.File;
  32. import java.io.FileInputStream;
  33. import java.io.IOException;
  34. import java.io.InputStream;
  35. import java.net.URLEncoder;
  36. import java.util.Date;
  37. import java.util.List;
  38. import java.util.Map;
  39. /**
  40. * Stormeye Wu
  41. */
  42. @RestController
  43. @RequestMapping("/weappCode")
  44. @Api(description = "微信第三方开发平台-小程序-代码管理")
  45. public class WechatWeappCodeController {
  46. private final Logger logger = LoggerFactory.getLogger(getClass());
  47. @Autowired
  48. private WxOpenService openService;
  49. @Autowired
  50. private WxWeappCodeStatusService weappCodeStatusService;
  51. @Autowired
  52. private WxWeappAuditStatusService weappAuditStatusService;
  53. @Autowired
  54. private WxWeappReleaseStatusService weappReleaseStatusService;
  55. @Autowired
  56. private WxAppinfoService appinfoService;
  57. @Autowired
  58. private WxAuthorizerInfoService authorizerInfoService;
  59. @Autowired
  60. private WxWeappExtSetService weappExtSetService;
  61. @ApiOperation(value = "为授权的小程序帐号上传小程序代码", notes = "extInfo参考https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html")
  62. @PostMapping("/codeCommit")
  63. public ResultData codeCommit(Long templateId, String userVersion, String userDesc, String extInfoStr) {
  64. Gson gson = new GsonBuilder().create();
  65. WxMaOpenCommitExtInfo extInfo = gson.fromJson(extInfoStr, new TypeToken<WxMaOpenCommitExtInfo>() {}.getType());
  66. String appId = extInfo.getExtAppid();
  67. // 检查appId是否已授权
  68. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  69. if(authorizerInfo == null) {
  70. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  71. }
  72. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  73. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  74. }
  75. WxWeappCodeStatus codeStatus = weappCodeStatusService.getByAppId(appId);
  76. WxAppinfo appinfo = appinfoService.getByAppId(appId);
  77. int iAppType = 0;
  78. String appTypeStr = userVersion.substring(0, 1);
  79. if(appTypeStr.equalsIgnoreCase("C"))
  80. iAppType = EnumAppType.C.getCode();
  81. else if(appTypeStr.equalsIgnoreCase("B"))
  82. iAppType = EnumAppType.B.getCode();
  83. try {
  84. // code提交
  85. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  86. logger.info(extInfo.toString());
  87. WxOpenResult openRet = openMaService.codeCommit(templateId, userVersion, userDesc, extInfo);
  88. logger.info(openRet.toString());
  89. boolean codeCommitStatus = false;
  90. if (openRet.isSuccess()) {
  91. codeCommitStatus = true;
  92. }
  93. if (codeStatus == null) {
  94. codeStatus = new WxWeappCodeStatus();
  95. codeStatus.setAppId(appId);
  96. if (appinfo != null) {
  97. codeStatus.setTenantId(appinfo.getTenantId());
  98. codeStatus.setType(appinfo.getType());
  99. }
  100. codeStatus.setUserVersion(userVersion);
  101. codeStatus.setVersionDesc(userDesc);
  102. if(codeCommitStatus) {
  103. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  104. } else {
  105. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  106. codeStatus.setCodeErrCode(gson.toJson(openRet));
  107. }
  108. codeStatus.setCodeTime(new Date());
  109. weappCodeStatusService.saveStatus(codeStatus);
  110. } else {
  111. codeStatus.setUserVersion(userVersion);
  112. codeStatus.setVersionDesc(userDesc);
  113. if(codeCommitStatus) {
  114. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.SUCCESS.getCode());
  115. } else {
  116. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  117. codeStatus.setCodeErrCode(gson.toJson(openRet));
  118. }
  119. codeStatus.setCodeTime(new Date());
  120. weappCodeStatusService.updateStatus(codeStatus);
  121. }
  122. return new ResultData(openRet);
  123. } catch (WxErrorException e) {
  124. logger.error(e.getMessage());
  125. if (codeStatus == null) {
  126. codeStatus = new WxWeappCodeStatus();
  127. codeStatus.setAppId(appId);
  128. if (appinfo != null) {
  129. codeStatus.setTenantId(appinfo.getTenantId());
  130. codeStatus.setType(appinfo.getType());
  131. }
  132. codeStatus.setUserVersion(userVersion);
  133. codeStatus.setVersionDesc(userDesc);
  134. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  135. codeStatus.setCodeErrCode(e.getMessage());
  136. codeStatus.setCodeTime(new Date());
  137. weappCodeStatusService.saveStatus(codeStatus);
  138. } else {
  139. codeStatus.setUserVersion(userVersion);
  140. codeStatus.setVersionDesc(userDesc);
  141. codeStatus.setCodeStatus(EnumWeappCodeCommitStatus.FAIL.getCode());
  142. codeStatus.setCodeErrCode(e.getMessage());
  143. codeStatus.setCodeTime(new Date());
  144. weappCodeStatusService.updateStatus(codeStatus);
  145. }
  146. return new ResultData(Result.ERROR, e.getMessage());
  147. }
  148. }
  149. @ApiOperation("获取体验小程序的体验二维码")
  150. @GetMapping("/getQrcode")
  151. public void getQrcode(@RequestParam(value = "appId") String appId, @RequestParam(value = "pagePath") String pagePath,
  152. @RequestParam(value = "params", required = false) Map<String, String> params,
  153. HttpServletResponse response, HttpServletRequest req) {
  154. try {
  155. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  156. File file = openMaService.getTestQrcode(pagePath, params);
  157. ServletOutputStream out = response.getOutputStream();
  158. response.reset();
  159. response.setContentType("image/jpeg");
  160. String agent = req.getHeader("user-agent");
  161. String filename = "QRCode.jpg";
  162. if (agent.contains("Firefox")) {
  163. response.setHeader("Content-disposition",
  164. "attachment; filename=" + new String(filename.getBytes("GB2312"),"ISO-8859-1"));
  165. } else {
  166. response.setHeader("Content-disposition",
  167. "attachment; filename=" + URLEncoder.encode(filename,"UTF-8"));
  168. }
  169. // 循环取出流中的数据
  170. byte[] b = new byte[1024];
  171. int len;
  172. InputStream inStream = new FileInputStream(file);
  173. while ((len = inStream.read(b)) > 0)
  174. response.getOutputStream().write(b, 0, len);
  175. inStream.close();
  176. } catch (WxErrorException e) {
  177. logger.error(e.getMessage());
  178. } catch (IOException e) {
  179. logger.error(e.getMessage());
  180. }
  181. }
  182. @ApiOperation("获取授权小程序帐号已设置的类目")
  183. @GetMapping("/getCategory")
  184. public ResultData getCategory(String appId) {
  185. try {
  186. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  187. WxOpenMaCategoryListResult openRet = openMaService.getCategoryList();
  188. logger.info(openRet.toString());
  189. return new ResultData(openRet);
  190. } catch (WxErrorException e) {
  191. logger.error(e.getMessage());
  192. return new ResultData(Result.ERROR, e.getMessage());
  193. }
  194. }
  195. @ApiOperation("获取小程序的第三方提交代码的页面配置")
  196. @GetMapping("/getPage")
  197. public ResultData getPage(String appId) {
  198. try {
  199. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  200. WxOpenMaPageListResult openRet = openMaService.getPageList();
  201. logger.info(openRet.toString());
  202. return new ResultData(openRet);
  203. } catch (WxErrorException e) {
  204. logger.error(e.getMessage());
  205. return new ResultData(Result.ERROR, e.getMessage());
  206. }
  207. }
  208. @ApiOperation("将第三方提交的代码包提交审核")
  209. @GetMapping("/submitAudit")
  210. @ApiImplicitParams({
  211. @ApiImplicitParam(name = "appId", value = "appId", dataType = "String", paramType = "query", required = true),
  212. @ApiImplicitParam(name = "version", value = "version", dataType = "String", paramType = "query")})
  213. public ResultData submitAudit(String appId, String version) {
  214. Gson gson = new GsonBuilder().create();
  215. WxWeappExtSet extSetQ = new WxWeappExtSet();
  216. extSetQ.setAppId(appId);
  217. WxWeappExtSet extSet = weappExtSetService.getByObj(extSetQ);
  218. if(StringUtils.isBlank(extSet.getReleaseJson())) {
  219. logger.error("Release JSON is null");
  220. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  221. }
  222. WxWeappCodeStatusVo codeQ = new WxWeappCodeStatusVo();
  223. codeQ.setAppId(appId);
  224. if(StringUtils.isNotBlank(version)) {
  225. codeQ.setUserVersion(version);
  226. }
  227. List<WxWeappCodeStatusVo> codeStatusList = weappCodeStatusService.getList(codeQ);
  228. if(codeStatusList.size() == 1) {
  229. WxWeappCodeStatusVo codeStatus = codeStatusList.get(0);
  230. WxOpenMaSubmitAuditMessage subMessage = gson.fromJson(extSet.getReleaseJson(), new TypeToken<WxOpenMaSubmitAuditMessage>() {}.getType());
  231. if(codeStatus != null && codeStatus.getCodeStatus().equals(EnumWeappCodeCommitStatus.SUCCESS.getCode())) {
  232. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  233. boolean submitStatus = false;
  234. String codeErrCode = "";
  235. try {
  236. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  237. WxOpenMaSubmitAuditResult openRet = openMaService.submitAudit(subMessage);
  238. logger.info(openRet.toString());
  239. if(openRet.isSuccess()) {
  240. submitStatus = true;
  241. codeErrCode = gson.toJson(openRet);
  242. } else {
  243. submitStatus = false;
  244. codeErrCode = gson.toJson(openRet);
  245. }
  246. } catch (WxErrorException e) {
  247. logger.error(e.getMessage());
  248. submitStatus = false;
  249. codeErrCode = e.getMessage();
  250. }
  251. if (auditStatus == null) {
  252. auditStatus = new WxWeappAuditStatus();
  253. auditStatus.setId(codeStatus.getId());
  254. auditStatus.setTenantId(codeStatus.getTenantId());
  255. auditStatus.setAppId(codeStatus.getAppId());
  256. auditStatus.setType(codeStatus.getType());
  257. auditStatus.setUserVersion(codeStatus.getUserVersion());
  258. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  259. if(submitStatus) {
  260. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  261. } else {
  262. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  263. }
  264. auditStatus.setAuditErrCode(codeErrCode);
  265. auditStatus.setAuditTime(new Date());
  266. weappAuditStatusService.saveStatus(auditStatus);
  267. } else {
  268. if(!submitStatus) {
  269. if(!auditStatus.getUserVersion().equals(codeStatus.getUserVersion())
  270. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  271. // 提交审核失败不替换当前审核中的数据
  272. return new ResultData(ErrorCode.WEAPP_HAD_AUDITING);
  273. }
  274. codeStatus.setCodeStatus(EnumWeappAuditStatus.FAIL.getCode());
  275. codeStatus.setCodeErrCode(codeErrCode);
  276. } else {
  277. codeStatus.setCodeStatus(EnumWeappAuditStatus.AUDITING.getCode());
  278. }
  279. auditStatus.setUserVersion(codeStatus.getUserVersion());
  280. auditStatus.setVersionDesc(codeStatus.getVersionDesc());
  281. auditStatus.setAuditTime(new Date());
  282. weappAuditStatusService.updateStatus(auditStatus);
  283. }
  284. if(submitStatus) {
  285. return new ResultData(codeErrCode);
  286. } else {
  287. return new ResultData(ErrorCode.WEAPP_AUDIT_ERR);
  288. }
  289. } else {
  290. logger.error(ErrorCode.WEAPP_CODE_COMMIT_ERR.getMessage());
  291. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  292. }
  293. }
  294. return new ResultData(ErrorCode.WEAPP_CODE_COMMIT_ERR);
  295. }
  296. @ApiOperation("查询某个指定版本的审核状态")
  297. @PostMapping("/getAuditstatus")
  298. public ResultData getAuditstatus(String appId, String auditidStr) {
  299. Gson gson = new GsonBuilder().create();
  300. Long auditId = Long.valueOf(auditidStr);
  301. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  302. if(auditStatus != null && auditStatus.getAuditid().equals(auditId)) {
  303. try {
  304. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  305. WxOpenMaQueryAuditResult openRet = openMaService.getAuditStatus(auditId);
  306. logger.info(openRet.toString());
  307. if (openRet.isSuccess()) {
  308. auditStatus.setAuditid(openRet.getAuditId());
  309. // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
  310. switch (openRet.getStatus().intValue()) {
  311. case 0:
  312. auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  313. break;
  314. case 1:
  315. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  316. break;
  317. case 2:
  318. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  319. break;
  320. case 3:
  321. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  322. break;
  323. default:
  324. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  325. break;
  326. }
  327. auditStatus.setAuditErrCode(gson.toJson(openRet));
  328. auditStatus.setAuditTime(new Date());
  329. weappAuditStatusService.updateStatus(auditStatus);
  330. }
  331. return new ResultData(openRet);
  332. } catch (WxErrorException e) {
  333. logger.error(e.getMessage());
  334. return new ResultData(Result.ERROR, e.getMessage());
  335. }
  336. }
  337. return new ResultData(Result.ERROR, "auditid不对应");
  338. }
  339. @ApiOperation("查询最新一次提交的审核状态")
  340. @GetMapping("/getLatestAuditstatus")
  341. public ResultData get_latest_auditstatus(String appId) {
  342. Gson gson = new GsonBuilder().create();
  343. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  344. if(auditStatus != null
  345. && auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.AUDITING.getCode())) {
  346. try {
  347. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  348. WxOpenMaQueryAuditResult openRet = openMaService.getLatestAuditStatus();
  349. logger.info(openRet.toString());
  350. if (openRet.isSuccess()) {
  351. auditStatus.setAuditid(openRet.getAuditId());
  352. // 审核状态,其中0为审核成功,1为审核失败,2为审核中,3已撤回
  353. switch (openRet.getStatus().intValue()) {
  354. case 0:
  355. auditStatus.setAuditStatus(EnumWeappAuditStatus.SUCCESS.getCode());
  356. break;
  357. case 1:
  358. auditStatus.setAuditStatus(EnumWeappAuditStatus.FAIL.getCode());
  359. break;
  360. case 2:
  361. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  362. break;
  363. case 3:
  364. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  365. break;
  366. default:
  367. auditStatus.setAuditStatus(EnumWeappAuditStatus.AUDITING.getCode());
  368. break;
  369. }
  370. auditStatus.setAuditErrCode(gson.toJson(openRet));
  371. auditStatus.setAuditTime(new Date());
  372. weappAuditStatusService.updateStatus(auditStatus);
  373. }
  374. return new ResultData(openRet);
  375. } catch (WxErrorException e) {
  376. logger.error(e.getMessage());
  377. return new ResultData(Result.ERROR, e.getMessage());
  378. }
  379. } else {
  380. return new ResultData(Result.ERROR, "审核状态不是审核中");
  381. }
  382. }
  383. @ApiOperation("发布已通过审核的小程序")
  384. @GetMapping("/releaseAudited")
  385. public ResultData releaesAudited(String appId) {
  386. if(StringUtils.isBlank(appId)) {
  387. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL);
  388. }
  389. Gson gson = new GsonBuilder().create();
  390. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  391. if(auditStatus.getAuditStatus().equals(EnumWeappAuditStatus.SUCCESS.getCode())) {
  392. boolean isUpdate = false;
  393. WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
  394. if(releaseStatus != null) {
  395. // 版本已发布成功,跳过
  396. if(releaseStatus.getUserVersion().equals(auditStatus.getUserVersion())
  397. && releaseStatus.getReleaseStatus().equals(EnumWeappReleaseStatus.SUCCESS.getCode())) {
  398. return new ResultData(ErrorCode.WEAPP_APP_RELEASEED);
  399. }
  400. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  401. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  402. isUpdate = true;
  403. } else {
  404. releaseStatus = new WxWeappReleaseStatus();
  405. releaseStatus.setId(auditStatus.getId());
  406. releaseStatus.setTenantId(auditStatus.getTenantId());
  407. releaseStatus.setAppId(auditStatus.getAppId());
  408. releaseStatus.setType(auditStatus.getType());
  409. releaseStatus.setUserVersion(auditStatus.getUserVersion());
  410. releaseStatus.setVersionDesc(auditStatus.getVersionDesc());
  411. }
  412. try {
  413. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  414. WxOpenResult openRet = openMaService.releaesAudited();
  415. logger.info(openRet.toString());
  416. if(openRet.isSuccess()) {
  417. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  418. } else {
  419. if(openRet.getErrcode().equalsIgnoreCase("85052")) { // app is already released
  420. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  421. } else {
  422. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  423. }
  424. }
  425. releaseStatus.setReleaseErrCode(gson.toJson(openRet));
  426. releaseStatus.setReleaseTime(new Date());
  427. if(isUpdate) {
  428. weappReleaseStatusService.updateStatus(releaseStatus);
  429. } else {
  430. weappReleaseStatusService.saveStatus(releaseStatus);
  431. }
  432. return new ResultData(openRet);
  433. } catch (WxErrorException e) {
  434. logger.error(e.getMessage());
  435. if(e.getError().getErrorCode() == 85052) {
  436. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.SUCCESS.getCode());
  437. } else {
  438. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.FAIL.getCode());
  439. }
  440. releaseStatus.setReleaseErrCode(e.getMessage());
  441. releaseStatus.setReleaseTime(new Date());
  442. if(isUpdate) {
  443. weappReleaseStatusService.updateStatus(releaseStatus);
  444. } else {
  445. weappReleaseStatusService.saveStatus(releaseStatus);
  446. }
  447. if (e.getError().getErrorCode() == 85052) {
  448. return new ResultData();
  449. }
  450. return new ResultData(Result.ERROR, e.getMessage());
  451. }
  452. } else {
  453. return new ResultData(ErrorCode.WEAPP_NOT_AUDITED);
  454. }
  455. }
  456. @ApiOperation("小程序版本回退")
  457. @GetMapping("/revertCodeRelease")
  458. public ResultData revertCodeRelease(String appId) {
  459. Gson gson = new GsonBuilder().create();
  460. WxWeappReleaseStatus releaseStatus = weappReleaseStatusService.getByAppId(appId);
  461. try {
  462. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  463. WxOpenResult openRet = openMaService.revertCodeReleaes();
  464. logger.info(openRet.toString());
  465. if(openRet.isSuccess()) {
  466. if(releaseStatus != null) {
  467. releaseStatus.setReleaseStatus(EnumWeappReleaseStatus.BACK.getCode());
  468. releaseStatus.setReleaseErrCode(gson.toJson(openRet));
  469. releaseStatus.setReleaseTime(new Date());
  470. weappReleaseStatusService.updateStatus(releaseStatus);
  471. }
  472. return new ResultData();
  473. }
  474. return new ResultData(openRet);
  475. } catch (WxErrorException e) {
  476. logger.error(e.getMessage());
  477. return new ResultData(Result.ERROR, e.getMessage());
  478. }
  479. }
  480. @ApiOperation("查询当前设置的最低基础库版本及各版本用户占比")
  481. @GetMapping("/getSupportVersion")
  482. public ResultData getSupportVersion(String appId) {
  483. try {
  484. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  485. String openRet = openMaService.getSupportVersion();
  486. logger.info(openRet.toString());
  487. return new ResultData(openRet);
  488. } catch (WxErrorException e) {
  489. logger.error(e.getMessage());
  490. return new ResultData(Result.ERROR, e.getMessage());
  491. }
  492. }
  493. @ApiOperation("设置最低基础库版本")
  494. @GetMapping("/setSupportVersion")
  495. public ResultData setSupportVersion(String appId, String version) {
  496. try {
  497. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  498. String openRet = openMaService.setSupportVersion(version);
  499. logger.info(openRet);
  500. return new ResultData(openRet);
  501. } catch (WxErrorException e) {
  502. logger.error(e.getMessage());
  503. return new ResultData(Result.ERROR, e.getMessage());
  504. }
  505. }
  506. @ApiOperation(value = "小程序审核撤回", notes = "单个帐号每天审核撤回次数最多不超过1次,一个月不超过10次。")
  507. @GetMapping("/undoCodeAudit")
  508. public ResultData undoCodeAudit(String appId) {
  509. Gson gson = new GsonBuilder().create();
  510. WxWeappAuditStatus auditStatus = weappAuditStatusService.getByAppId(appId);
  511. if(auditStatus != null) {
  512. try {
  513. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  514. WxOpenResult openResult = openMaService.undoCodeAudit();
  515. if(openResult.isSuccess()) {
  516. auditStatus.setAuditStatus(EnumWeappAuditStatus.UNDO.getCode());
  517. auditStatus.setAuditErrCode(gson.toJson(openResult));
  518. auditStatus.setAuditTime(new Date());
  519. weappAuditStatusService.updateStatus(auditStatus);
  520. return new ResultData("审核撤回成功");
  521. }
  522. return new ResultData(Result.ERROR, "审核撤回失败");
  523. } catch (WxErrorException e) {
  524. logger.error(e.getMessage());
  525. return new ResultData(Result.ERROR, e.getMessage());
  526. }
  527. }
  528. return new ResultData(Result.ERROR, "没有审核记录,不能撤回");
  529. }
  530. }