欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

企业微信服务号,安装应用提示 应用已下线 已解决

最编程 2024-05-06 18:44:04
...

企业微信服务号,安装应用提示 该应用已下线 解决方案
最近学习微信服务商开发应用,在调试接口阶段都很顺利,但是到了生成安装授权地址的时候出现了问题,在浏览打开地址的时候,提示"该应用已下线",截图如下
在这里插入图片描述
这个问题找官方技术客服两天,最后才能解决。一下说说出现该问题的集中情况.
1、安装地址需要从 服务商网站发起授权请求
在这里插入图片描述

2、跳转安装的请求头设置referer,referer的域名需和应用配置的域名一致,如图
在这里插入图片描述
3、预授权码的使用,在生成授权地址前,需要调用 “设置授权配置” 接口,然后生成安装地址。在此处有一个致命的细节,调用 "设置授权配置"接口要求传入一个预授权码,安装地址上面也会有一个预授权码,此处要求两个接口的预授权码一致。才不会出现"该应用已下线"的情况。

ps:我的问题就出现在第三点,在"设置授权配置"的时候生成了一个预授权码,然后生成安装地址的时候,又重新获取了一个预授权码,两个授权码不一样,导致问题的出现。以下贴出错误的代码和更正后的代码.
错误代码:
下面展示一些 错误代码

/**
     * @Description: 获取授权地址
     * @Author: zl 
     * @Date: 2020/12/16 0016 
     */ 
    @GetMapping("getAuthUrl")
    public Object getAuthUrl(){
    	//先调用 授权配置接口
    	SWeixin.setSessionInfo();
    	//在调用  生成安装地址
        return Rets.success(SWeixin.getAuthUrl());
    }
    
// SWeixin.setSessionInfo(); 
/**
     * @Description: 设置授权配置
     * @Author: zl
     * @Date: 2020/12/15 0015
     */
    public static void setSessionInfo(){
        Map<String,Object> map = new HashMap<>();
        map.put("suiteAccessToken",getSuiteToken());
        JSONObject body = new JSONObject();
        body.put("pre_auth_code",preAuthCode()); //此处获取了  预授权码加粗样式
        JSONObject sessionJson = new JSONObject();
        sessionJson.put("appid",new JSONArray());
        sessionJson.put("auth_type",1);
        body.put("session_info",sessionJson);
        JSONObject resultJson = post(SystemUtils.replacePlaceholder(SConstants.SET_SESSION_INFO,map),body.toJSONString());
        log.info("授权结果:{}",resultJson);
    }

/**
     * @Description: 授权页地址
     * @Author: zl 
     * @Date: 2020/12/15 0015
     * 此处,授权配置  和  授权地址  使用的预授权码必须一致,否则安装应用会提示 应用已下线
     */ 
    public static String getAuthUrl(){
        String preAuthCode = getPreAuthCode(); //此处也获取了一次  预授权码
        Map<String,Object> map = new HashMap<>();
        map.put("suiteId",appConfiguration.getSuiteId());
        map.put("preAuthCode",preAuthCode);
        String url = null;
        try {
            url = URLEncoder.encode(appConfiguration.getRedirectUri(),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        map.put("redirectUri",url);
        map.put("state", RandomUtil.randomString(8));
        return SystemUtils.replacePlaceholder(SConstants.TEMP_INSTALL,map);
    }

下面展示一些 修改后的代码

/**
     * @Description: 授权页地址
     * @Author: zl 
     * @Date: 2020/12/15 0015
     * 此处,授权配置  和  授权地址  使用的预授权码必须一致,否则安装应用会提示 应用已下线
     */ 
    public static String getAuthUrl(){
    	//此处获取一次  预授权码,然后将该授权码传给  授权配置接口  ,两者就预授权码就一样了
        String preAuthCode = getPreAuthCode();
        //授权配置
        setSessionInfo(preAuthCode);
        Map<String,Object> map = new HashMap<>();
        map.put("suiteId",appConfiguration.getSuiteId());
        map.put("preAuthCode",preAuthCode);
        String url = null;
        try {
            url = URLEncoder.encode(appConfiguration.getRedirectUri(),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        map.put("redirectUri",url);
        map.put("state", RandomUtil.randomString(8));
        return SystemUtils.replacePlaceholder(SConstants.TEMP_INSTALL,map);
    }

该文章仅作为参考,若有不对之处,请指出。