企业微信服务商开发(四)

经过企业微信服务商开发(三)配置的回调URL,接下来可以开发安装测试了,安装测试有两种方式。

测试安装应用

应用创建成功后,服务商可自行授权测试该应用。

每个应用目前仅允许10个不同企业微信授权测试;
用于测试授权的企业微信,不能再进行正式应用的授权;

目前有下面两种测试方式:

  • 方法1

在服务商管理端“本地应用”栏,找到并点击进入上一步创建的应用,点击页面右上角的“安装测试”按钮,即可进入测试授权环节。

img

该测试授权流程必须响应并处理授权成功的通知的回调消息。

这种方式安装完成,会回调指令那URL,来处理企业安装应用完成,这里特意提醒一下,在处理回调的时候最好是用异步,先给微信返回success,异步处理回调数据。

谨记,在正式对外发布应用时一定要改回来。

spring-boot创建一个InstallController,处理授权设置,授权成功redirect_uri处理。

  • InstallController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import com.itwork.common.vo.SmartResp;
import com.itwork.weixin.cp.properties.WxCpProperties;
import com.itwork.weixin.cp.service.SuiteServcie;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

/**
* @author dgb
* @create 2019-03-21 13:17
**/
@Slf4j
@RestController
@RequestMapping("/install")
public class InstallController {

@Autowired
private SuiteServcie suiteServcie;
@Autowired
private WxCpProperties properties;

/**
* 构造企业授权链接
*
* @param enterpriseId
* @return
*/
@GetMapping("/{enterpriseId}")
public SmartResp<String> getInstallUrl(@PathVariable("enterpriseId") String enterpriseId) {

String installUrl = "https://open.work.weixin.qq.com/3rdapp/install?suite_id=%s&pre_auth_code=%s&redirect_uri=%s&state=%s";
try {
String suiteId = this.properties.getSuiteId();
String redirectUri = URLEncoder.encode("http://这个地址是外网可以请求到的/weixin/install/redirectBack", StandardCharsets.UTF_8.name());
String proAuthCode = suiteServcie.getPreAuthCode();
installUrl = String.format(installUrl, suiteId, proAuthCode, redirectUri, enterpriseId);
} catch (Exception e) {
return SmartResp.failed().appendDesc("构造企业授权链接异常").build();
}

return SmartResp.sucess().body(installUrl);
}

/**
* 授权成功,返回临时授权码
*
* @return
*/
@GetMapping("/redirectBack")
public SmartResp<?> redirectBack(String auth_code, Integer expires_in, String state) {

log.info("授权成功,auth_code:{}",auth_code);
try {
suiteServcie.getPermanentCode(auth_code);
} catch (Exception e) {
log.info("获取企业永久授权码失败:{}", e);
return SmartResp.failed().appendDesc("获取企业永久授权码失败").build();
}
return SmartResp.sucess().build();
}

/**
* 授权配置,设置应用可以从服务商网站发起授权
*/
@GetMapping("/setSessInfo")
public SmartResp<?> setSessInfo() {
try {
suiteServcie.setSessionInfo();
} catch (WxErrorException e) {
return SmartResp.failed().appendDesc("设置授权配置异常").build();
}

return SmartResp.sucess().build();
}
}

两种安装测试方法都不复杂,方法2一般是常用开发手段,企业授权通常都会通过服务商的网站发起授权。推荐使用第二种方法。

以上开发配置完成,企业就可以通过下面的两种方式来安正式的安装应用,当然以下的两种方式是在应用正式发布审核通过,才可以安装。

企业授权应用

企业微信的系统管理员可以授权安装第三方应用,安装后企业微信后台会将授权凭证、授权信息等推送给服务商后台。
授权可以有两种发起方式:

  1. 从服务商网站发起
  2. 从企业微信应用市场发起

以上两种授权发起方式并不冲突,服务商可以同时支持。

从服务商网站发起

系统管理员在第三方服务商网站找到适用的应用后,可在服务商网站发起授权请求。此方式下第三方服务商需构造授权链接,引导用户进入授权页面完成授权过程,并取得临时授权码。流程如图示。

注:

  • 获取预授权码
    预授权码是应用实现授权托管的安全凭证,见获取预授权码

  • 引导用户进入授权页

    第三方服务商在自己的网站中放置“企业微信应用授权”的入口,引导企业微信管理员进入应用授权页。授权页网址为:

    1
    https://open.work.weixin.qq.com/3rdapp/install?suite_id=SUITE_ID&pre_auth_code=PRE_AUTH_CODE&redirect_uri=REDIRECT_URI&state=STATE

    跳转链接中,第三方服务商需提供suite_id、预授权码、授权完成回调URI和state参数。

    其中redirect_uri是授权完成后的回调网址,redirect_uri需要经过一次urlencode作为参数;state可填a-zA-Z0-9的参数值(不超过128个字节),用于第三方自行校验session,防止跨域攻击。

  • 授权成功,返回临时授权码

    用户确认授权后,会进入回调URI(即redirect_uri),并在URI参数中带上临时授权码、过期时间以及state参数。第三方服务商据此获得临时授权码。回调地址为:

    1
    redirect_uri?auth_code=xxx&expires_in=600&state=xx
  • 临时授权码10分钟后会失效,第三方服务商需尽快使用临时授权码换取永久授权码及授权信息。
    每个企业授权的每个应用的永久授权码、授权信息都是唯一的,第三方服务商需妥善保管。后续可以通过永久授权码获取企业access_token,进而调用企业微信相关API为授权企业提供服务。

从企业微信应用市场发起

企业可以在应用市场找到想要使用的应用并授权安装,具体流程如图示。

注:

  • 回调临时授权码的详细说明见授权成功通知
  • 利用临时授权码获取永久授权码见获取永久授权码
  • 临时授权码10分钟后会失效,第三方服务商需尽快使用临时授权码换取永久授权码及授权信息。
    每个企业授权的每个应用的永久授权码、授权信息都是唯一的,第三方服务商需妥善保管。后续可以通过永久授权码获取企业access_token,进而调用企业微信相关API为授权企业提供服务。

授权配置开发完成,企业就可以安装应用,企业安装成功,然后登录企业微信后台管理应用

获取示例源码

请关注微信公众号:「特想学英语」并回复:企业微信

原文作者: dgb8901,yinxing

原文链接: https://www.itwork.club/2019/03/27/corp-develop-4/

版权声明: 转载请注明出处

为您推荐

体验小程序「简易记账」

关注公众号「特想学英语」

企业微信服务商开发(五)