package com.iformall.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxAuthorizerInfo; import com.iformall.domain.po.WxWeappBasicSet; import com.iformall.enums.EnumAppType; import com.iformall.enums.EnumEnableType; import com.iformall.enums.EnumWxAuthorizationStatus; import com.iformall.service.WxAuthorizerInfoService; import com.iformall.service.WxWeappBasicSetService; import com.iformall.service.wechat.FmOpenService; import io.swagger.annotations.Api; 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.privacy.GetPrivacySettingResult; import me.chanjar.weixin.open.bean.ma.privacy.PrivacyOwnerSetting; import me.chanjar.weixin.open.bean.ma.privacy.SetPrivacySetting; 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 java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * Stormeye Wu */ @RestController @RequestMapping("/weappSet") @Api(description = "微信第三方开发平台-小程序设置") public class WechatWeappSetController { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private Integer getFmDeploy; @Autowired private FmOpenService openService; @Autowired private WxAuthorizerInfoService authorizerInfoService; @Autowired private WxWeappBasicSetService weappBasicSetService; @ApiOperation("获取小程序的信息") @GetMapping("/getInfo") public ResultData getAccountBasicInfo(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String openRet = openMaService.getAccountBasicInfo(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } @ApiOperation("获取小程序服务器域名") @GetMapping("/getDomain") public ResultData getDomain(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.getDomain(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation("获取小程序服务器域名") @GetMapping("/getWebDomain") public ResultData getWebDomain(String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String openRet = openMaService.getWebViewDomain(); logger.info(openRet); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(Result.ERROR, e.getMessage()); } } @ApiOperation(value = "设置小程序服务器域名", notes = "{\n" + " \"action\":\"add/set/delete/get\",\n" + " \"requestdomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" + " \"wsrequestdomain\":[\"wss://www.qq.com\",\"wss://www.qq.com\"],\n" + " \"uploaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" + " \"downloaddomain\":[\"https://www.qq.com\",\"https://www.qq.com\"],\n" + " }") @PostMapping("/modifyDomain") public ResultData modifyDomain(String appId, String action, List requestDomain, List wsrequestdomain, List uploaddomain, List downloaddomain) { 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); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenMaDomainResult openRet = openMaService.modifyDomain(action, requestDomain, wsrequestdomain, uploaddomain, downloaddomain); logger.info(openRet.toString()); if(openRet.isSuccess()) { logger.info("设置服务器域名成功"); authorizerInfo.setDomainStatus(EnumEnableType.SUCC.getCode()); authorizerInfo.setDomainTime(new Date()); authorizerInfo.setUpdateTime(new Date()); } else { logger.info("设置服务器域名成功"); authorizerInfo.setDomainStatus(EnumEnableType.FAIL.getCode()); authorizerInfo.setDomainTime(new Date()); authorizerInfo.setUpdateTime(new Date()); } authorizerInfoService.updateDomainUrl(authorizerInfo); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } @ApiOperation(value = "设置小程序业务域名", notes = "{\n" + " \"action\":\"add/set/delete/get\",\n" + " \"webviewdomain\":[\"https://www.qq.com\",\"https://m.qq.com\"]\n" + " }") @PostMapping("/modifyWebViewDomain") public ResultData modifyWebViewDomain(String appId, String action, List urlList) { 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); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String openRet = openMaService.setWebViewDomain(action, urlList); logger.info(openRet); JSONObject webRetObj = JSON.parseObject(openRet); if(webRetObj.getInteger("errcode").equals(0)) { logger.info("设置服务器业务域名成功"); authorizerInfo.setWebdomainStatus(EnumEnableType.SUCC.getCode()); authorizerInfo.setWebdomainTime(new Date()); authorizerInfo.setUpdateTime(new Date()); } else { logger.info("设置服务器业务域名失败"); authorizerInfo.setWebdomainStatus(EnumEnableType.FAIL.getCode()); authorizerInfo.setWebdomainTime(new Date()); authorizerInfo.setUpdateTime(new Date()); } authorizerInfoService.updateWebDomainUrl(authorizerInfo); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } @ApiOperation(value = "绑定微信用户为小程序体验者", notes = "{\"appId\":\"string\", \"wechatId\":\"string\"}") @PostMapping("/bindTester") public ResultData bindTester(@RequestBody Map params) { String appId = params.get("appId"); String wechatId = params.get("wechatId"); if(StringUtils.isBlank(appId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "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); } if(StringUtils.isBlank(wechatId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空"); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.bindTester(wechatId); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(e.getMessage()); } } @ApiOperation(value = "解除绑定小程序的体验者", notes = "") @PostMapping("/unbindTester") public ResultData unbindTester(@RequestBody Map params) { String appId = params.get("appId"); String wechatId = params.get("wechatId"); if(StringUtils.isBlank(appId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "appId不能为空"); } if(StringUtils.isBlank(wechatId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "wechatId不能为空"); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.unbindTester(wechatId); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); return new ResultData(e.getMessage()); } } @ApiOperation(value = "获取体验者列表", notes = "") @GetMapping("/getTesterList") public ResultData getTesterList(@RequestParam(value = "appId") String appId) { try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); WxOpenResult openRet = openMaService.getTesterList(); logger.info(openRet.toString()); return new ResultData(openRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } @ApiOperation(value = "配置小程序用户隐私保护指引", notes = "{\n" + " }") @PostMapping("/setprivacysetting") public ResultData setprivacysetting(@RequestBody Map params) { String appId = params.get("appId"); if(StringUtils.isBlank(appId)) { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "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); } if(!EnumAppType.B.getCode().equals(authorizerInfo.getType()) && !EnumAppType.C.getCode().equals(authorizerInfo.getType())){ return new ResultData(ErrorCode.WEAPP_BASIC_NO_SUPPORT); } WxWeappBasicSet weappBasicSetQ = new WxWeappBasicSet(); weappBasicSetQ.setType(authorizerInfo.getType()); weappBasicSetQ.setDeploy(getFmDeploy); WxWeappBasicSet weappBasicSet = weappBasicSetService.getByTypeAndDeploy(weappBasicSetQ); if(weappBasicSet == null || StringUtils.isBlank(weappBasicSet.getPrivacySetting())) { logger.error("未找到相关的基础设置参数"); return new ResultData(ErrorCode.WEAPP_BASIC_SET_ERR); } try { SetPrivacySetting setting = JSON.parseObject(weappBasicSet.getPrivacySetting(),SetPrivacySetting.class); WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); String setRet = openMaService.getPrivacyService().setPrivacySetting(setting); logger.info(setRet); JSONObject webRetObj = JSON.parseObject(setRet); if(webRetObj.getInteger("errcode").equals(0)) { logger.info("配置小程序用户隐私保护指引成功"); authorizerInfo.setPrivacySettingStatus(EnumEnableType.SUCC.getCode()); } else { logger.info("配置小程序用户隐私保护指引失败"); authorizerInfo.setPrivacySettingStatus(EnumEnableType.FAIL.getCode()); } authorizerInfoService.updatePrivacySetting(authorizerInfo); return new ResultData(setRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } @ApiOperation(value = "查询小程序用户隐私保护指引", notes = "{\n" + " }") @GetMapping("/getPrivacySetting") public ResultData setprivacysetting(String appId,Integer privacyVer) { 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); } if(!EnumAppType.B.getCode().equals(authorizerInfo.getType()) && !EnumAppType.C.getCode().equals(authorizerInfo.getType())){ return new ResultData(ErrorCode.WEAPP_BASIC_NO_SUPPORT); } try { WxOpenMaService openMaService = openService.getWxOpenComponentService().getWxMaServiceByAppid(appId); GetPrivacySettingResult getRet = openMaService.getPrivacyService().getPrivacySetting(privacyVer); return new ResultData(getRet); } catch (WxErrorException e) { logger.error(e.getMessage()); } return new ResultData(Result.ERROR); } }