简体中文
    详细内容

    消息推送说明

    一、推送方式

    阿里巴巴开放平台向接入商推送实时的业务变更消息,保持数据的一致性以及同步,满足接入商业务需求,避免轮询。推送的数据消息,将以http post或者websocket的方式向该推送地址发起调用,把数据推送给接入商。接入商如果通过SDK方式接收消息,在成功收到后,SDK会自动发送回执,如果自己接收消息,则需要自行发送回执。接收失败时,消息中心会自动重发N次(一般3次)。如果还是失败,则将消息保存入库,接收方可通过补偿API来拉取接收失败的消息。失败消息一般保存7天,请及时拉走,否则消息会被丢弃。

    二、推送消息格式

    消息数据以Json格式发送,消息提供统一的模板;不同业务的消息,仅通过消息类型来区分,具体的业务消息内容,参考各个业务消息说明。

    1、消息模板字段说明

    属性
    类型
    说明
    备注
    msgId
    Number
    消息ID,消息唯一性标识
    如210239
    gmtBorn
    Number
    消息推送时间
    1970.1.1到现在的毫秒数
    data
    String
    具体推送的业务消息数据,json格式,字段说明,参考各个业务消息说明
    如{"key1":"value1"}
    userInfo
    String
    memberId
    1234567
    type
    String
    消息类型,每个业务消息都唯一对应一个类型,参考业务消息的类型定义
    ORDER_PAY
    extraInfo
    String
    扩展字段,暂未启用
    如{"key1":"value1"}
    消息模板json示例 
     {    "msgId": "12345",    "gmtBorn": "1392711616045",    "data": {        "key1": "value1"    },    "userInfo": "memeberId",    "type": "messageType" }

    2、业务消息字段示例说明

    示例:订单状态变化消息

    消息业务说明: 订单状态发生变化的消息推送
    消息类型: ORDER_STATUS_CHANGE
    业务消息内容:
    属性
    类型
    说明
    备注
    orderID
    Number
    订单产品ID

    lastStatus
    String
    上一次订单状态

    currentStatus
    String
    当前订单状态

    msgSendTime
    Date
    消息发送时间
    消息发送的时间
    userInfo
    String
    用户登录id
    卖家memberId
    消息内容示例
        message = {    "data": {        "currentStatus": "FINISH",        "lastStatus": "FUND_PROCESSING",        "orderChangeTime": "2015-06-24 19:33:26",        "orderId": "60020931694988"    },    "userInfo": "cn1803950",    "type": " ORDER_STATUS_CHANGE ", }

    三、推送通道说明

    1、httpCallback

    通道说明:
    http消息回调通道,isv提供一个http服务,配置url地址;开放平台采用短连接的方式调用http服务,推送消息
    推送协议说明:
    开放平台推送中心发送post请求,包含两个参数,编码格式统一为UTF-8,统一按照key/value格式推送,参数说明:
    参数键值
    参数值
    说明
    备注
    message
    消息的json串
    对接方获取这个参数的值,然后通过json的反序列化,就得到了消息模型
    如210239
    _aop_signature
    签名
    针对消息的一个签名,可防篡改
    1970.1.1到现在的毫秒数

    消息签名说明

    仅对消息内容进行签名计算,签名算法同开放平台的算法,内容是key+value(即message+json串)
    消息签名算法示例
    # key=message # value= message对应的json串 String[] datas = new String[1]; datas[0] = key + value; byte[] signature = SecurityUtil.hmacSha1(datas, toBytes(appSecretKey)); return encodeHexStr(signature); 

    http 推送POST请求示例:

    POST /pushMessage HTTP/1.1 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Connection: close Accept: */* User-Agent: NING/1.0 Content-Length: 248 message={"data":{"key":"value"},"gmtBorn":1527556000,"msgId":70299002,"type":"PRODUCT_PRODUCT_EXPIRE","userInfo":"CBU_MemberId"}&_aop_signature=65F2AA13AE9C9C9DFE8682EFB90B32F37CB01BE1

    推送成功说明

    isv收到消息之后,只要设置返回的response http status code =200就认为是消息消费成功; 如果http status code!=200,就认为是消息消费失败,推送中心后续会重试,默认重试3次

    2、websocket

    通道说明:
    websocket协议消息推送,isv提供一个websocket客户端(可集成SDK),主动连接到开放平台,并保持长连接;开放平台通过长连接推送消息,客户端消费完成后,需要主动确认消息消费完成(SDK可自动解决)
    推送协议说明:
    websocket协议类型
    含义说明
    备注
    CONNECT
    客户端发起建连请求
    客户端发起的长连接请求,http协议升级为websocket
    CONNECT_ACK
    服务端建连成功返回
    服务端websocket握手成功返回,双向确认链接
    HEARTBEAT
    客户端心跳
    每间隔30s发送一次心跳包
    SERVER_PUSH
    服务端消息推送(最关心的)
    客户端需要自定义业务逻辑,来处理推送的消息
    CONFIRM
    客户端消息消费成功确认
    消息消费成功标志,服务端依据此信息来判断
    CLOSE
    链接关闭

    SYSTEM
    服务端异常

    由于websocket协议复杂,强烈推荐使用SDK来集成,减少开发成本,不用关心连接维护,心跳等复杂问题,只需要处理消息的逻辑;后续会慢慢补充协议完整信息

    四、消息补偿API

    针对推送失败的消息,我们提供补偿API机制,让isv能够主动来查询失败消息列表,做一些补偿的逻辑。
    提供两种方式:

    1、游标式获取失败的消息列表:

    游标式获取失败的消息列表,获取的消息默认自动会做消费成功的确认。所以下次以相同条件调用获取的是剩下的数据,直至返回数据为空。
    游标式获取失败的消息列表API:
    https://www.cnsecc.com/doc_29486412.html

    2、查询式获取失败的消息列表:

    查询式获取发送的消息列表,获取的消息不会自动确认消费成功的状态,需要调用方手动调用确认api来确认。需注意,确认后,会影响分页返回的数据
    查询式获取失败的消息列表API:
    https://www.cnsecc.com/doc_29486420.html
    失败消息批量确认Api:
    https://www.cnsecc.com/doc_29486404.html


    seo seo