Skip to content

HAI-Notice(通知中心)对接文档V2.0-三个一网系统对接

数字海南有限公司

Digital Hainan Co., Ltd

版本修订记录

序号** 日期**** 更改内容**** 版次**** 起草或修订人**** 批准人**
12024-01-11第一版1.0梁其良梁其良

范围

本指南提供了统一消息服务接入接口说明,定义了接入接口的调用方式、请求协议、报文格式等内容。

缩略语

JSON:JavaScript Object Notation,是一种轻量级的数据交换格式;

SDK:Software Development Kit,软件开发工具包,提供项目的快速集成;

AK:Access Key,授权码AK,提供接口的安全访问,由接口方提供,使用方妥善保管;

SK:Secret Key,授权码SK,提供接口的安全访问,由接口方提供,使用方妥善保管;

请求协议

通知中心与接入服务通过HTTPS协议交互,字符编码为UTF-8,报文格式为JSON。

调用SDK

通知中心通过统一网关提供服务,在请求时,需要集成Apione SDK,通过统一的调用地址,传递不同的调用参数进行调用。

SDK下载:apione-http-client-hzt-1.0.11-RELEASE.jar

调用示例:

java
/**
 * 接口请求
 *
 * @param contentJson     接口请求Body入参
 * @param ak              分配的AK SK
 * @param sk              我的应用-我申请的功能-对应功能查看sk
 * @param apiName         对应接口名称
 * @param region          接口所属区域 INTRA(政务外网),INTER(政务互联网)
 * @param requestUrl      接口请求地址
 * @return 接口返回数据
 */
public static String invoke(String contentJson,
                                String ak,
                                String sk,
                                String apiName,
                                String region,
                                String requestUrl) {

    ContentBody contentBody = new ContentBody(contentJson);
    
    HttpParameters parameters = HttpParameters.builder()
            .api(apiName)
            .region(region)
            .accessKey(ak)
            .secretKey(sk)
            .contentBody(contentBody)
            .requestUrl(requestUrl)
            .build();

    // 打印入参
    log.info(JSONObject.toJSONString(parameters));
    //请求接口服务,获取response
    HttpReturn call = HttpCaller.getInstance().call(parameters);
    // 打印出参
	log.info(JSONObject.toJSONString(call));
    // 获取接口响应
    return call.getResponse();
}

请求地址

通知中心通过统一网关提供服务,需要请求统一的网关地址,调用不同接口根据接口名称进行区分。

:::tips
生产环境:https://api-one.digitalhainan.com.cn/apione

测试环境:https://api-one-dev.digitalhainan.com.cn/apione

:::

注意:政务网需要开通网络策略:10.111.128.134:80/443,并配置本地HOST

统一接口鉴权

如果接口需要鉴权,需要在header中增加调用凭证(token)信息

字段说明类型必填备注
AuthorizationString用户中心用户凭证(token)信息<br/>示例:<br/>Bearer 4405f5b106d740919b848f728f6f1609

统一响应参数

所有的接口都由统一的响应参数结构进行包装,具体的接口响应参数定义在data字段中

字段说明类型必填备注
successBoolean响应头
codeString异常代码
messageString异常信息
data响应参数

接口说明

统一发送消息

通过此接口可进行海政通“工作通知”消息发送。

:::tips

  • 接口名称(ApiName) :notice.prd.sendMessage
  • 所属区域(Region) :INTER
  • 需要鉴权 :否

:::

请求参数

参数字段说明类型必填备注
messages发送消息列表MessageSendVOY支持批量发送消息

MessageSendVO:

参数字段说明类型必填备注
messageTypeCode消息类型代码StringY由三个一网实施人员分配
channelCode渠道代码StringY由三个一网实施人员配置,如AC000001(需要提供配置内容到实施同学)
receiverUidType接收人标识类型StringY默认为“USERID”
receiverUid接收人标识StringY接收人标识主要对应接收人标识类型,填写实际接收用户的标识,仅支持传入海政通用户ID
attachments消息附件列表List<String>N需要先调用「8.3.消息附件上传接口进行附件上传」,列表内容为接口返回的附件ID<br/>“90aa9cf266d147239a44722f14963f06”, “826cc20dfb3b4484a220e51fcc79d60a”
variables消息模板变量List<VariableVO>Y字段参考下表
extras额外参数JSONN目前只有特定渠道支持额外参数<br/>如:<br/>“extras”: {<br/> “linkConfig”: {<br/> “urlType”: “online”,<br/> “appUrlType”: “online”,<br/> “disable”: 0,<br/> “appDisable”: 0,<br/> “url”: “www.baidu.com”,<br/> “appUrl”: “www.baidu.com”<br/> }<br/> }

VariableVO:

参数字段说明类型必填备注
key变量名称StringY消息模板变量定义的KEY
value变量值StringY消息模板变量定义的Value,需要进行实际业务值替换

返回参数

参数字段说明类型必填备注
rejects消息拒绝发送信息列表List<MessageRejectDTO>Y拒绝发送消息列表,如果此列表不为空,则表示消息被拒绝发送
messageIds消息ID列表List<String>Y消息发送成功分配的消息ID,用于消息查询、跟踪

MessageRejectDTO:

参数字段说明类型必填备注
rejectCode拒绝代码StringY参考消息拒绝原因清单
rejectReason拒绝原因StringY参考消息拒绝原因清单
rejectMessage拒绝发送的消息MessageY参考消息入参

请求示例

可以仅传递部分请求参数。

json
{
    "messages": [
        {
            "messageTypeCode": "TM000023",
            "receiverUid": "111111111111",
            "receiverUidType": "USERID",
            "channelCode": "{海政通DING消息渠道代码}",
            "topicCode": "RXSQ",
            "variables": [
                {
                    "key": "RXR",
                    "value": "111"
                }
            ]
        }
    ]
}

成功响应

:::tips
条件 :请求参数合法

判断条件: success=true

:::

json
{
    "success": true,
    "code": null,
    "message": null,
    "data": {
        "rejects": [],
      	"messageIds": ["1381445818959134720"]
    }
}

:::tips
💡 注意,当消息rejects不为空时,则表示请求的消息中存在因消息校验不通过,被服务拒绝发送

:::

json
{
    "success": true,
    "code": null,
    "message": null,
    "data": {
        "rejects": [
            {
              	"rejectCode": "NOTICE-REJECT-1101",
                "rejectReason": "应用代码不能为空",
                "message": {
                      "appCode": "ONECODE",
                      "topicCode": "BSDT",
                      "messageTypeCode": "YYGHCGTZ",
                      "channelCode": "海政通DING消息渠道代码",
                      "receiverUid": "17789770704",
                      "receiverUidType": "USERID",
                      "sourceCode": "HNSRMYY",
                      "variables": [
                          {
                              "key": "JZR",
                              "value": "张三"
                          }
                    ]
                }
            }
        ]
    }
}

错误响应

:::tips
条件 :请求数据非法或服务器出现异常。

判断条件: success=false

:::

json
{
  	"success": false,
    "code": "SYSTEM-500"
    "data":null
}

发送Ding消息

通过此接口可进行海政通应用Ding渠道的消息发送。

:::tips

  • 接口名称(ApiName) :notice.prd.sendDingMessage
  • 所属区域(Region) :INTER
  • 需要鉴权 :否

:::

请求参数

参数字段说明类型必填备注
messages发送消息列表MessageSendVOY支持批量发送消息

MessageSendVO:

参数字段说明类型必填备注
messageTypeCode消息类型代码StringY传入通知中心创建的模板代码
channelCode渠道代码StringY传入通知中心DING消息渠道的应用渠道编码
receiverUidType接收人标识类型StringY默认为“USERID”
receiverUid接收人标识StringY接收人标识主要对应接收人标识类型,填写实际接收用户的标识,仅支持传入海政通用户ID
variables消息模板变量List<VariableVO>Y字段参考下表
extras额外参数JSONN通过以下发送可以动态指定发送人<br/>“extras”:<br/>{<br/>“channel”:{<br/>“senderId”:“XXX”<br/>}<br/>}

VariableVO:

参数字段说明类型必填备注
key变量名称StringY消息模板变量定义的KEY
value变量值StringY消息模板变量定义的Value,需要进行实际业务值替换

返回参数

参数字段说明类型必填备注
rejects消息拒绝发送信息列表List<MessageRejectDTO>Y拒绝发送消息列表,如果此列表不为空,则表示消息被拒绝发送
messageIds消息ID列表List<String>Y消息发送成功分配的消息ID,用于消息查询、跟踪

MessageRejectDTO:

参数字段说明类型必填备注
rejectCode拒绝代码StringY参考消息拒绝原因清单
rejectReason拒绝原因StringY参考消息拒绝原因清单
rejectMessage拒绝发送的消息MessageY参考消息入参

请求示例

可以仅传递部分请求参数。

json
{
    "messages": [
        {
            "messageTypeCode": "{消息模板代码}",
            "receiverUid": "{海政通用户ID}",
            "receiverUidType": "USERID",
            "channelCode": "{海政通DING消息渠道代码}",
            "variables": [
                {
                    "key": "RXR",
                    "value": "111"
                }
            ]
        }
    ]
}

成功响应

:::tips
条件 :请求参数合法

判断条件: success=true

:::

json
{
    "success": true,
    "code": null,
    "message": null,
    "data": {
        "rejects": [],
      	"messageIds": ["1381445818959134720"]
    }
}

:::tips
💡 注意,当消息rejects不为空时,则表示请求的消息中存在因消息校验不通过,被服务拒绝发送

:::

json
{
    "success": true,
    "code": null,
    "message": null,
    "data": {
        "rejects": [
            {
              	"rejectCode": "NOTICE-REJECT-1101",
                "rejectReason": "应用代码不能为空",
                "message": {
                      "appCode": "ONECODE",
                      "topicCode": "BSDT",
                      "messageTypeCode": "YYGHCGTZ",
                      "channelCode": "海政通DING消息渠道代码",
                      "receiverUid": "17789770704",
                      "receiverUidType": "USERID",
                      "sourceCode": "HNSRMYY",
                      "variables": [
                          {
                              "key": "JZR",
                              "value": "张三"
                          }
                    ]
                }
            }
        ]
    }
}

错误响应

:::tips
条件 :请求数据非法或服务器出现异常。

判断条件: success=false

:::

json
{
  	"success": false,
    "code": "SYSTEM-500"
    "data":null
}

消息附件上传接口

通过此接口上传消息附件。

:::tips

  • 接口名称(ApiName)
    • 生产:notice.prd.messageAttachmentUpload
    • 测试:notice.dev.messageAttachmentUpload
  • 所属区域(Region) :INTER
  • 需要鉴权 :否

:::

请求参数

参数字段说明类型必填备注
业务自定义附件Key1附件StringY
业务自定义附件Key2附件StringY

备注:参数类型为form-data,上传附件保存7天

返回参数

参数字段说明类型必填备注
fileId附件IDStringY
fileKey业务自定义附件KeyStringY
fileName附件名称StringY

请求示例

必须传递全部请求参数。

java
public void callUpload() {
    String ak = "${AK}";
    String sk = "${SK}";
    String api = "messageAttachmentUploadTest" // 生产为messageAttachmentUpload;
    String region = "INTER";
    String requestUrl = "http://api-one.digitalhainan.com.cn/apione";
    String mediaType = "multipart/form-data";//文档上方请求正文格式

    File file1 = new File("${上传文件路径}");
    byte[] fileByte1 = fileConvertToByteArray(file1);
    File file2 = new File("${上传文件路径}");
    byte[] fileByte2 = fileConvertToByteArray(file2);
    Map<String, AttachFile> attachFileMap = new HashMap<>();
    AttachFile attachFile1 = new AttachFile();
    attachFile1.setFileBytes(fileByte1);
    attachFile1.setFileName(file1.getName());
    attachFile1.setMediaType(MediaType.parse("application/octet-stream"));
    attachFileMap.put("${业务自定义附件Key1}", attachFile1);
    AttachFile attachFile2 = new AttachFile();
    attachFile2.setFileBytes(fileByte2);
    attachFile2.setFileName(file2.getName());
    attachFile2.setMediaType(MediaType.parse("application/octet-stream"));
    attachFileMap.put("${业务自定义附件Key2}", attachFile2);
    String response = invokeUpload(ak, sk, api, region, requestUrl, mediaType, attachFileMap);
}

/**
 * 接口请求
 *
 * @param ak              我的应用-我申请的功能-对应功能查看ak
 * @param sk              我的应用-我申请的功能-对应功能查看sk
 * @param apiName         接口api name
 * @param region          接口请求区域 INTRA(政务外网),INTER(政务互联网)
 * @param requestUrl      接口请求地址
 * @param mediaType       请求正文格式 默认application/json
 * @param attachFileMap   上传文件Map
 * @return 接口返回数据
 */
public static String invokeUpload(String ak,
                                  String sk,
                                  String apiName,
                                  String region,
                                  String requestUrl,
                                  String mediaType,
                                  Map<String, AttachFile> attachFileMap) {
    HttpParameters parameters = HttpParameters.builder()
    .api(apiName)
    .region(region)
    .mediaType(MediaType.parse(mediaType))
    .attachFileMaps(attachFileMap)
    .accessKey(ak)
    .secretKey(sk)
    .requestUrl(requestUrl)
    .build();
    System.out.println(JSONObject.toJSONString(parameters));
    //请求开发服务,获取response
    HttpReturn call = HttpCaller.getInstance().call(parameters);
    System.out.println(call.responseHttpStatus);
    System.out.println(call.getResponse());
    return call.getResponse();
}

成功响应

:::tips
条件 :请求参数合法

判断条件: success=true

:::

json
{
	"success": true,
	"code": null,
	"message": null,
	"data": {
		"attachments": [
			{
				"fileId": "00eacecfc37f4972bb94d4ef66cd98c6",
				"fileKey": "file1",
				"fileName": "11.txt"
			},
			{
				"fileId": "fc7b4df8d03f405eab2a4b3df7606d63",
				"fileKey": "file2",
				"fileName": "22.txt"
			}
		]
	}
}

错误响应

:::tips
条件 :请求数据非法或服务器出现异常。

判断条件: success=false

:::

json
{
    "success": false,
    "code": "NOTICE-1010",
    "message": "上传附件不能为空",
    "data": null
}

Last updated: