企业微信服务号,安装应用提示 应用已下线 已解决
最编程
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);
}
该文章仅作为参考,若有不对之处,请指出。