微信公众平台C#开发系列(六):网络检测

微信公众平台开发
117
补充展位
Pages_Weblog_Get#2b04cfc2-eb5e-474a-bcd8-ad3b009e0205
文章摘要
此内容由人工摘要内容,并由AI根据文章内容进行润色
暂无内容

调用微信公众平台官方Api 验证检测网络情况

为了帮助开发者排查回调连接失败的问题,微信官方提供了网络检测的API。它可以对开发者URL做域名解析,然后对所有IP进行一次ping操作,得到丢包率和耗时。

接口文档地址:

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Network_Detection.html

接着上一篇:微信公众平台C#开发系列(五):获取微信服务器IP地址

部分使用类方法详情 请参考系列四 ,本文不再重复赘述

根据文档我们先定义一个NetworkDetectionResponse类继承 ErrorMessage 用于解析接口结果

ErrorMessage 公共类参考 : 微信公众平台C#开发系列(四):获取access token凭证

namespace YuanTK.WeiXin.Wrapper
{

    /// <summary>
    /// 网络检测结果
    /// </summary>
    public class NetworkDetectionResponse : ErrorMessage
    {
        /// <summary>
        /// dns结果列表
        /// </summary>
        public Dns[] dns { get; set; }

        /// <summary>
        /// ping结果列表
        /// </summary>
        public Ping[] ping { get; set; }
    }

    /// <summary>
    /// dns结果
    /// </summary>
    public class Dns
    {
        /// <summary>
        /// 解析出来的ip
        /// </summary>
        public string ip { get; set; }
        /// <summary>
        /// ip对应的运营商
        /// </summary>
        public string real_operator { get; set; }
    }

    /// <summary>
    /// ping结果
    /// </summary>
    public class Ping
    {
        /// <summary>
        /// ping的ip,执行命令为ping ip –c 1-w 1 -q
        /// </summary>
        public string ip { get; set; }

        /// <summary>
        /// ping的源头的运营商,由请求中的check_operator控制
        /// </summary>
        public string from_operator { get; set; }

        /// <summary>
        /// ping的丢包率,0%表示无丢包,100%表示全部丢包。因为目前仅发送一个ping包,因此取值仅有0%或者100%两种可能。
        /// </summary>
        public string package_loss { get; set; }

        /// <summary>
        /// ping的耗时,取ping结果的avg耗时。
        /// </summary>
        public string time { get; set; }
    }

}

定义一个NetworkDetection方法类继承WeiXinRequest 和接口IWeiXin 和NetworkDetectionRequest 请求参数类

namespace YuanTK.WeiXin
{
    /// <summary>
    /// 接口请求参数类
    /// </summary>
    public class NetworkDetectionRequest
    {

        /// <summary>
        /// 执行的检测动作
        /// </summary>
        public enum Action
        {
            /// <summary>
            /// 域名解析
            /// </summary>
            dns,
            /// <summary>
            /// ping检测
            /// </summary>
            ping,
            /// <summary>
            /// dns和ping都做
            /// </summary>
            all
        }

        /// <summary>
        /// 指定平台从某个运营商进行检测
        /// </summary>
        public enum CheckOperator
        {
            /// <summary>
            /// 电信出口
            /// </summary>
            CHINANET,
            /// <summary>
            /// 联通出口
            /// </summary>
            UNICOM,
            /// <summary>
            /// 腾讯自建出口
            /// </summary>
            CAP,
            /// <summary>
            /// 根据ip来选择运营商
            /// </summary>
            DEFAULT
        }


        [JsonConverter(typeof(StringEnumConverter))]
        /// <summary>
        /// 执行的检测动作,允许的值:dns(做域名解析)、ping(做ping检测)、all(dns和ping都做)
        /// </summary>
        public Action action { get; set; }

        [JsonConverter(typeof(StringEnumConverter))]
        /// <summary>
        /// 指定平台从某个运营商进行检测,允许的值:CHINANET(电信出口)、UNICOM(联通出口)、CAP(腾讯自建出口)、DEFAULT(根据ip来选择运营商)
        /// </summary>
        public CheckOperator check_operator { get; set; }
    }

    /// <summary>
    /// 网络故障检测
    /// </summary>
    public class NetworkDetection : WeiXinRequest<NetworkDetectionResponse>, IWeiXin<NetworkDetectionResponse>
    {

        /// <summary>
        /// 接口地址
        /// </summary>
        String api;

        NetworkDetectionRequest RequestData;
        /// <summary>
        /// 
        /// </summary>
        /// <param name="action">执行的检测动作</param>
        /// <param name="checkOperator">指定平台从某个运营商进行检测</param>
        /// <param name="access_token">授权凭证</param>
        public NetworkDetection(NetworkDetectionRequest RequestData, string access_token)
        {
            this.RequestData = RequestData;
            ///初始化接口地址
            api = $"https://api.weixin.qq.com/cgi-bin/callback/check?access_token={access_token}";
        }


        /// <summary>
        /// 调用接口获取结果
        /// </summary>
        /// <returns></returns>
        public NetworkDetectionResponse GetResponse()
        {
            if (this.RequestData is null) {
                throw new Exception("请求参数不能为空");
            }
            string poststr = Newtonsoft.Json.JsonConvert.SerializeObject(this.RequestData);
            return this.Post(api, poststr);
        }
    }
}

调用代码例子

           string access_token = token.access_token;
            ///封装请求参数
            NetworkDetectionRequest request = new NetworkDetectionRequest()
            {
                action = NetworkDetectionRequest.Action.ping,
                check_operator = NetworkDetectionRequest.CheckOperator.DEFAULT
            };
            IWeiXin<NetworkDetectionResponse> api = new NetworkDetection(request, access_token);
            NetworkDetectionResponse networkDetection = api.GetResponse();

调用成功的效果 微信公众平台C#开发系列(五):网络检测

补充展位 Pages_Weblog_Get#0
补充展位 Pages_Weblog_Get#1