招乎订阅号开放接口

开发者认证

申请了订阅号后,外部商户系统需要搭建接收招乎推送数据的服务,并提供URL,然后在订阅号平台的开发者中心配置该URLtoken(由开发者任意填写、用于生成签名);

   验证URL有效性

开发者提交信息后,招乎将发送GET请求到填写的URL上,GET请求携带四个参数:signaturetimestampnonceechostr

开发者通过检验signature对请求进行校验。若确认此次GET请求来自招乎服务器,原样返回echostr参数内容,则招乎认为接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1. tokentimestampnonce三个参数值进行字典序排序;

2. 将三个参数字符串拼接成一个字符串进行sha1加密;

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于招乎系统。



 验证URL有效性成功后即接入生效,成为开发者。此后用户每次向订阅号发送消息、关注取消订阅号、或者产生自定义菜单点击事件时,推送相关消息到外部商户的填写的URL服务上。

示例

获取token

说明:

access_token是指定订阅号其它接口请求的唯一票据,订阅号调用各接口时都需使用access_token。access_token有效期为7200秒,重复获取将导致上次获取的access_token5分钟后失效

订阅号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在订阅号平台开发者中心获得,对应为应用ID及应用密钥。需要在订阅号平台维护IP白名单,只有在白名单里面的IP,根据AppID和AppSecret才能调用成功


协议:https
methodPOST
content-typeapplication/x-www-form-urlencoded
URLhttps://api.zh.cmbchina.com/auth/token?grant_type=client_credentials&client_id=appid&client_secret=appsecret
参数说明
对象是否必须说明
grant_type填写client_credentials
appid第三方用户唯一凭证,作为参数client_id的值
appsecret第三方用户唯一凭证密钥,作为参数client_secret的值
输出
对象是否必须说明
access_token(正常情况)获取到的凭证
expires_in(正常情况)凭证有效时间,单位:秒
errcode(异常情况)错误码 正确为0
errmsg(异常情况)错误描述


输出示例:

正常情况下,会返回下述JSON数据包给订阅号 http status 200

{

" errcode":"0"

"expires_in":7200,

"access_token":"175b3da4854e33a45497f3f2b3e4"

}


错误情况,JSON数据包示例如下(该示例为AppID无效错误)http status 200:

{" errcode":"40001"," errmsg":"client_idor client_secret error"}


查询openid接口


使用用户的小程序ID查询招乎用户当前订阅号下的openid

协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/user/query?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

expanduserid

小程序id

输出

对象

是否必须

说明

openid

(正常情况)

用户的openid

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述

发送请求json示例:

{

     "expanduserid":"expanduserid"

 }

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功"," openid ":" C7FC725ED8B4B0D46C2E0457E7AD519E "}

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}

单发送卡片消息

该接口可以发送自定义格式的消息,消息格式包含在content字段。

URLhttps://server:port/udfmsg/send?access_token=ACCESS_TOKEN

MethodPOST

Content   Typeapplication/json

输入

参数

是否必须

说明

openid

接收用户openid

msgtype

消息类型 udfmsg

content

自定义格式消息内容

description

自定义格式消息描述

jumpUrl

远程推送点击跳转链接

输出

errcode

错误编码

errmsg

错误描述

callid

发送成功消息id

请求示例:

{

   "openid":"OPENID",

     "msgtype":"udfmsg",

     "text":

{

         "description":"描述内容",

          "content":"卡片消息json(需要json转义)",

     "jumpUrl":"https://www.tmal.com"

   }

}

请求成功响应示例:

{

 "errcode": 0,

 "errmsg": "请求成功",

 "callid": "请求ID"

}

请求失败示例:

{

 "errcode": 40014,

 "errmsg": "不合法的access_token "

}

卡片消息自定义content内容约定模板格式为:

{

   Encrypt:,

   Body:{

           MsgTitle:,

        Description:,

        Content:{

             Version:,

          ShowArea:{

              DisplayStyle:,

              Title:,

              Summary:,

              TemplateType:,

              Trans:,

              Detail:,

              Response:,

          },

          GeneralData:{

                 Category,

                 NotifyAction

            }

        },

   }

}

content内容示例:

[{

"touser":"8E727A830472CF35CC5238A795661A81", //接收用户OpenID

"msgtype":"udfmsg",//消息类型

"text":{

"content":"{

\"Encrypt\":\"n\",

\"Body\":{

\"MsgTitle\":\"POS消费通知\",//必填,本地推送通知栏标题

\"Description\":\"您尾号0231的账户交易人民币50.00元\",//必填,本地推送通知栏描述

\"Content\":{

\"Version\":\"1\",

\"GeneralData\":{ //必填(兼容6.3以前版本)

\"SendTime\":\"20170317094805\",//发送时间,必填且为14位数字(兼容7.0以前版本)

\"Category\":\"1\", //必填(兼容6.3以前版本)

\"NotifyAction\":\"1\" //必填(兼容6.3以前版本)

},

\"DetailLink\":{

\"Text\":\"xxxx\",//查看详情文本,无则为查看详情

\"URL\":\"xxxx\",//查看详情链接,没有则不展示按钮

\"Icon\":\"http://xxxx\"//图标支持PNG、JPEG格式图片,尺寸36x36

},

\"ShowArea\":{

\"DisplayStyle\":\"0\",//必填(兼容6.2以前版本);显示类型 0:传入 1:转出 2:更多 3:系统公告 4:理财日历 4.3以前版本用于标题图标的展示

\"Title\":{//必填

\"Text\":\"POS消费通知\",//必填,显示标题

\"Color\":\"#383838\"

},

\"Summary\":{//必填,摘要信息

\"Text\":\"您尾号0231的招行账户交易人民币50.00元\\n\", //必填

\"Color\":\"#383838\"

},

\"TemplateType\":\"2\",//显示模板,1:模板一 2:模板二 3:模板三,仅显示标题内容 4:模板四,显示标题、内容、详情; 默认使用模板一

\"Trans\":[{//交易信息,可为空

\"Text\":\"消费金额\",//必填

\"Color\":\"#929292\",

\"Align\":\"Center\"}, //必填

{\"Text\":\"¥50.00\"

,\"Color\":\"#383838\"

,\"Align\":\"Center\"}],

\"Detail\":[[{//必填,至少得有一行,交易明细,同一行支持多文本颜色设置,最多支持10行;(7.0以前版本规则)

\"Text\":\"交易时间:\"

,\"Color\":\"#929292\"},

{\"Text\":\"03月17日09:50\",

\"Color\":\"#383838\"}],

[{\"Text\":\"交易类型:\",

\"Color\":\"#929292\"},

{\"Text\":\"POS消费\"

,\"Color\":\"#383838\"}],

[{\"Text\":\"交易账户:\"

,\"Color\":\"#929292\"},

{\"Text\":\"尾号0231\"

,\"Color\":\"#383838\"}]

,[{\"Text\":\"交易金额:\",

\"Color\":\"#929292\"},

{\"Text\":\"人民币50.00元\",

\"Color\":\"#383838\"}]],

\"Hyperlinks\":[//消息内容中的链接区域,仅支持单条展示,可整体为空

{\"Icon\":\"http://xxxx\",//必填,图标支持PNG、JPEG格式图片,尺寸28x28

\"Text\": \"\",//必填,显示文本, 中文字符长度不超过16个

\"Color\": \"#0000ff\",//可为空,默认#5995EF

\"URL\":\"http://xxxx\" //必填,跳转链接

}],

\"Response\": [ { //营销尾巴链接,最多支持3个,节点必须要有,如无数据可设置为空数组

\"Remark\": { //必填

\"Text\": \"借”基”生财,赢得精彩\", //必填

\"Color\": \"#0000ff\" },

\"Action\": { //必填

\"Text\": \"\",  //必填

\"Color\": \"#0000ff\",

\"Jump\":\"http://CMBLS/FunctionJump?id=1&action=gofuncid&funcid=6051001&cmb_app_trans_parms_start=here&SRCKEY=012\"' //必填

}

} ],

\"FuncButton\":[//营销功能按钮区最多3个,可整体为空

{\"Icon\":\"http://xxxx\",//图标支持PNG、JPEG格式图片,尺寸36x36

      \"Text\":\"xxxx\",//必填,显示文本, 功能名称长度不超过4个

\"URL\":\"http://xxxx\" //必填,跳转链接

}],

\"Banner\":[//图片banner,仅支持单个图片展示,可整体为空

{\"Source\":\"http://xxxxx/xxx.jpg\",// 必填,图片支持PNG、JPEG格式图片,尺寸690x176

\"URL\":\"http://xxx\" //必填,跳转链接

}]

}// ShowArea

}// Content

}// Body

}",// content

"description":"您尾号0231的招行账户交易人民币50.00元",//远程推送通知栏内容

"jumpUrl":”http://CMBLS/FunctionJump?id=1&action=gofuncid&funcid=6051001&cmb_app_trans_parms_start=here&SRCKEY=012” //远程推送点击跳转链接

}// text

}]



备注:

a)  MsgTitle:通知栏标题

b)  Description:通知栏描述

c)  Title:消息正文标题,其中Text为显示的文字,Color为显示的文字的颜色。(其他的 Text Color 同理)

d)  Summary:消息正文摘要

e)  DetailLink:点卡片消息查看详情配置,Text 可以为空,空的话默认“查看详情”,URL跳转的地址

f)  TemplateType:是卡片模板类型编号,目前有4种模板,值为1234;区别在于显示样式的不同

g)  Trans:仅模板2中使用,显示特殊内容字段

h)  Detail :表示的要显示的消息正文内容

i)  Detail :每个Datas 表示的是显示的每一行信息,Detail中可以有多个Datas,每一行按照从上往下的顺序显示

j)  Datas:每个 Data 表示的是每一列要显示的信息,Datas中可以有多个Data

k)  跳转链接内容按照以下格式进行指定:

CMBMobileBank://FunctionJump/?action=xxx&menuid=xxx&funcid=xxx&data=xxx&needlogin=true&loginmode=ywt

FunctionJump包含的参数意义(参数由手机银行解析,招乎只需根据Jump链接跳转即可):

参数名

描述

action

要跳转的动作,包括四种跳转类型:

·gomenuid:根据menuid来跳转。

·gofuncid:根据funcid来跳转。

·gofuncentry:跳转到预配置的FuncEntryUrl,传递的参数在data中定义。

·none:只唤起APP进入首页,不进行跳转操作。

menuid

actiongomenuid时有效,指定跳转的目的菜单节点id

funcid

actiongofuncid时有效,指定跳转的目的功能项id

data

指定跳转时加传的参数。

needlogin

取值true/false,用于显式指明是否需要登录,默认为false

·如果设置为true,则客户端先唤起登录界面,登录后再执行跳转。

·如果设置为为false,则无需登录,直接跳转。

loginmode

needlogintrue的时候读取,取值为A/C/D,分别对应一卡通、信用卡、一网通,指示首选的登录类型。

l)  Response:必填兼容历史客户端版本 "Response":[]

消息展示示例:

模版消息类型为1templateType=1

//模板1



模版1 报文

{"openid":"B1AA7B8947335448C17A3CC8324AD649",

"msgtype":"udfmsg",

"text":{

"content":"{\"Encrypt\":\"n\",\"Body\":{\"MsgTitle\":\"POS消费通知\",\"Description\":\"您尾号0231的招行账户交易人民币50000.00\",\"Content\":{\"Version\":\"1\",\"GeneralData\":{\"SendTime\":\"20170317094805\",\"Category\":\"1\",\"NotifyAction\":\"1\"},\"DetailLink\":{\"Text\":\"0看详情\",\"URL\":\"https://www.163.com\"},\"ShowArea\":{\"DisplayStyle\":\"0\",\"Title\":{\"Text\":\"POS消费通知51221\",\"Color\":\"#383838\"},\"Summary\":{\"Text\":\"您尾号0231的招行账户交易5555人民币50000.00\",\"Color\":\"#383838\"},\"TemplateType\":\"1\",\"Trans\":[{\"Text\":\"支出金额\",\"Color\":\"#929292\",\"Align\":\"Left\"},{\"Text\":\"¥500000.00\",\"Color\":\"#383838\",\"Align\":\"Left\"}],\"Detail\":[[{\"Text\":\"交易时间:\",\"Color\":\"#929292\"},{\"Text\":\"031709:50\",\"Color\":\"#383838\"}],[{\"Text\":\"交易类型:\",\"Color\":\"#929292\"},{\"Text\":\"POS消费\",\"Color\":\"#383838\"}],[{\"Text\":\"交易账户:\",\"Color\":\"#929292\"},{\"Text\":\"尾号0231\",\"Color\":\"#383838\"}],[{\"Text\":\"备注:\",\"Color\":\"#929292\"},{\"Text\":\"设备卡号1970:一闪通,中国银CHN29000 CHINAUNIONPAY\",\"Color\":\"#383838\"}]],\"Response\":[]}}}

}",

"description":"您尾号0231的招行账户交易人民币50.00",

"jumpUrl":"https://www.tmal.com"

}}

模版消息类型为2templateType=2


//模板2

{

"openid":"B1AA7B8947335448C17A3CC8324AD649",

"msgtype":"udfmsg",

"text":{

"content":"{\"Encrypt\":\"n\",\"Body\":{\"MsgTitle\":\"POS消费通知\",\"Description\":\"您尾号0231的招行账户交易人民币50000.00\",\"Content\":{\"Version\":\"1\",\"GeneralData\":{\"SendTime\":\"20170317094805\",\"Category\":\"1\",\"NotifyAction\":\"1\"},\"DetailLink\":{\"Text\":\"0看详情\",\"URL\":\"https://www.163.com\"},\"ShowArea\":{\"DisplayStyle\":\"0\",\"Title\":{\"Text\":\"POS消费通知51221\",\"Color\":\"#383838\"},\"Summary\":{\"Text\":\"您尾号0231的招行账户交易5555人民币50000.00\",\"Color\":\"#383838\"},\"TemplateType\":\"2\",\"Trans\":[{\"Text\":\"支出金额\",\"Color\":\"#929292\",\"Align\":\"Left\"},{\"Text\":\"¥500000.00\",\"Color\":\"#383838\",\"Align\":\"Left\"}],\"Detail\":[[{\"Text\":\"交易时间:\",\"Color\":\"#929292\"},{\"Text\":\"031709:50\",\"Color\":\"#383838\"}],[{\"Text\":\"交易类型:\",\"Color\":\"#929292\"},{\"Text\":\"POS消费\",\"Color\":\"#383838\"}],[{\"Text\":\"交易账户:\",\"Color\":\"#929292\"},{\"Text\":\"尾号0231\",\"Color\":\"#383838\"}],[{\"Text\":\"备注:\",\"Color\":\"#929292\"},{\"Text\":\"设备卡号1970:一闪通,中国银CHN29000CHINA UNIONPAY\",\"Color\":\"#383838\"}]],\"Response\":[]}}}

}",

"description":"您尾号0231的招行账户交易人民币50.00",

"jumpUrl":"https://www.tmal.com"

}

}

模版消息类型为3 templateType=3


模板3

{"openid":"B1AA7B8947335448C17A3CC8324AD649",

"msgtype":"udfmsg",

"text":{

"content":"{\"Encrypt\":\"n\",\"Body\":{\"MsgTitle\":\"POS消费通知\",\"Description\":\"您尾号0231的招行账户交易人民币50000.00\",\"Content\":{\"Version\":\"1\",\"GeneralData\":{\"SendTime\":\"20170317094805\",\"Category\":\"1\",\"NotifyAction\":\"1\"},\"DetailLink\":{\"Text\":\"0看详情\",\"URL\":\"https://www.163.com\"},\"ShowArea\":{\"DisplayStyle\":\"0\",\"Title\":{\"Text\":\"账本成员通知\",\"Color\":\"#383838\"},\"Summary\":{\"Text\":\"黄小五已经接收您的邀请,成功加入账本《我们一起旅行的日子》\",\"Color\":\"#383838\"},\"TemplateType\":\"3\",\"Trans\":[{\"Text\":\"支出金额\",\"Color\":\"#929292\",\"Align\":\"Left\"},{\"Text\":\"¥500000.00\",\"Color\":\"#383838\",\"Align\":\"Left\"}],\"Detail\":[[{\"Text\":\"交易时间:\",\"Color\":\"#929292\"},{\"Text\":\"031709:50\",\"Color\":\"#383838\"}],[{\"Text\":\"交易类型:\",\"Color\":\"#929292\"},{\"Text\":\"POS消费\",\"Color\":\"#383838\"}],[{\"Text\":\"交易账户:\",\"Color\":\"#929292\"},{\"Text\":\"尾号0231\",\"Color\":\"#383838\"}],[{\"Text\":\"备注:\",\"Color\":\"#929292\"},{\"Text\":\"设备卡号1970:一闪通,中国银CHN29000CHINA UNIONPAY\",\"Color\":\"#383838\"}]],\"Response\":[]}}}

}",

"description":"您尾号0231的招行账户交易人民币50.00",

"jumpUrl":"https://www.tmal.com"

}

}

模版消息类型为4templateType=4

模板4

{"openid":"B1AA7B8947335448C17A3CC8324AD649",

"msgtype":"udfmsg",

"text":{

"content":"{\"Encrypt\":\"n\",\"Body\":{\"MsgTitle\":\"POS消费通知\",\"Description\":\"您尾号0231的招行账户交易人民币50000.00\",\"Content\":{\"Version\":\"1\",\"GeneralData\":{\"SendTime\":\"20170317094805\",\"Category\":\"1\",\"NotifyAction\":\"1\"},\"DetailLink\":{\"Text\":\"0看详情\",\"URL\":\"https://www.163.com\"},\"ShowArea\":{\"DisplayStyle\":\"0\",\"Title\":{\"Text\":\"留言入选精华\",\"Color\":\"#383838\"},\"Summary\":{\"Text\":\"您在以下文章的留言被作者选为精华啦\",\"Color\":\"#383838\"},\"TemplateType\":\"4\",\"Trans\":[{\"Text\":\"支出金额\",\"Color\":\"#929292\",\"Align\":\"Left\"},{\"Text\":\"¥500000.00\",\"Color\":\"#383838\",\"Align\":\"Left\"}],\"Detail\":[[{\"Text\":\"资讯标题:\",\"Color\":\"#929292\"},{\"Text\":\"招银资管评论,中国经济前后的中国经济前后的中国经济前后的中国经济前后的\",\"Color\":\"#383838\"}]],\"Response\":[]}}}

}",

"description":"您尾号0231的招行账户交易人民币50.00",

"jumpUrl":"https://www.tmal.com"

}

}


单发送文本消息


协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/custom/send?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

openid

用户openid

msgtype

值为 text

content

文本内容




输出

对象

是否必须

说明

callid

发送的消息ID

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述

发送请求json示例:

{

     "msgtype": "text",

     "text": {

       "content":   "customMsgText!"

     },

     "openid":"C7FC725ED8B4B0D46C2E0457E7AD519E"

}

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功","callid": "20190219154816374004910012083873" }

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}


单发url图文消息


协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/custom/send?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

openid

用户openid

msgtype

值为 news

title

图文标题,通知栏显示内容

description

图文摘要

url

文本内容

picid

封面图片ID

articles

图文集,最多10个子图文

输出

对象

是否必须

说明

callid

发送的消息ID

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述


发送请求json示例:

{

     "msgtype": "news",

     "news":{

       "articles": [

        {

            "title":"Happy   Day Group",

            "description":"Is   Really A Happy Day",

              "url":"http://itchz.cmbchina.cn/",

            "picid":"24729"

        }, {

            "title":"Happy   Day2",

            "description":"Is   Really A Happy Day2",

              "url":"http://m.cmbchina.com/",

            "picid":"24729"

        }

        ]

     },

     "openid": "C7FC725ED8B4B0D46C2E0457E7AD519E"

}

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功","callid": "20190219154816374004910012083873" }

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}



单发图片消息


协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/custom/send?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

openid

用户openid

msgtype

值为 image

media_id

图片ID,素材接口上传图片获得




输出

对象

是否必须

说明

callid

发送的消息ID

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述


发送请求json示例:

{

     "openid":"C7FC725ED8B4B0D46C2E0457E7AD519E",

     "msgtype":"image",

     "image":{

             "media_id":"MEDIA_ID"

     }

}    

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功","callid": "20190219154816374004910012083873" }

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}



单发语音消息


协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/custom/send?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

openid

用户openid

msgtype

值为voice

media_id

语音媒体ID,素材接口上传语音获得




输出

对象

是否必须

说明

callid

发送的消息ID

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述


发送请求json示例:

{

     "openid":"C7FC725ED8B4B0D46C2E0457E7AD519E",

     "msgtype":"voice",

     "voice":{

             "media_id":"MEDIA_ID"

     }

}    

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功","callid": "20190219154816374004910012083873" }

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}



群发url图文消息


协议:https

methodPOST

content-typeapplication/json

URLhttps://server:port/mass/send?access_token=ACCESS_TOKEN

输入

对象

是否必须

说明

openids

用户openid 列表

msgtype

值为 news

title

图文标题,通知栏显示内容

description

图文摘要

url

文本内容

picid

封面图片ID

articles

图文集,最多10个子图文




输出

对象

是否必须

说明

callid

发送的消息ID

errcode

(异常情况)

错误类别

errmsg

(异常情况)

错误描述


发送请求json示例:

{

     "openids":[

"C7FC725ED8B4B0D46C2E0457E7AD519E",

"C7FC725ED8B4B0D46C2E0457E7AD519B"],

   "msgtype":   "news",

     "news":{

       "articles": [

        {

            "title":"Happy   Day 1",

            "description":"Is   Really A Happy Day",

            "url":"http://m.cmbchina.com/",

            "picid":"24729"

        }, {

            "title":"Happy   Day2",

            "description":"Is   Really A Happy Day2",

              "url":"http://m.cmbchina.com/",

            "picid":"24729"

        }

        ]

     }

}    

响应成功输出示例

httpStatus:200

{"errcode":0,"errmsg":"请求成功","callid": "20190219154816374004910012083873" }

响应失败输出示例

httpStatus:200

{"errcode":50055,"errmsg":"error   msg"}



外部商户系统接收推送接口

验证开发者URL

招乎订阅号接口请求开发者URL,不论是GET请求还是POST请求,都会带上4个参数:signaturetimestampnonceechostr   signature=(SHA-1){param1+param2+param3}

算法:SHA-1,算法密钥:开发者URL配置的时候配置的token

param1+param2+param3表示timestampnoncetoken三个参数根据字符串升序排列后的字符串合并操作

protected void doGet(HttpServletRequest req,   HttpServletResponse resp)

throws ServletException, IOException {

       // TODO   Auto-generated method stub

       String timestamp   = req.getParameter("timestamp");

       String nonce   = req.getParameter("nonce");

       String   signature = req.getParameter("signature");

       String   echostr = req.getParameter("echostr");

          String[] params = {token, timestamp, nonce};

         Arrays.sort(params); // TOKEN的检验是根据这三个参数的字符串升序排列后SHA1算法结果

       String   encrypt = SHA1(params[0] + params[1] + params[2]);   // SHA1算法

         ServletOutputStream print = resp.getOutputStream();

if(StringUtils.isEmpty(signature)){

             print.write("error".getBytes("utf-8"));

}else{

if(!encrypt.equals(signature)){

                 print.write("error".getBytes("utf-8"));

}else{

                 print.write(echostr).getBytes("utf-8"));

}

}

}

private void SHA1(String decrypt)

throws ServletException, IOException {

       // TODO   Auto-generated method stub

try {

             MessageDigest digest = MessageDigest.getInstance(“SHA-1”);

             Digest.update(decrypt.getBytes());

             byte[] messageDigest = digest.digest();

             StringBuffer buffer = new StringBuffer();

for ( int i = 0; i < messageDigest.length; i++) {

                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);

if( shaHex.length() < 2 )

                    hexString.append(0);

}

                 hexString.append(shaHex);

}

             return buffer.toString();

}catch(Exception   e){

             e.printStacktrace();

}

         return “”;

}


接收关注、取消关注事件

用户在关注与取消关注订阅号时,订阅号会把这个事件以json格式推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。

招乎在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次

假如服务器无法保证在五秒内处理并回复,可以直接回复空串,招乎不会对此作任何处理,并且不会发起重试。


关注/取消关注事件

输入

对象

是否必须

说明

ToUserName

开发者订阅号号ID

FromUserOpenId

用户的openid

CreateTime

消息创建时间(整型)

MsgType

event

Event

事件类型,subscribe(订阅)unsubscribe(取消订阅)


接收普通消息

    当普通订阅号用户向订阅账号发消息时,招乎将POST消息的json数据包到开发者填写的URL上。各消息类型的推送json数据包结构如下:

招乎在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次

假如服务器无法保证在五秒内处理并回复,可以直接回复空串,招乎不会对此作任何处理,并且不会发起重试。

接收普通消息

消息上行(文本)

对象

是否必须

说明

ToUserName

开发者订阅号号ID

FromUserOpenId

用户的openid

CreateTime

消息创建时间(整型)

MsgType

text

Content

文本消息内容

MsgId

消息id64位整型

消息上行(图片)

对象

是否必须

说明

ToUserName

开发者订阅号号ID

FromUserOpenId

用户的openid

CreateTime

消息创建时间(整型)

MsgType

image

PicUrl

图片链接

MediaId

图片消息媒体id,可以调用多媒体文件下载接口拉取数据。

MsgId

消息id64位整型

消息上行(语音)

对象

是否必须

说明

ToUserName

开发者订阅号号ID

FromUserOpenId

用户的openid

CreateTime

消息创建时间(整型)

MsgType

语音为voice

MediaId

语音消息媒体id,可以调用多媒体文件下载接口拉取数据。

Format

语音格式,如amr

MsgId

消息id64位整型