您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

320 行
14 KiB

  1. package com.iformall.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.iformall.common.ErrorCode;
  5. import com.iformall.common.Result;
  6. import com.iformall.common.ResultData;
  7. import com.iformall.domain.po.WxAuthorizerInfo;
  8. import com.iformall.domain.po.WxWeappBasicSet;
  9. import com.iformall.enums.EnumAppType;
  10. import com.iformall.enums.EnumEnableType;
  11. import com.iformall.enums.EnumWxAuthorizationStatus;
  12. import com.iformall.service.WxAuthorizerInfoService;
  13. import com.iformall.service.WxWeappBasicSetService;
  14. import com.iformall.service.wechat.FmOpenService;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiOperation;
  17. import me.chanjar.weixin.common.error.WxErrorException;
  18. import me.chanjar.weixin.open.api.WxOpenMaService;
  19. import me.chanjar.weixin.open.bean.ma.privacy.GetPrivacySettingResult;
  20. import me.chanjar.weixin.open.bean.ma.privacy.PrivacyOwnerSetting;
  21. import me.chanjar.weixin.open.bean.ma.privacy.SetPrivacySetting;
  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 java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.Map;
  32. /**
  33. * Stormeye Wu
  34. */
  35. @RestController
  36. @RequestMapping("/weappSet")
  37. @Api(description = "微信第三方开发平台-小程序设置")
  38. public class WechatWeappSetController {
  39. private final Logger logger = LoggerFactory.getLogger(getClass());
  40. @Autowired
  41. private Integer getFmDeploy;
  42. @Autowired
  43. private FmOpenService openService;
  44. @Autowired
  45. private WxAuthorizerInfoService authorizerInfoService;
  46. @Autowired
  47. private WxWeappBasicSetService weappBasicSetService;
  48. @ApiOperation("获取小程序的信息")
  49. @GetMapping("/getInfo")
  50. public ResultData getAccountBasicInfo(String appId) {
  51. try {
  52. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  53. String openRet = openMaService.getAccountBasicInfo();
  54. logger.info(openRet.toString());
  55. return new ResultData(openRet);
  56. } catch (WxErrorException e) {
  57. logger.error(e.getMessage());
  58. }
  59. return new ResultData(Result.ERROR);
  60. }
  61. @ApiOperation("获取小程序服务器域名")
  62. @GetMapping("/getDomain")
  63. public ResultData getDomain(String appId) {
  64. try {
  65. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  66. WxOpenResult openRet = openMaService.getDomain();
  67. logger.info(openRet.toString());
  68. return new ResultData(openRet);
  69. } catch (WxErrorException e) {
  70. logger.error(e.getMessage());
  71. return new ResultData(Result.ERROR, e.getMessage());
  72. }
  73. }
  74. @ApiOperation("获取小程序服务器域名")
  75. @GetMapping("/getWebDomain")
  76. public ResultData getWebDomain(String appId) {
  77. try {
  78. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  79. String openRet = openMaService.getWebViewDomain();
  80. logger.info(openRet);
  81. return new ResultData(openRet);
  82. } catch (WxErrorException e) {
  83. logger.error(e.getMessage());
  84. return new ResultData(Result.ERROR, e.getMessage());
  85. }
  86. }
  87. @ApiOperation(value = "设置小程序服务器域名", notes = "{\n" +
  88. " \"action\":\"add/set/delete/get\",\n" +
  89. " \"requestdomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
  90. " \"wsrequestdomain\":[\"wss://www.qq.com\",\"wss://www.qq.com\"],\n" +
  91. " \"uploaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
  92. " \"downloaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" +
  93. " }")
  94. @PostMapping("/modifyDomain")
  95. public ResultData modifyDomain(String appId, String action,
  96. List<String> requestDomain, List<String> wsrequestdomain,
  97. List<String> uploaddomain, List<String> downloaddomain) {
  98. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  99. if(authorizerInfo == null) {
  100. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  101. }
  102. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  103. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  104. }
  105. try {
  106. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  107. WxOpenMaDomainResult openRet = openMaService.modifyDomain(action,
  108. requestDomain, wsrequestdomain,
  109. uploaddomain, downloaddomain);
  110. logger.info(openRet.toString());
  111. if(openRet.isSuccess()) {
  112. logger.info("设置服务器域名成功");
  113. authorizerInfo.setDomainStatus(EnumEnableType.SUCC.getCode());
  114. authorizerInfo.setDomainTime(new Date());
  115. authorizerInfo.setUpdateTime(new Date());
  116. } else {
  117. logger.info("设置服务器域名成功");
  118. authorizerInfo.setDomainStatus(EnumEnableType.FAIL.getCode());
  119. authorizerInfo.setDomainTime(new Date());
  120. authorizerInfo.setUpdateTime(new Date());
  121. }
  122. authorizerInfoService.updateDomainUrl(authorizerInfo);
  123. return new ResultData(openRet);
  124. } catch (WxErrorException e) {
  125. logger.error(e.getMessage());
  126. }
  127. return new ResultData(Result.ERROR);
  128. }
  129. @ApiOperation(value = "设置小程序业务域名", notes = "{\n" +
  130. " \"action\":\"add/set/delete/get\",\n" +
  131. " \"webviewdomain\":[\"https://www.qq.com\",\"https://m.qq.com\"]\n" +
  132. " }")
  133. @PostMapping("/modifyWebViewDomain")
  134. public ResultData modifyWebViewDomain(String appId, String action,
  135. List<String> urlList) {
  136. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  137. if(authorizerInfo == null) {
  138. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  139. }
  140. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  141. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  142. }
  143. try {
  144. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  145. String openRet = openMaService.setWebViewDomain(action, urlList);
  146. logger.info(openRet);
  147. JSONObject webRetObj = JSON.parseObject(openRet);
  148. if(webRetObj.getInteger("errcode").equals(0)) {
  149. logger.info("设置服务器业务域名成功");
  150. authorizerInfo.setWebdomainStatus(EnumEnableType.SUCC.getCode());
  151. authorizerInfo.setWebdomainTime(new Date());
  152. authorizerInfo.setUpdateTime(new Date());
  153. } else {
  154. logger.info("设置服务器业务域名失败");
  155. authorizerInfo.setWebdomainStatus(EnumEnableType.FAIL.getCode());
  156. authorizerInfo.setWebdomainTime(new Date());
  157. authorizerInfo.setUpdateTime(new Date());
  158. }
  159. authorizerInfoService.updateWebDomainUrl(authorizerInfo);
  160. return new ResultData(openRet);
  161. } catch (WxErrorException e) {
  162. logger.error(e.getMessage());
  163. }
  164. return new ResultData(Result.ERROR);
  165. }
  166. @ApiOperation(value = "绑定微信用户为小程序体验者", notes = "{\"appId\":\"string\", \"wechatId\":\"string\"}")
  167. @PostMapping("/bindTester")
  168. public ResultData bindTester(@RequestBody Map<String, String> params) {
  169. String appId = params.get("appId");
  170. String wechatId = params.get("wechatId");
  171. if(StringUtils.isBlank(appId)) {
  172. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空");
  173. }
  174. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  175. if(authorizerInfo == null) {
  176. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  177. }
  178. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  179. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  180. }
  181. if(StringUtils.isBlank(wechatId)) {
  182. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空");
  183. }
  184. try {
  185. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  186. WxOpenResult openRet = openMaService.bindTester(wechatId);
  187. logger.info(openRet.toString());
  188. return new ResultData(openRet);
  189. } catch (WxErrorException e) {
  190. logger.error(e.getMessage());
  191. return new ResultData(e.getMessage());
  192. }
  193. }
  194. @ApiOperation(value = "解除绑定小程序的体验者", notes = "")
  195. @PostMapping("/unbindTester")
  196. public ResultData unbindTester(@RequestBody Map<String, String> params) {
  197. String appId = params.get("appId");
  198. String wechatId = params.get("wechatId");
  199. if(StringUtils.isBlank(appId)) {
  200. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空");
  201. }
  202. if(StringUtils.isBlank(wechatId)) {
  203. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空");
  204. }
  205. try {
  206. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  207. WxOpenResult openRet = openMaService.unbindTester(wechatId);
  208. logger.info(openRet.toString());
  209. return new ResultData(openRet);
  210. } catch (WxErrorException e) {
  211. logger.error(e.getMessage());
  212. return new ResultData(e.getMessage());
  213. }
  214. }
  215. @ApiOperation(value = "获取体验者列表", notes = "")
  216. @GetMapping("/getTesterList")
  217. public ResultData getTesterList(@RequestParam(value = "appId") String appId) {
  218. try {
  219. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  220. WxOpenResult openRet = openMaService.getTesterList();
  221. logger.info(openRet.toString());
  222. return new ResultData(openRet);
  223. } catch (WxErrorException e) {
  224. logger.error(e.getMessage());
  225. }
  226. return new ResultData(Result.ERROR);
  227. }
  228. @ApiOperation(value = "配置小程序用户隐私保护指引", notes = "{\n" +
  229. " }")
  230. @PostMapping("/setprivacysetting")
  231. public ResultData setprivacysetting(@RequestBody Map<String, String> params) {
  232. String appId = params.get("appId");
  233. if(StringUtils.isBlank(appId)) {
  234. return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空");
  235. }
  236. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  237. if(authorizerInfo == null) {
  238. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  239. }
  240. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  241. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  242. }
  243. if(!EnumAppType.B.getCode().equals(authorizerInfo.getType()) && !EnumAppType.C.getCode().equals(authorizerInfo.getType())){
  244. return new ResultData(ErrorCode.WEAPP_BASIC_NO_SUPPORT);
  245. }
  246. WxWeappBasicSet weappBasicSetQ = new WxWeappBasicSet();
  247. weappBasicSetQ.setType(authorizerInfo.getType());
  248. weappBasicSetQ.setDeploy(getFmDeploy);
  249. WxWeappBasicSet weappBasicSet = weappBasicSetService.getByTypeAndDeploy(weappBasicSetQ);
  250. if(weappBasicSet == null || StringUtils.isBlank(weappBasicSet.getPrivacySetting())) {
  251. logger.error("未找到相关的基础设置参数");
  252. return new ResultData(ErrorCode.WEAPP_BASIC_SET_ERR);
  253. }
  254. try {
  255. SetPrivacySetting setting = JSON.parseObject(weappBasicSet.getPrivacySetting(),SetPrivacySetting.class);
  256. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  257. String setRet = openMaService.getPrivacyService().setPrivacySetting(setting);
  258. logger.info(setRet);
  259. JSONObject webRetObj = JSON.parseObject(setRet);
  260. if(webRetObj.getInteger("errcode").equals(0)) {
  261. logger.info("配置小程序用户隐私保护指引成功");
  262. authorizerInfo.setPrivacySettingStatus(EnumEnableType.SUCC.getCode());
  263. } else {
  264. logger.info("配置小程序用户隐私保护指引失败");
  265. authorizerInfo.setPrivacySettingStatus(EnumEnableType.FAIL.getCode());
  266. }
  267. authorizerInfoService.updatePrivacySetting(authorizerInfo);
  268. return new ResultData(setRet);
  269. } catch (WxErrorException e) {
  270. logger.error(e.getMessage());
  271. }
  272. return new ResultData(Result.ERROR);
  273. }
  274. @ApiOperation(value = "查询小程序用户隐私保护指引", notes = "{\n" +
  275. " }")
  276. @GetMapping("/getPrivacySetting")
  277. public ResultData setprivacysetting(String appId,Integer privacyVer) {
  278. WxAuthorizerInfo authorizerInfo = authorizerInfoService.getByAppId(appId);
  279. if(authorizerInfo == null) {
  280. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  281. }
  282. if(!authorizerInfo.getAuthorizationStatus().equals(EnumWxAuthorizationStatus.AUTHORIZED.getCode())) {
  283. return new ResultData(ErrorCode.WEAPP_APPID_NOT_AUTH);
  284. }
  285. if(!EnumAppType.B.getCode().equals(authorizerInfo.getType()) && !EnumAppType.C.getCode().equals(authorizerInfo.getType())){
  286. return new ResultData(ErrorCode.WEAPP_BASIC_NO_SUPPORT);
  287. }
  288. try {
  289. WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId);
  290. GetPrivacySettingResult getRet = openMaService.getPrivacyService().getPrivacySetting(privacyVer);
  291. return new ResultData(getRet);
  292. } catch (WxErrorException e) {
  293. logger.error(e.getMessage());
  294. }
  295. return new ResultData(Result.ERROR);
  296. }
  297. }