java110
2020-06-13 6b60bf5d2c158562cd511303feb38ce1cb9a6ca3
docs/document/api/apiStart.md
@@ -1,6 +1,140 @@
## 如何获取应用
1、登录HC小区管理系统开发者账户dev(密码请在u_user中自己修改)
#### 1、登录开发者平台
登录HC小区管理系统开发者账户dev(密码请在u_user中自己修改)
2、在服务管理> 应用信息 中添加应用 如下图
![image](../images/api/001.png)
#### 2、添加应用
在服务管理> 应用信息 中添加应用 如下图
![image](../images/api/001.png)
应用名称请填写实际调用方名称,如果要开启鉴权方式调用,请填写秘钥,秘钥建议用uuid生成随机字母,如果不鉴权为空,
白名单和黑名单为调用方出口主机IP限制调用IP
## 如何接口绑定
#### 应用绑定接口
在服务注册>服务注册 中点击服务绑定,给新建应用绑定已有接口,系统拥有接口可以在 服务管理> 服务信息中查看
![image](../images/api/002.png)
![image](../images/api/003.png)
## 如何调用接口
#### 调用地址拼接
接口地址拼接方式为 https://您的IP:您的端口(service-front的端口8012)/app/服务编码  或者为
https://您的IP:您的端口(service-api的端口8008)/api/服务编码
第一个地址为只有在登录获取token后才能调用,第二个地址不需要获取token直接调用,service-front 的作用为校验 调用方是否登录
#### 调用固定传参介绍
接口调用基本需要传一下4个参数到http header
|参数名称|约束|类型|长度|描述|取值说明|
| :-: | :-: | :-: | :-: | :-: | :-:|
|app-id|1|String|30|应用ID|通过添加应用生成|
|transaction-id|1|String|30|请求流水号|建议为uuid|
|sign|1|String|-|签名|请参考签名说明|
|req-time|1|String|-|请求时间|YYYYMMDDhhmmss|
#### 举例
###### 举例
> 地址:[http://api.java110.com:8008/api/owner.queryOwnerMembers?memberId=772019091360360003&communityId=7020181217000001](http://api.java110.com:8008/api/owner.queryOwnerMembers?memberId=772019091360360003&communityId=7020181217000001)
``` javascript
请求头信息:
Content-Type:application/json
USER-ID:1234
APP-ID:8000418002
TRANSACTION-ID:10029082726
REQ-TIME:20181113225612
SIGN:aabdncdhdbd878sbdudn898
请求报文:
返回报文:
{
   "machines": [{
      "age": "1",
      "machineId": "123",
      "machineCode": "Acc009",
      "machineVersion": "v1.0",
      "machineName": "门禁大门位置测试",
      "locationTypeCd": "1000",
      "locationObjName": "东大门",
      "locationObjId": "7020181217000001"
   }],
   "page": 0,
   "records": 1,
   "rows": 0,
   "total": 1
}
```
![image](../images/api/004.png)
## 接口签名
签名参考以下代码
```java
    /**
     * 生成签名
     *
     * @param transactionId
     * @return
     */
    public static String generatorSign(String transactionId, String requestTime, String param) throws NoAuthorityException {
        if ("ON".equals(MappingCacheFactory.getValue("SIGN_FLAG"))) {
            String reqInfo = transactionId + requestTime + MappingCacheFactory.getValue("APP_ID") + param + MappingCacheFactory.getValue("SECURITY_CODE");
            return md5(reqInfo);
        }
        return "";
    }
```
get 调用方式签名
```
 //get 方式请求 url 为get请求时的地址 SystemConstant.HTTP_TRANSACTION_ID 为 header 中 TRANSACTION-ID SystemConstant.HTTP_REQ_TIME
    //为header 中 REQ-TIME
    String tempGetParam = "";
    if (url.indexOf("?") > 0) {
        tempGetParam = url.substring(url.indexOf("?"));
    }
    String paramIn = tempGetParam ;
    // 生成sign
    String sign = generatorSign(httpHeaders.get(SystemConstant.HTTP_TRANSACTION_ID).get(0),
            httpHeaders.get(SystemConstant.HTTP_REQ_TIME).get(0),
            paramIn);
```
post 调用方式签名
```
    //post 方式请求 param 为post body内容SystemConstant.HTTP_TRANSACTION_ID 为 header 中 TRANSACTION-ID SystemConstant.HTTP_REQ_TIME
    //为header 中 REQ-TIME
    String tempGetParam = "";
    String paramIn = param;
    // 生成sign
    String sign = generatorSign(httpHeaders.get(SystemConstant.HTTP_TRANSACTION_ID).get(0),
            httpHeaders.get(SystemConstant.HTTP_REQ_TIME).get(0),
            paramIn);
```