新普金娱乐网址


老家四合院发生了之灵异事件

天文骑行在日光海岸

.NET实现微博粉丝服务平台接口

  • 九月 11, 2018
  • 地理
  • 没有评论

率先篇博客,简单的发端个头吧。希望自己力所能及坚持不懈记录。一般呀情形什么人得这样的需为,伐木的光头强大哥说咱俩以深山老林里,没网的什么,地图就是手机本地duang的加载一下咔嚓。那么Server啊就使丢丢掉。丢掉手表丢掉外套,丢掉背包再次丢唠叨,咳咳,跑题了。来看望具体步骤吧,非常简单但详细。

【文章摘要】
Senparc.Weixin.MP虽然是微信公众号的SDK,但由易信公众号以及初浪微博粉丝服务平台也提供了微信兼容接口,所以呢堪下其便捷实现相应的劳务,当然微博由于和微信在出入,如果非转原始SDK,则要针对部分地方开展调整。本文使用Senparc.Weixin.MP快速实现新浪微博粉丝服务平台的接口。

  1. 制切片的数据核心信息如下:

 

图层数据信息:

【文章索引】

地理坐标系:  GCS_WGS_1984

  1. 乍浪微博粉丝服务平台接口说明
  2. Senparc.Weixin.MP使用介绍
  3. 于微博特有事件的处理

基准面:          D_WGS_1984

 

本初子午线:              Greenwich

【一、新浪微博粉丝服务平台接口说明】

角度单位:     Degree

关于怎么申请新浪微博粉丝服务平台就非详细介绍了,蓝V认证后虽可以用粉丝服务平台了,如果要使用支付模式调用接口的话,还欲在微博开放平台创建一个用到,类型选择“微服务应用”->“粉丝服务平台”,待下注册好后,就得得到到用之AppKey和AppSecret了。然后以微博之“管理中心”->“粉丝服务”->“高级功能”中好选安装为开销模式,与微信公众号不同的是,微信在采用支付模式时欲从定义Token并于说明信息不时以及另参数放置一起创造签名Signature,而微博于用支付模式时需填写刚才创建的应用的AppKey,然后创建Signature时使用的凡对应的AppSecret。在第一差设置微博粉丝服务平台时,微博会对安装的服务器地址进行求证,即透过GET方式传入echostr参数,然后您得以参数返回下,当然你吗可以针对其根源真伪进行认证。

数据框信息:

微博粉丝服务平台的军事管制界面与微信公众号几乎同一,连图标都酷似。粉丝服务平台与微信的万众号吧酷类似,底部菜单,消息事件推送等等都是相同的;与微信相比,在推送的信息遭愈发直接回微博用户之uid,而无是诸如微信同样才回对于眼前采用唯一的OpenID。

GCS_WGS_1984

对正布置好的粉丝服务平台,默认使用的音讯推送接口是JSON类型的,不过那个近的凡,微博为提供了相当微信的XML接口,如果原本开发过微信公众号的话,可以大幅度程度地复用代码。如果用切换不同之格式,请参考 http://open.weibo.com/wiki/Eps/push/set_format
这个文档,需要拿access_token和format=xml两只参数POST到接口中,看起格外复杂,其实实现起来很简单,自己写一个要么找一个能POST参数的程序即可;而access_token也非像微信同样需要通过OAuth2.0错过取得,而是于微博的粉丝服务平台的管制页面中一直展示(有效期一年),如下图。

WKID: 4326 权限: EPSG

地理 1

2.安装的缓存方式如下:(缓存切片方案ArcGIS
online/Bing/google),缓存级别10-16;高级设置:切片原点默认,存储格式松散型EXPLODED。 

除却,自定义菜单接口也和微信的类似,同样是流传上述的access_token,以及以菜单的JSON代码传入menus参数即可创建菜单。以下重点介绍消息和波推送者比较基本的内容。

地理 2

 

 

【二、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 OnEventRequest(IRequestMessageEventBase
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属性可以得到用户发送的字内容,并依据用户发送的不等内容返回不同的结果;对于事件信息产生Event属性可以收获事件类;对于菜单点击事件和链接消息,则闹EventKey属性可以独家代表菜单事件名称及点击菜单后跳转的Url地址,尤其是对于点击事件,可以因不同之EventKey返回不同的情;而以用户订阅和撤销订阅的法门吃不过往好之数据库被写副有关标记。除了可重载上述的道外,还有多办法好重载,在马上即不一一介绍了,对于无独自处理的信(如无重载相应措施或者当旁地方开展处理),则默认会返回DefaultResponseMessage中之信息。

 

消征的凡,在微博粉丝服务平台中,对于用户发送的音信,只有Text、Image、Voice和Position(Location)四栽类型,而并未Video和Link两种植类型;而于事件信息,与微信一模一样的关于流动(subscribe)、取消关注(unsubscribe)、扫描二维码(subscribe或SCAN)以及菜单点击事件(CLICK)和菜单点冲击链接(VIEW)几栽,没有微信的开辟聊天窗口自动上报地理位置信息的事件(LOCATION),但是大多矣用户关注(follow)和撤回关注(unfollow)两个事件。

 

 

 

【三、对于微博特有事件之拍卖】

地理 3

Senparc.WeiXin.MP采用了重载的方让非常简单就能够实现微信公众号,但是微博与微信在推送的信方面有出入。对于微博少的而言,倒无所谓,但对于微博比微信多的星星点点只事件(关注以及收回关注)就需要举行额外的拍卖了。当然修改Senparc.WeiXin.MP的源代码是同一种植方案,但于下NuGet管理还是无思对本来代码进行改动时,需要利用以下的方。

3.揭晓片服务前先分析一下结实:(无不当)

是因为Senparc.WeiXin.MP本身不支持follow和unfollow类型,所以经过MessageHandler中之RequestMessage或者OnEventRequest方法中的requestMessage都赢得不至是的Event属性,其Event属性始终为Enter,如果我们不对此进行拍卖的话Senparc.WeiXin.MP也会默认会按Enter事件进行拍卖。所以我们得从老数据中读取信息,例如如下代码:

地理 4 

 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 }

4.通告得后可登录ArcGIS
server查看缓存的有关消息或在该地的缓存文件夹arcgiscache中查缓存的音:

自然,对于Senparc.WeiXin.MP的始终版,RequestMessageEventBase的延续关系出现了一个荒唐(RequestMessageEventBase本应该实现IRequestMessageEventBase但却从未兑现)。当事件类系统不识别时,执行MessageHanlder的Execute()会发空指针错误,更新到新型的7.0.18与后的版即可缓解该问题。

 地理 5

 

5.缓存好的当地文件,文件命名方式是16进制:

【参考链接】

地理 6 

  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

6.测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ol加载ArcGIS本地切片</title>
    <link rel="stylesheet" href="ol.css">
    <script src="ol.js"></script>
</head>
<body>
<div id="map"></div>
<script type="text/javascript">
    // 设置寻甸县为地图中心,此处进行坐标转换, 把EPSG:4326的坐标,转换为EPSG:3857坐标,因为ol默认使用的是EPSG:3857坐标
    pos = ol.proj.transform([103.25, 25.56], 'EPSG:4326', 'EPSG:3857');
    //alert(pos);
    //创建地图
    var map = new ol.Map({
        view: new ol.View({
            center:pos,
            zoom: 10
        }),
        //添加open street map图层
        layers:[
            new ol.layer.Tile({
                source:new  ol.source.OSM()
            })
        ],
        //将地图添加到的map容器中
        target: 'map'
    });
    //给8位字符串文件名补0
    function zeroPad(num, len, radix) {
        var str = num.toString(radix || 10);
        while (str.length < len) {
            str = "0" + str;
        }
        return str;
    }
    // ol.source.XYZ添加瓦片地图的层
    var tileLayer = new ol.layer.Tile({
        source: new ol.source.XYZ({
            tileUrlFunction: function (tileCoord) {
                //alert(tileCoord[0] + " X= " + tileCoord[1] + " Y= " + tileCoord[2]);
                var x = 'C' + zeroPad(tileCoord[1], 8, 16);
                var y = 'R' + zeroPad(-tileCoord[2] - 1, 8, 16);
                var z = 'L' + zeroPad(tileCoord[0], 2, 10);
                return  '_alllayers/' + z + '/' + y + '/' + x + '.png';
            },
            projection: 'EPSG:3857'
        })
    });
    map.addLayer(tileLayer);
</script>
</body>
</html>

7.调剂之结果:

地理 7

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图