600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像 名称 简介)修改 以

NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像 名称 简介)修改 以

时间:2021-10-19 03:13:54

相关推荐

NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像 名称 简介)修改 以

官方文档

最好先熟悉以上文档

正文:

1:创建小程序接口

@PostMapping("creatApp")@ApiImplicitParam(name = "companyVO", dataType = "CompanyVO")@ApiOperation("创建小程序")public ApiResponse creatApp(@RequestBody CompanyVO companyVO) {String componentAccessToken = getComponentAccessToken();StringBuffer stf = new StringBuffer("https://api./cgi-bin/component/fastregisterweapp?action=create&component_access_token=");stf.append(componentAccessToken);Map<String, Object> map = new HashMap();map.put("name", companyVO.getCompanyName());map.put("code", companyVO.getCompanyCode());map.put("code_type", companyVO.getCompanyCodeType());map.put("legal_persona_wechat", companyVO.getWeChatAccount());map.put("legal_persona_name", companyVO.getMerchantName());map.put("component_phone", companyVO.getMerchantPhone());ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), map, String.class);//状态码,0成功,其他失败if (entity.getStatusCode().equals(HttpStatus.OK) && JSONObject.parseObject(entity.getBody()).getInteger("errcode") == 0) {log.info("创建小程序=========》【{}】", entity.getBody());} else {log.error("创建小程序=========》失败!");}return ResponseUtil.success(entity.getBody());}

CompanyVO:如下

{"name": "tencent", // 企业名"code": "123", // 企业代码"code_type": 1, // 企业代码类型(1:统一社会信用代码, 2:组织机构代码,3:营业执照注册号)"legal_persona_wechat": "123", // 法人微信"legal_persona_name":"pony" , // 法人姓名"component_phone":"1234567" //第三方联系电话 }

返回结果:

{"errcode":0, // 状态码,0成功,其他失败"errmsg":"OK" // 错误信息}

失败

-1 非法action参数invalid action89249该主体已有任务执行中,距上次任务24h后再试task running89247内部错误inner error86004无效微信号invalid wechat61070法人姓名与微信号不一致name, wechat name not in accordance89248企业代码类型无效,请选择正确类型填写invalid code type89250未找到该任务task not found89251待法人人脸核身校验legal person checking89252法人&企业信息一致性校验中front checking89253缺少参数lack of some params89254第三方权限集不全,补全权限集全网发布后生效lack of some component rights

2:创建成功后。通过法人&企业主体校验,平台向法人微信下发模板消息。法人需在24小时内点击消息,进行身份证信息与人脸识别信息收集;

3:信息收集完毕,验证通过后,即可创建已认证的小程序。第三方平台服务器可以收到创建appid信息(通过授权登录相关-授权事件接收URL接收信息);第三方获得小程序appid后,可调用代码开发相关接口,完成后续的小程序代码开发。

/*** 消息与事件接收URL*/@PostMapping("receiveComponentVerifyTicket/{APPID}")public String receiveComponentVerifyTicket(HttpServletRequest request) {log.info("消息与事件接收URL=========》开始【{}】", JSON.toJSONString(request.getParameterMap()));/*log.info("消息与事件接收URL=====================》【{}】", request.getParameterMap().get("AppId"));String[] AppId = request.getParameterMap().get("AppId");redisUtil.set("APP_ID", StringUtils.join(AppId), 7200);*/return "success";}

当然熟悉的话,直接让授权方给你发小程序的APPID也可以,创建成功后,授权方会受到微信的通知,可以看的到自己的小程序APPID,但是没办法登录,因为是通过第三方平台接口创建的。

4:小程序虽然创建好,但是是空的,需要部署代码,代码如下

@GetMapping("commitCode")@ResponseBody@ApiImplicitParams({@ApiImplicitParam(name = "desc", value = "备注", required = true, dataType = "string"),@ApiImplicitParam(name = "templateId", value = "模板ID", required = true, dataType = "int"),@ApiImplicitParam(name = "version", value = "版本号", required = true, dataType = "string")})@ApiOperation("为已经授权的小程序部署代码")public ApiResponse commitCode(String desc, Integer templateId, String version) {String authorizerAccesstoken = String.valueOf(redisUtil.get("authorizer_access_token"));String appId = String.valueOf(redisUtil.get("authorizer_appid"));log.error("为已经授权的小程序部署代码=========》开始!");StringBuffer stf = new StringBuffer("https://api./wxa/commit?access_token=");stf.append(authorizerAccesstoken);Map<String, Object> map = new HashMap();map.put("template_id", templateId);map.put("user_version", version);//第三方自定义的配置Map extMap = new HashMap();//授权第三方的APPIDextMap.put("extAppid", appId);map.put("ext_json", JSON.toJSONString(extMap));map.put("user_desc", desc);ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), map, String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("为已经授权的小程序部署代码=========》【{}】", entity.getBody());} else {log.error("为已经授权的小程序部署代码=========》失败!");}return ResponseUtil.success(entity.getBody());}

成功返回:

{"errcode":0,"errmsg":"ok",}

上述接口的模板ID,版本号,备注,在第三方平台小程序模版库可以看的到,通过微信开发者工具去上传代码,去生成模板库。具体参数太多不一一描述,都在微信第三方平台代小程序实现业务的 代码管理模块里去找这个接口描述

5:部署完代码,可以预览小程序(体验版)

@GetMapping("qrCode")@ApiOperation("预览小程序")public ApiResponse qrCode() {String authorizerAccesstoken = redisUtil.get("authorizer_access_token").toString();log.error("预览小程序=========》开始!");StringBuffer stf = new StringBuffer("https://api./wxa/get_qrcode?access_token=");stf.append(authorizerAccesstoken);log.info("预览小程序=========》【{}】", stf.toString());return ResponseUtil.success(stf.toString());}

authorizer_access_token 怎么获取,在上一篇文章中写到过,点此链接查看

6:将第三方平台部署的代码包提交审核,微信需要做校验,通过后才能看的到,否则只能预览体验版小程序

为小程序设置类目,如果不设置类目是不允许发布的

这个接口没写,我是用postman测试的

https://api./cgi-bin/wxopen/addcategory?access_token=该接口文档上也有

获取授权小程序帐号已设置的类目

@GetMapping("/getCategory")@ApiOperation("获取授权小程序帐号已设置的类目")public ApiResponse getCategory() {StringBuffer stf = new StringBuffer("https://api./wxa/get_category?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);ResponseEntity<String> entity = restTemplate.getForEntity(stf.toString(), String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("获取授权小程序帐号已设置的类目=========》【{}】", entity.getBody());} else {log.error("获取授权小程序帐号已设置的类目=========》失败!");}return ResponseUtil.success(entity.getBody());}

获取小程序的第三方提交代码的页面配置(仅供第三方开发者代小程序调用)

@GetMapping("getPage")@ApiOperation("获取小程序的第三方提交代码的页面配置")public ApiResponse getPage() {StringBuffer stf = new StringBuffer("https://api./wxa/get_page?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);ResponseEntity<String> entity = restTemplate.getForEntity(stf.toString(), String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("获取小程序的第三方提交代码的页面配置=========》【{}】", entity.getBody());} else {log.error("获取小程序的第三方提交代码的页面配置=========》失败!");}return ResponseUtil.success(entity.getBody());}

将第三方提交的代码包提交审核(仅供第三方开发者代小程序调用),该接口需要前两个接口返回来的数据,

SubmitAuditVO:参数如下,这些所填的参数都可以通过上述两个接口获取

public class SubmitAuditVO {@ApiModelProperty("提交审核项的一个列表")private List<SubmitAuditAddressVO> itemList;@ApiModelProperty("反馈内容,不超过200字")private String feedbackInfo;@ApiModelProperty("图片media_id列表,中间用“丨”分割,xx丨yy丨zz,不超过5张图片")private String feedbackStuff;}

public class SubmitAuditAddressVO {@ApiModelProperty("小程序的页面")private String address;@ApiModelProperty("小程序的标签,多个标签用空格分隔,标签不能多于10个,标签长度不超过20")private String tag;@ApiModelProperty("一级类目")private String firstClass;@ApiModelProperty("二级类目")private String secondClass;@ApiModelProperty("三级类目")private String thirdClass;@ApiModelProperty("一级类目的ID")private String firstId;@ApiModelProperty("二级类目的ID")private String secondId;@ApiModelProperty("三级类目的ID")private String thirdId;@ApiModelProperty("小程序页面的标题,标题长度不超过32")private String title;}

@PostMapping("submitAudit")@ApiOperation("将第三方提交的代码包提交审核")@ApiImplicitParam(name = "submitAuditVO", dataType = "SubmitAuditVO")public ApiResponse submitAudit(@RequestBody SubmitAuditVO submitAuditVO) {StringBuffer stf = new StringBuffer("https://api./wxa/submit_audit?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);Map<String, Object> parmMap = new HashMap(3);List<SubmitAuditAddressVO> list = submitAuditVO.getItemList();List<Map<String, String>> mapList = new ArrayList();list.forEach(submitAuditAddressVO -> {Map<String, String> map = new HashMap();map.put("address", submitAuditAddressVO.getAddress());map.put("tag", submitAuditAddressVO.getTag());if (!StringUtils.isEmpty(submitAuditAddressVO.getFirstClass())) {map.put("first_class", submitAuditAddressVO.getFirstClass());}if (!StringUtils.isEmpty(submitAuditAddressVO.getSecondClass())) {map.put("second_class", submitAuditAddressVO.getSecondClass());}if (!StringUtils.isEmpty(submitAuditAddressVO.getThirdClass())) {map.put("third_class", submitAuditAddressVO.getThirdClass());}if (!StringUtils.isEmpty(submitAuditAddressVO.getFirstId())) {map.put("first_id", submitAuditAddressVO.getFirstId());}if (!StringUtils.isEmpty(submitAuditAddressVO.getSecondId())) {map.put("second_id", submitAuditAddressVO.getSecondId());}if (!StringUtils.isEmpty(submitAuditAddressVO.getThirdId())) {map.put("third_id", submitAuditAddressVO.getThirdId());}map.put("title", submitAuditAddressVO.getTitle());mapList.add(map);});if (!StringUtils.isEmpty(submitAuditVO.getFeedbackInfo())) {parmMap.put("feedback_info", submitAuditVO.getFeedbackInfo());}if (!StringUtils.isEmpty(submitAuditVO.getFeedbackStuff())) {parmMap.put("feedback_stuff", submitAuditVO.getFeedbackStuff());}parmMap.put("item_list", mapList);log.info("请求参数【{}】=============================》", parmMap);ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), parmMap, String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("将第三方提交的代码包提交审核=========》【{}】", entity.getBody());} else {log.error("将第三方提交的代码包提交审核=========》失败!");}return ResponseUtil.success(entity.getBody());}

正确返回:

{"errcode":0,"errmsg":"ok","auditid":1234567}可通过 auditid 去查询审核状态

7:修改小程序基本信息

修改名称

@GetMapping("setNickName")@ApiOperation("修改小程序名字")public ApiResponse setNickName(String nickName) {StringBuffer stf = new StringBuffer("https://api./wxa/setnickname?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);Map<String, String> parmMap = new HashMap();parmMap.put("nick_name", nickName);ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), parmMap, String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("修改小程序名字=========》【{}】", entity.getBody());} else {log.error("修改小程序名字=========》失败!");}return ResponseUtil.success(entity.getBody());}

正确返回:

{"errcode": 0,"errmsg": "ok","wording": "","audit_id": 12345}可通过audit_id 去查询审核状态,具体参考第三方平台代小程序实现业务小程序基本信息设置里的接口

修改功能简介

@ApiOperation("修改功能介绍")@GetMapping("modifySignature")//signature 功能介绍(简介)public ApiResponse modifySignature(String signature) {StringBuffer stf = new StringBuffer("https://api./cgi-bin/account/modifysignature?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);Map<String, String> parmMap = new HashMap();parmMap.put("signature", signature);ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), parmMap, String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("修改功能介绍=========》【{}】", entity.getBody());} else {log.error("修改功能介绍=========》失败!");}return ResponseUtil.success(entity.getBody());}

正确返回:

{"errcode": 0,"errmsg": "ok",}

修改头像

@ApiOperation("修改头像")@PostMapping("modifyHeadImage")public ApiResponse modifyHeadImage(@RequestBody ModifyHeadImageVO modifyHeadImageVO) {StringBuffer stf = new StringBuffer("https://api./cgi-bin/account/modifyheadimage?access_token=");String authorizerAccessToken = String.valueOf(redisUtil.get("authorizer_access_token"));stf.append(authorizerAccessToken);Map<String, Object> parmMap = new HashMap();parmMap.put("head_img_media_id", modifyHeadImageVO.getHeadImgMediaId());parmMap.put("x1", Float.valueOf(modifyHeadImageVO.getX1()));parmMap.put("y1", Float.valueOf(modifyHeadImageVO.getY1()));parmMap.put("x2", Float.valueOf(modifyHeadImageVO.getX2()));parmMap.put("y2", Float.valueOf(modifyHeadImageVO.getY2()));log.info("修改头像请求参数==============================》【{}】", parmMap);ResponseEntity<String> entity = restTemplate.postForEntity(stf.toString(), parmMap, String.class);if (entity.getStatusCode().equals(HttpStatus.OK)) {log.info("修改头像=========》【{}】", entity.getBody());} else {log.error("修改头像=========》失败!");}return ResponseUtil.success(entity.getBody());}

modifyHeadImageVO:参数如下

{"head_img_media_id": "mI-4E_sFh_2X3g-qmTIWD83RT78ytI1_6VfgFp_A3-Y2U5T_nLl3nm1xYTafFJ8p","x1": 0,"y1": 0,"x2": 0.7596899224806202,"y2": 0.49,}注:head_img_media_id 参考微信素材管理文档,可以用临时生成。比如直接用curl curl -F media=@D:\background_img\timg.jpg "https://api./cgi-bin/media/upload?access_token=你的access_token&type=TYPE"会返回给你一个id:如:rXXH2BHtQz8HiK7FDuG3HgzPhK-_VEIgfa5wWAt_5vDbJd31fHoPTu4oN6Esa_6R

7:以上信息全部搞定之后发布

参考第三方平台代小程序实现业务的服务器域名设置,我这个也是 postman 去操作的,注意添加域名要和你在第三方平台填写的资料上的域名一样,不然错误代码 85017。比如: 和 也是有去别的,本人就是因为这个www 的问题 报了好久的错,可能是域名解析的问题吧,不太清楚

8:目前整理的错误码 各大博客搜刮出来的

public class WxCodeConstants {private static final Map<String, String> codeMap;public static String getCodeMessage(String codeNum) {return codeMap.get(codeNum);}static {codeMap = new HashMap<>();codeMap.put("-1", "非法 action 参数");codeMap.put("40007", "非法的 media_id");codeMap.put("40009", "图片尺寸太大");codeMap.put("41006", "media_id 不能为空");codeMap.put("40097", "参数错误");codeMap.put("42001", "token 失效");codeMap.put("46001", "media_id 不存在");codeMap.put("53200", "本月功能介绍修改次数已用完");codeMap.put("53201", "功能介绍内容命中黑名单关键字");codeMap.put("53202", "本月头像修改次数已用完");codeMap.put("53303", "参数提交错误");codeMap.put("53300", "超出每月次数限制");codeMap.put("53301", "超出可配置类目总数限制");codeMap.put("53302", "当前账号主体类型不允许设置此种类目");codeMap.put("53304", "与已有类目重复");codeMap.put("53305", "包含未通过 ICP 校验的类目");codeMap.put("53306", "修改类目只允许修改类目资质,不允许修改类目 ID");codeMap.put("53307", "只有审核失败的类目允许修改");codeMap.put("53308", "审核中的类目不允许删除");codeMap.put("53010", "名称格式不合法");codeMap.put("53011", "名称检测命中频率限制");codeMap.put("53012", "禁止使用该名称");codeMap.put("53013", "公众号:名称与已有公众号名称重复;小程序:该名称与已有小程序名称重复");codeMap.put("53014", "公众号:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}");codeMap.put("53015", "公众号:该名称与已有小程序名称重复,需与该小程序帐号相同主体才可申请;小程序:该名称与已有公众号名称重复,需与该公众号帐号相同主体才可申请");codeMap.put("53016", "公众号:该名称与已有多个小程序名称重复,暂不支持申请;小程序:该名称与已有多个公众号名称重复,暂不支持申请");codeMap.put("53017", "公众号:小程序已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A};小程序:公众号已有{名称 A+}时,需与该帐号相同主体才可申请{名称 A}");codeMap.put("53018", "名称命中微信号");codeMap.put("53019", "名称在保护期内");codeMap.put("61003", "component is not authorized by this account hin");codeMap.put("61070", "法人姓名与微信号不一致");codeMap.put("61004", "当前客户端ip未在开放平台白名单");codeMap.put("61007", "当前公众号或者小程序已在公众平台解绑");codeMap.put("61023", "授权已过期,请重新授权");codeMap.put("85001", "微信号不存在或微信号设置为不可搜索");codeMap.put("85002", "小程序绑定的体验者数量达到上限");codeMap.put("85003", "微信号绑定的小程序体验者达到上限");codeMap.put("85004", "微信号已经绑定");codeMap.put("85006", "标签格式错误");codeMap.put("85007", "页面路径错误");codeMap.put("85008", "类目填写错误");codeMap.put("85009", "已经有正在审核的版本");codeMap.put("85010", "item_list有项目为空");codeMap.put("85011", "标题填写错误");codeMap.put("85012", "无效的审核id");codeMap.put("85013", "无效的自定义配置");codeMap.put("85014", "无效的模版编号");codeMap.put("85019", "没有审核版本");codeMap.put("85020", "审核状态未满足发布");codeMap.put("85021", "状态不可变-5以内");codeMap.put("85022", "action非法");codeMap.put("85023", "审核列表填写的项目数不在1-5以内");codeMap.put("85043", "模版错误");codeMap.put("85044", "代码包超过大小限制");codeMap.put("85045", "导航设置错误,请重置导航再试,编号85045',//'ext_json有不存在的路径");codeMap.put("85046", "tabBar中缺少path");codeMap.put("85047", "pages字段为空");codeMap.put("85048", "导航设置错误,请重置导航再试,编号85048',//'ext_json解析失败");codeMap.put("85052", "小程序已发布");codeMap.put("85066", "链接错误");codeMap.put("85068", "测试链接不是子链接");codeMap.put("85069", "校验文件失败");codeMap.put("85070", "链接为黑名单");codeMap.put("85071", "已添加该链接,请勿重复添加");codeMap.put("85072", "该链接已被占用");codeMap.put("85073", "二维码规则已满");codeMap.put("85074", "小程序未发布, 小程序必须先发布代码才可以发布二维码跳转规则");codeMap.put("85075", "个人类型小程序无法设置二维码规则");codeMap.put("85076", "链接没有ICP备案");codeMap.put("85077", "小程序类目信息失效(类目中含有官方下架的类目,请重新选择类目)");codeMap.put("85079", "'小程序没有线上版本,不能进行灰度");codeMap.put("85080", "小程序提交的审核未审核通过");codeMap.put("85081", "无效的发布比例");codeMap.put("85082", "当前的发布比例需要比之前设置的高");codeMap.put("85085", "当前平台近7天提交审核的小程序数量过多,请耐心等待审核完毕后再次提交");codeMap.put("85060", "无效的 taskid");codeMap.put("85027", "身份证绑定管理员名额达到上限");codeMap.put("85061", "手机号绑定管理员名额达到上限");codeMap.put("85026", "微信号绑定管理员名额达到上限");codeMap.put("85063", "身份证黑名单");codeMap.put("85062", "手机号黑名单");codeMap.put("85083", "搜索标记位被封禁,无法修改");codeMap.put("85084", "非法的 status 值,只能填 0 或者 1");codeMap.put("85015", "该账号不是小程序账号");codeMap.put("85016", "域名数量超过限制");codeMap.put("85017", "没有新增域名,请确认小程序已经添加了域名或该域名是否没有在第三方平台添加");codeMap.put("85018", "域名没有在第三方平台设置");codeMap.put("86000", "不是由第三方代小程序进行调用");codeMap.put("86001", "不存在第三方的已经提交的代码");codeMap.put("86002", "小程序还未设置昵称、头像、简介。请先设置完后再重新提交");codeMap.put("87011", "现网已经在灰度发布,不能进行版本回退");codeMap.put("87012", "该版本不能回退,可能的原因:1:无上一个线上版用于回退 2:此版本为已回退版本,不能回退 3:此版本为回退功能上线之前的版本,不能回退");codeMap.put("87013", "撤回次数达到上限(每天一次,每个月10次)");codeMap.put("89019", "业务域名无更改,无需重复设置");codeMap.put("89020", "尚未设置小程序业务域名,请先在第三方平台中设置小程序业务域名后在调用本接口");codeMap.put("89021", "请求保存的域名不是第三方平台中已设置的小程序业务域名或子域名");codeMap.put("89029", "业务域名数量超过限制");codeMap.put("89031", "小程序绑定的体验者数量达到上限");codeMap.put("89231", "个人小程序不支持调用 setwebviewdomain 接口");codeMap.put("89248", "企业代码类型无效,请选择正确类型填写");codeMap.put("89250", "未找到该任务");codeMap.put("89251", "待法人人脸核身校验");codeMap.put("89252", "法人&企业信息一致性校验中");codeMap.put("89253", "缺少参数");codeMap.put("89249", "该主体已有任务执行中,距上次任务 24h 后再试");codeMap.put("89247", "内部错误");codeMap.put("86004", "无效微信号");codeMap.put("89254", "第三方权限集不全,补全权限集全网发布后生效");codeMap.put("91001", "不是公众号快速创建的小程序");codeMap.put("91002", "小程序发布后不可改名");codeMap.put("91003", "改名状态不合法");codeMap.put("91004", "昵称不合法");codeMap.put("91005", "昵称 15 天主体保护");codeMap.put("91006", "昵称命中微信号");codeMap.put("91007", "昵称已被占用");codeMap.put("91008", "昵称命中 7 天侵权保护期");codeMap.put("91009", "需要提交材料");codeMap.put("91010", "其他错误");codeMap.put("91013", "占用名字过多");codeMap.put("91014", "+号规则 同一类型关联名主体不一致");codeMap.put("91015", "原始名不同类型主体不一致");codeMap.put("91016", "名称占用者 ≥2");codeMap.put("91017", "+号规则 不同类型关联名主体不一致");codeMap.put("91011", "查不到昵称修改审核单信息");codeMap.put("91012", "其它错误");}}

本人QQ:571726193

群(新 人少) :1030289715

欢迎来交流,什么问题也欢迎指出。

NO.3 微信第三方平台代创建小程序审核发布以及小程序信息(头像 名称 简介)修改 以及微信错误码 返回信息

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。