|
1 | 1 | 腾讯云微信小程序服务端 SDK - Java |
2 | 2 | ================================= |
3 | 3 |
|
4 | | -本 SDK 是[腾讯云微信小程序一站式解决方案](https://github.com/tencentyun/weapp-solution)(下文简称「解决方案」)的组成部分。业务服务器可通过本 SDK 为小程序客户端提供云端服务支持,包括: |
| 4 | +本 SDK 是[腾讯云微信小程序一站式解决方案][weapp-solution](下文简称「解决方案」)的组成部分。业务服务器可通过本 SDK 为小程序客户端提供云端服务支持,包括: |
5 | 5 |
|
6 | 6 | 1. 登录态鉴权服务 |
7 | 7 | 2. 信道服务 |
8 | 8 |
|
9 | 9 | ## SDK 获取 |
10 | 10 |
|
11 | | -本项目遵守 [MIT](LICENSE) 协议,可以直接[下载 SDK 源码](https://github.com/tencentyun/weapp-java-server-sdk/archive/master.zip)进行修改、编译和发布。 |
| 11 | +本项目遵守 [MIT](LICENSE) 协议,可以直接[下载 SDK 源码][sdk-download]进行修改、编译和发布。 |
12 | 12 |
|
13 | | -> 如果从[腾讯云微信小程序控制台](https://console.qcloud.com/la)购买解决方案并选择 Java 语言,则分配的业务服务器里已经部署了本 SDK 和 Demo 的发行版本。 |
| 13 | +> 如果从[腾讯云微信小程序控制台][la-console]购买解决方案并选择 Java 语言,则分配的业务服务器里已经部署了本 SDK 和 Demo 的发行版本。 |
| 14 | +
|
| 15 | +## API |
| 16 | + |
| 17 | +请参考[线上 API 文档][api-url]。 |
14 | 18 |
|
15 | 19 | ## 使用示例(Servlet) |
16 | 20 |
|
17 | | -> TODO |
| 21 | +### 配置 SDK |
18 | 22 |
|
19 | | -## API |
| 23 | +SDK 必须经过初始化配置之后才能使用。可以选择使用代码初始化或者配置文件初始化。初始化配置建议在 `Servlet::init()` 里进行。 |
| 24 | + |
| 25 | +使用代码初始化: |
| 26 | + |
| 27 | +```java |
| 28 | +import com.qcloud.weapp.*; |
| 29 | + |
| 30 | +Configuration configuration = new Configuration(); |
| 31 | + |
| 32 | +// 业务服务器访问域名 |
| 33 | +configuration.setServerHost("199447.qcloud.la"); |
| 34 | +// 鉴权服务地址 |
| 35 | +configuration.setAuthServerUrl("http://10.0.12.135/mina_auth/"); |
| 36 | +// 信道服务地址 |
| 37 | +configuration.setTunnelServerUrl("https://ws.qcloud.com/"); |
| 38 | +// 信道服务签名 key |
| 39 | +configuration.setTunnelSignatureKey("my$ecretkey"); |
| 40 | +// 网络请求超时设置,单位为秒 |
| 41 | +configuration.setNetworkTimeout(30); |
| 42 | + |
| 43 | +ConfigurationManager.setup(configuration); |
| 44 | +``` |
| 45 | + |
| 46 | +使用配置文件初始化: |
| 47 | + |
| 48 | +```java |
| 49 | +import com.qcloud.weapp.*; |
| 50 | + |
| 51 | +var configFilePath = "/etc/qcloud/sdk.config"; |
| 52 | +ConfigurationManager.setupFromFile(configFilePath); |
| 53 | +``` |
| 54 | + |
| 55 | +关于 SDK 配置字段的含义以及配置文件格式的更多信息,请参考[服务端 SDK 配置][sdk-config-wiki]。 |
| 56 | + |
| 57 | +### 使用 SDK 提供登录服务 |
| 58 | + |
| 59 | +#### 登录 |
| 60 | + |
| 61 | +业务服务器提供一个路由处理客户端的登录请求,直接把该请求交给 SDK 来处理即可完成登录。登录成功后,可以获取用户信息。 |
| 62 | + |
| 63 | +```java |
| 64 | +import com.qcloud.weapp.*; |
| 65 | +import com.qcloud.weapp.authorization.*; |
| 66 | + |
| 67 | +@WebServlet("/login") |
| 68 | +public class LoginServlet extends HttpServlet { |
| 69 | + /** |
| 70 | + * 处理登录请求 |
| 71 | + * */ |
| 72 | + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
| 73 | + // 通过 ServletRequest 和 ServletResponse 初始化登录服务 |
| 74 | + LoginService service = new LoginService(request, response); |
| 75 | + try { |
| 76 | + // 调用登录接口,如果登录成功可以获得登录信息 |
| 77 | + UserInfo userInfo = service.login(); |
| 78 | + System.out.println("========= LoginSuccess, UserInfo: =========="); |
| 79 | + System.out.println(userInfo.toString()); |
| 80 | + } catch (LoginServiceException e) { |
| 81 | + // 登录失败会抛出登录失败异常 |
| 82 | + e.printStackTrace(); |
| 83 | + } catch (ConfigurationException e) { |
| 84 | + // SDK 如果还没有配置会抛出配置异常 |
| 85 | + e.printStackTrace(); |
| 86 | + } |
| 87 | + } |
| 88 | +} |
| 89 | +``` |
| 90 | + |
| 91 | +> 如果登录失败,[login()][login-api] 方法会抛出异常,需要使用 try-catch 来捕获异常。该异常可以不用处理,抛出来是为了方便业务服务器可以进行记录和监控。 |
| 92 | +
|
| 93 | +#### 获取会话状态 |
| 94 | + |
| 95 | +客户端交给业务服务器的请求,业务服务器可以通过 SDK 来检查该请求是否包含合法的微信小程序会话。如果包含,则会返回会话对应的用户信息。 |
| 96 | + |
| 97 | +```java |
| 98 | +import com.qcloud.weapp.*; |
| 99 | +import com.qcloud.weapp.authorization.*; |
| 100 | + |
| 101 | +@WebServlet("/user") |
| 102 | +public class UserServlet extends HttpServlet { |
| 103 | + |
| 104 | + /** |
| 105 | + * 从请求中获取会话中的用户信息 |
| 106 | + */ |
| 107 | + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { |
| 108 | + LoginService service = new LoginService(request, response); |
| 109 | + try { |
| 110 | + // 调用检查登录接口,成功后可以获得用户信息,进行正常的业务请求 |
| 111 | + UserInfo userInfo = service.check(); |
| 112 | + |
| 113 | + // 获取会话成功,输出获得的用户信息 |
| 114 | + JSONObject result = new JSONObject(); |
| 115 | + JSONObject data = new JSONObject(); |
| 116 | + data.put("userInfo", new JSONObject(userInfo)); |
| 117 | + result.put("code", 0); |
| 118 | + result.put("message", "OK"); |
| 119 | + result.put("data", data); |
| 120 | + response.setContentType("application/json"); |
| 121 | + response.setCharacterEncoding("utf-8"); |
| 122 | + response.getWriter().write(result.toString()); |
| 123 | + |
| 124 | + } catch (LoginServiceException e) { |
| 125 | + e.printStackTrace(); |
| 126 | + } catch (JSONException e) { |
| 127 | + e.printStackTrace(); |
| 128 | + } catch (ConfigurationException e) { |
| 129 | + e.printStackTrace(); |
| 130 | + } |
| 131 | + } |
| 132 | +} |
| 133 | + |
| 134 | +``` |
| 135 | + |
| 136 | +> 如果检查会话失败,或者会话无效,[Check()][check-api] 方法会抛出异常,需要使用 try-catch 来捕获异常。该异常可以不用处理,抛出来是为了方便业务服务器可以进行记录和监控。 |
| 137 | +
|
| 138 | +阅读解决方案文档中的[鉴权服务][auth-service-wiki]了解更多解决方案中关于鉴权服务的技术资料。 |
| 139 | + |
| 140 | +### 使用 SDK 提供信道服务 |
| 141 | + |
| 142 | +业务在一个路由上提供信道服务,只需把该路由上的请求都交给 SDK 的信道服务处理即可。 |
| 143 | + |
| 144 | +```java |
| 145 | +import com.qcloud.weapp.*; |
| 146 | +import com.qcloud.weapp.tunnel.*; |
| 147 | +import com.qcloud.weapp.demo.ChatTunnelHandler; |
| 148 | + |
| 149 | +@WebServlet("/tunnel") |
| 150 | +public class TunnelServlet extends HttpServlet { |
| 151 | + private static final long serialVersionUID = -6490955903032763981L; |
| 152 | + |
| 153 | + /** |
| 154 | + * 把所有的请求交给 SDK 处理,提供 TunnelHandler 处理信道事件 |
| 155 | + */ |
| 156 | + protected void service(HttpServletRequest request, HttpServletResponse response) |
| 157 | + throws ServletException, IOException { |
| 158 | + |
| 159 | + // 创建信道服务处理信道相关请求 |
| 160 | + TunnelService tunnelService = new TunnelService(request, response); |
| 161 | + |
| 162 | + try { |
| 163 | + // 配置是可选的,配置 CheckLogin 为 true 的话,会在隧道建立之前获取用户信息,以便业务将隧道和用户关联起来 |
| 164 | + TunnelHandleOptions options = new TunnelHandleOptions(); |
| 165 | + options.setCheckLogin(true); |
| 166 | + |
| 167 | + // 需要实现信道处理器,ChatTunnelHandler 是一个实现的范例 |
| 168 | + tunnelService.handle(new ChatTunnelHandler(), options); |
| 169 | + } catch (ConfigurationException e) { |
| 170 | + e.printStackTrace(); |
| 171 | + } |
| 172 | + } |
| 173 | +} |
| 174 | +``` |
| 175 | + |
| 176 | +使用信道服务需要实现处理器,来获取处理信道的各种事件,具体可参考接口 [TunnelHandler][tunnel-handler-api] 的 API 文档以及配套 Demo 中的 [ChatTunnelHandler][chat-handler-source] 的实现。 |
| 177 | + |
| 178 | +阅读解决方案文档中的[信道服务][tunnel-service-wiki]了解更多解决方案中关于鉴权服务的技术资料。 |
| 179 | + |
| 180 | +## 反馈和贡献 |
| 181 | + |
| 182 | +如有问题,欢迎使用 [Issues][new-issue] 提出,也欢迎广大开发者给我们提 [Pull Request][pr]。 |
| 183 | + |
| 184 | +[weapp-solution]: https://github.com/tencentyun/weapp-solution "查看腾讯云微信小程序解决方案" |
| 185 | +[sdk-download]: https://github.com/tencentyun/weapp-java-server-sdk/archive/master.zip "下载 Java SDK 源码" |
| 186 | +[la-console]: https://console.qcloud.com/la "打开腾讯云微信小程序一站式解决方案控制台" |
| 187 | +[api-url]: https://tencentyun.github.io/weapp-java-server-sdk/api/ "查看 Java SDK API 文档" |
| 188 | +[sdk-config-wiki]: https://github.com/tencentyun/weapp-solution/wiki/%E6%9C%8D%E5%8A%A1%E7%AB%AF-SDK-%E9%85%8D%E7%BD%AE "查看服务端 SDK 配置" |
| 189 | +[auth-service-wiki]: https://github.com/tencentyun/weapp-solution/wiki/%E9%89%B4%E6%9D%83%E6%9C%8D%E5%8A%A1 "查看关于鉴权服务的更多资料" |
| 190 | +[tunnel-service-wiki]: https://github.com/tencentyun/weapp-solution/wiki/%E9%89%B4%E6%9D%83%E6%9C%8D%E5%8A%A1 "查看关于信道服务的更多资料" |
| 191 | +[login-api]: https://tencentyun.github.io/weapp-java-server-sdk/api/com/qcloud/weapp/authorization/LoginService.html#login-- "查看 LoginService::login() 方法 API" |
| 192 | +[check-api]: https://tencentyun.github.io/weapp-java-server-sdk/api/com/qcloud/weapp/authorization/LoginService.html#check-- "查看 LoginService::ckeck() 方法 API" |
| 193 | +[tunnel-handler-api]: https://tencentyun.github.io/weapp-java-server-sdk/api/com/qcloud/weapp/tunnel/TunnelHandler.html "查看 TunnelHandler 接口 API 文档"; |
| 194 | +[chat-handler-source]: https://github.com/tencentyun/weapp-java-server-sdk/blob/master/com.qcloud.weapp.demo/src/com/qcloud/weapp/demo/ChatTunnelHandler.java "查看 ChatTunnelHandler 示例代码" |
20 | 195 |
|
21 | | -请参考[线上 API 文档](https://tencentyun.github.io/weapp-java-server-sdk/api/)。 |
| 196 | +[new-issue]: https://github.com/CFETeam/qcloud-weapp-server-sdk-csharp/issues/new "反馈建议和问题" |
| 197 | +[pr]: https://github.com/CFETeam/qcloud-weapp-server-sdk-csharp/pulls "创建 |
0 commit comments