NET完成乐乎粉丝服务平台接口

【作品摘要】
Senparc.Weixin.MP就算是微信公众号的SDK,但鉴于易信公众号和新浪乐乎粉丝服务平台也提供了微信包容接口,所以也可以使用其便捷落成相应的服务,当然腾讯网由于与微信存在差距,即使不转移原始SDK,则需要对有些地点开展调整。本文使用Senparc.Weixin.MP连忙完成新浪今日头条粉丝服务平台的接口。

 

【小说索引】

  1. 和讯博客园粉丝服务平台接口说明
  2. Senparc.Weixin.MP使用介绍
  3. 对此和讯特有事件的拍卖

 

【一、知乎今日头条粉丝服务平台接口表明】

关于怎么申请今日头条网易粉丝服务平台就不详细介绍了,蓝V认证后就足以利用粉丝服务平台了,尽管必要运用支付方式调用接口的话,还必要在天涯论坛开放平台创设一个应用,类型接纳“微服务应用”->“粉丝服务平台”,待应用注册好后,就可以收获到应用的AppKey和AppSecret了。然后在天涯论坛的“管理要旨”->“粉丝服务”->“高级成效”中得以选取安装为开发形式,与微信公众号分歧的是,微信在运用支付情势时要求自定义Token并在证实音信时与其他参数放置一起创办签名Signature,而和讯在动用支付形式时索要填写刚才创制的应用的AppKey,然后创设Signature时使用的是对应的AppSecret。在率先次设置博客园粉丝服务平台时,搜狐会对安装的服务器地址进行表明,即经过GET情势传入echostr参数,然后你须求将参数重回出来,当然你也可以对其来源真伪举行验证。

今日头条粉丝服务平台的管制界面与微信公众号大致等同,连图标都酷似。粉丝服务平台与微信的群众号也丰硕接近,底部菜单,新闻事件推送等等都是同一的;与微信比较,在推送的新闻中越发平素回到今日头条用户的uid,而不是像微信一样只回去对于近日选用唯一的OpenID。

对于刚布署好的粉丝服务平台,默许使用的音信推送接口是JSON类型的,不过很亲密的是,和讯也提供了万分微信的XML接口,假诺原先开发过微信公众号的话,可以极大程度地复用代码。若是急需切换差距的格式,请参考 http://open.weibo.com/wiki/Eps/push/set_format
那些文档,须要将access_token和format=xml三个参数POST到接口中,看起来很复杂,其实完结起来很粗略,自己写一个或者找一个能POST参数的次序即可;而access_token也不像微信一样要求经过OAuth2.0去获得,而是在知乎的粉丝服务平台的军事管制页面中直接显示(有效期一年),如下图。

图片 1

而外,自定义菜单接口也与微信的近乎,同样是流传上述的access_token,以及将菜单的JSON代码传入menus参数即可创立菜单。以下重点介绍音讯和事件推送那些比较基本的情节。

 

【二、Senparc.Weixin.MP使用介绍】

Senparc.Weixin.MP是一个基于FreeBSD的开源的微信公众平台SDK,官方网站是:http://weixin.senparc.com,GitHub是:http://github.com/JeffreySu/WeiXinMPSDK。同时,在NuGet上也提供了披露版,能够很便利的运用NuGet管理。除此之外,小编也有一份官方的求证文档,http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

微博的粉丝服务平台与微信公众号一样,对于用户发送的内容以及点击菜单等的风浪都会推送到粉丝服务平台开发者情势中装置的地点。与微信一模一样,对于第一次验证地址使用的是GET请求格局,对于以后的推送使用的都是POST情势。

对于每一回请求,首先须求表达来源的真假,Senparc.Weixin.MP已经将该作用封装在CheckSignature类中,例如利用HttpHandler的话可以向来利用如下代码检查来源是否可行:

String signature = Request.QueryString["signature"];
String timestamp = Request.QueryString["timestamp"];
String nonce = Request.QueryString["nonce"];
Boolean isRight = CheckSignature.Check(signature, timestamp, nonce, "APP_SECRET");

当验证来源有效后,即可使用Senparc.WeiXin.MP的MessageHandler来达成对新闻的拍卖,日常大家须求继续该类完毕自定义的过来,例如以下代码能够将装有用户发送的新闻都过来“默许回复音信”:

 1 public class WeiboMessageHandler : MessageHandler<MessageContext>
 2 {
 3     private ResponseMessageText responseMessage;
 4 
 5     public WeiboMessageHandler(Stream inputStream)
 6         : base(inputStream)
 7     {
 8         this.responseMessage = this.CreateResponseMessage<ResponseMessageText>();
 9     }
10 
11     public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
12     {
13         this.responseMessage.Content = "默认回复消息";
14         return responseMessage;
15     }
16 }

然后我们可以在HttpHanlder中经过如下代码调用MessageHandler,获取处理后的结果并出口:

1 if (String.Equals("POST", Request.HttpMethod.ToUpperInvariant()))//POST方法进行回复信息
2 {
3     WeiboMessageHandler messageHandler = new WeiboMessageHandler(Request.InputStream);
4     messageHandler.Execute();
5 
6     Response.Output.Write(messageHandler.ResponseDocument.ToString());
7 }

除外,在此起彼伏的MessageHandler中,还足以重载以下形式已毕不相同的听从:

1、IResponseMessageBase OnTextRequest(RequestMessageText
requestMessage):文字信息
2、IResponseMessageBase On伊夫ntRequest(IRequestMessage伊芙ntBase
requestMessage):事件音信
3、IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click
requestMessage):菜单点击事件音讯
4、IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View
requestMessage):菜单点击链接音讯
5、IResponseMessageBase
OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe
requestMessage):用户订阅事件新闻
6、IResponseMessageBase
OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe
requestMessage):用户裁撤订阅事件新闻

比如说在种种requestMessage中都可以获取FromUserName,对于微信是不得不有限支持每个应用内唯一的OpenID,而在腾讯网中则是用户的uid。对于文字音讯,requestMessage中有Content属性可以取得用户发送的文字内容,并依据用户发送的差别内容重返分歧的结果;对于事件新闻有伊夫nt属性可以博得事件类型;对于菜单点击事件和链接音信,则有伊芙ntKey属性可以分别代表菜单事件名称和点击菜单后跳转的Url地址,越发是对于点击事件,可以根据不一致的伊芙ntKey重回差别的内容;而在用户订阅和注销订阅的措施中可过去祥和的数据库中写入有关标记。除了可以重载上述的不二法门外,还有许多办法可以重载,在那就不一一介绍了,对于尚未独自处理的音讯(如没有重载相应措施或在其他地点开展拍卖),则默认会再次回到DefaultResponseMessage中的音信。

亟待表明的是,在天涯论坛粉丝服务平斯科普里,对于用户发送的新闻,唯有Text、Image、Voice和Position(Location)四体系型,而没有Video和Link二种档次;而对此事件新闻,与微信同样的关于注(subscribe)、废除关切(unsubscribe)、扫描二维码(subscribe或SCAN)以及菜单点击事件(CLICK)和菜单点击链接(VIEW)二种,没有微信的开拓聊天窗口自动上报地理地点新闻的轩然大波(LOCATION),然则多了用户关切(follow)和撤回关切(unfollow)八个事件。

 

【三、对于搜狐特有事件的处理】

Senparc.WeiXin.MP拔取了重载的情势使得分外不难就能兑现微信公众号,可是微博和微信在推送的音讯方面有着出入。对于今日头条少的而言,倒无所谓,但对此微鲍比(Bobby)微信多的三个事件(关心和废除关切)就必要做额外的拍卖了。当然修改Senparc.WeiXin.MP的源代码是一种方案,但对此使用NuGet管理依旧不想对本来代码进行改动时,需要使用以下的措施。

鉴于Senparc.WeiXin.MP本身不帮衬follow和unfollow类型,所以通过MessageHandler中的RequestMessage或者On伊夫(Eve)ntRequest方法中的requestMessage都得到不到科学的伊夫nt属性,其伊夫nt属性始终为Enter,即使大家不对此举办处理的话Senparc.WeiXin.MP也会默许会按Enter事件举行拍卖。所以大家要求从原有数据中读取新闻,例如如下代码:

 1 public override IResponseMessageBase OnEventRequest(IRequestMessageEventBase requestMessage)
 2 {
 3     String key = this.RequestDocument.Root.Element("Event").Value.ToLowerInvariant();
 4 
 5     switch (key)
 6     {
 7         case "follow"://关注
 8             return this.OnEvent_FollowRequest(requestMessage);
 9         case "unfollow"://取消关注
10             return this.OnEvent_UnfollowRequest(requestMessage);
11     }
12 
13     //其他事件处理代码
14 
15     return base.OnEventRequest(requestMessage);
16 }
17 
18 public IResponseMessageBase OnEvent_FollowRequest(IRequestMessageEventBase requestMessage)
19 {
20     //处理用户关注事件
21 
22     return this.responseMessage;
23 }
24 public IResponseMessageBase OnEvent_UnfollowRequest(IRequestMessageEventBase requestMessage)
25 {
26     //处理用户取消关注事件
27 
28     return this.responseMessage;
29 }

自然,对于Senparc.WeiXin.MP的老版本,RequestMessage伊夫(Eve)ntBase的接续关系出现了一个不当(RequestMessage伊芙(Eve)ntBase本应该达成IRequestMessage伊芙ntBase但却尚未得以完毕)。当事件类型系统不识别时,执行MessageHanlder的Execute()会发出空指针错误,更新到最新的7.0.18及其后的版本即可解决该问题。

 

【参考链接】

  1. 粉丝服务平台 –
    博客园API:http://open.weibo.com/wiki/%E7%B2%89%E4%B8%9D%E6%9C%8D%E5%8A%A1%E5%B9%B3%E5%8F%B0

相关文章