
# twitter回调接口
#### 接口功能
创建Twitter渠道时，推送消息给Twitter，Twitter回调本接口认证。
#### 使用说明
- 前提条件 在AICC测正确创建twitter渠道，twitter开发者平台填写回调地址正确。
  详见官方文档：https://developer.twitter.com/en/docs/twitter-api
  
 
#### 接口鉴权
```
/**
     * 渠道认证逻辑
     *
     * @param request 请求
     * @param response 响应
     */
    @Override
    public void confirm(HttpServletRequest request, HttpServletResponse response) {
        JSONObject returnObj = new JSONObject();
        String requestUrl = UsUriUtils.getRequestURI(request);
        String channelId = requestUrl.substring(requestUrl.lastIndexOf("/") + 1);
        AiccLog.intf("start deal with twitter confirm url,channelId:{}", channelId);
        if (CommonUtil.isEmpty(channelId)) {
            log.error("The channelId is null when check confirm url");
            return;
        }
        String crcToken = request.getParameter("crc_token");
        ChannelConfig channelConfig = adapterCommonService.getChannelConfig(channelId);
        String consumerSecret = twitterRedisService.getConsumerSecretAndDelete(channelId, channelConfig.getTenantId());
        if (StringUtils.isEmpty(consumerSecret)) {
            consumerSecret = getConsumerSecretFromChat(channelId);
        }
        if (StringUtils.isEmpty(consumerSecret)) {
            log.error("channel id : {} consumer parameter lost!", channelId);
        }
        try {
            String responseCode = BaseUtil.hMacSha256(crcToken, consumerSecret);
            returnObj.put("response_token", "sha256=" + responseCode);
        } catch (NoSuchAlgorithmException | InvalidKeyException e) {
            log.error("hmac sha256 error,channelId:{},tenantId:{}", channelId,channelConfig.getTenantId());
        }
        AiccLog.intf("end deal with twitter confirm url,channelId:{}", channelId);
    }
```
#### 接口原型
表1接口原型说明 
|   请求方法    |                                                                                                 GET                                                                                                  ||
|---|---|---|
| **请求URL** | https://ip:port/social/on/twitter/{channelId} | 其中，ip:port为对外暴露的nslb的ip和port， channelId为渠道id |
   
#### 请求参数
表2请求Headers参数说明 
| 参数名称         | 选取原则 | 参数类型   | 默认值 | 说明                                     |
|:---|:---|:---|:---|:---|
| Content-Type | 必选   | String | 无   | 固定填 application/x-www-form-urlencoded。 |
   
表3请求入参params 
| 参数名称      | 选取原则 | 参数类型   | 默认值 | 说明               |
|:---|:---|:---|:---|:---|
| crc_token | 必选   | String | 无   | 用于生成上行接口认证token。 |
   
#### 响应参数
表4响应参数说明 
| 参数名称           | 选取原则 | 参数类型       | 默认值 | 说明               |
|:---|:---|:---|:---|:---|
| response_token | 必选   | JSONObject | 无   | 用于生成上行接口认证token。 |
   
#### 接口示例
- 请求示例
  ```
  GET
  Content-Type: application/json;charset=UTF-8
  https://ip/social/on/twitter/{channelId}
  x-www-form-urlencoded: key 
  crc_token:xxxxxxxxxxxxxxxxxx
  ```
  
- 响应示例
  ```
  HTTP/1.1 200 OK
  Content-Type: application/json;charset=UTF-8
  {
  "response_token": "sha256=xxxxxxxxxx"
  }
  ```
  
 
