• 小小练习:测试获取用户信息接口


    简单分享一下,是如何对淘宝的用户信息如何获取!Util类,是封装的 TOP请求签名、组装普通文本、TOP API POST 请求,这可以在08或10编辑器下运行,

    主要是有MD5加密,还有HttpWebRequest类的一些方法、属性,在WP7环境下,不完全支持!

     public  class Util
        {
            /// <summary>
            /// 给TOP请求签名 API v2.0
            /// </summary>
            /// <param name="parameters">所有字符型的TOP请求参数</param>
            /// <param name="secret">签名密钥</param>
            /// <returns>签名</returns>
            protected static string CreateSign(IDictionary<string, string> parameters, string secret)
            {
                parameters.Remove("sign");
                IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters);
                IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
                StringBuilder query = new StringBuilder(secret);
                while (dem.MoveNext())
                {
                    string key = dem.Current.Key;
                    string value = dem.Current.Value;
                    if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
                    {
                        query.Append(key).Append(value);
                    }
                }
                query.Append(secret);
                MD5 md5 = MD5.Create();
                byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
                StringBuilder result = new StringBuilder();
                for (int i = 0; i < bytes.Length; i++)
                {
                    string hex = bytes[i].ToString("X");
                    if (hex.Length == 1)
                    {
                        result.Append("0");
                    }
                    result.Append(hex);
                }
                return result.ToString();
            }
            /// <summary>
            /// 组装普通文本请求参数。
            /// </summary>
            /// <param name="parameters">Key-Value形式请求参数字典</param>
            /// <returns>URL编码后的请求数据</returns>
            protected static string PostData(IDictionary<string, string> parameters)
            {
                StringBuilder postData = new StringBuilder();
                bool hasParam = false;
                IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
                while (dem.MoveNext())
                {
                    string name = dem.Current.Key;
                    string value = dem.Current.Value;
                    // 忽略参数名或参数值为空的参数
                    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(value))
                    {
                        if (hasParam)
                        {
                            postData.Append("&");
                        }
                        postData.Append(name);
                        postData.Append("=");
                        postData.Append(Uri.EscapeDataString(value));
                        hasParam = true;
                    }
                }
                return postData.ToString();
            }

            /// <summary>
            /// TOP API POST 请求
            /// </summary>
            /// <param name="url">请求容器URL</param>
            /// <param name="appkey">AppKey</param>
            /// <param name="appSecret">AppSecret</param>
            /// <param name="method">API接口方法名</param>
            /// <param name="session">调用私有的sessionkey</param>
            /// <param name="param">请求参数</param>
            /// <returns>返回字符串</returns>
            public static string Post(string url, string appkey, string appSecret, string method, string session, IDictionary<string, string> param)
            {
                #region -----API系统参数----
                param.Add("app_key", appkey);
                param.Add("method", method);
                param.Add("session", session);
                param.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                param.Add("format", "xml");
                param.Add("v", "2.0");
                param.Add("sign_method", "md5");
                param.Add("sign", CreateSign(param, appSecret));
                #endregion
                string result = string.Empty;
                #region ---- 完成 HTTP POST 请求----
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method = "POST";
                req.KeepAlive = true;
                req.Timeout = 300000;
                req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                byte[] postData = Encoding.UTF8.GetBytes(PostData(param));
                Stream reqStream = req.GetRequestStream();
                reqStream.Write(postData, 0, postData.Length);
                reqStream.Close();
                HttpWebResponse rsp = (HttpWebResponse)req.GetResponse();
                Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                Stream stream = null;
                StreamReader reader = null;
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                result = reader.ReadToEnd();
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
                #endregion
                return Regex.Replace(result, @"[\x00-\x08\x0b-\x0c\x0e-\x1f]", "");
            }
        }
    }


    控制台下Progrom中,调用上面的类,传入对应的参数,有单用户API和多用户请求的API,返回对应的XML!对于多用户解注释!:


    //这是你申请开放合作伙伴的appKey和appSecret
    string appKey = "test";
    string appSecret = "test";
    //他用类型 且是获取私有数据的需要传递 sessionkey(对于公共数据,不许授权的数据可以为空,但隐私信息,需要session,如,用户个人的生日、是否绑定阿里账号。。。)
    string session = "";
    //这是淘宝API接口
    string method = null;
    //这是请求的环境,现在测试,用沙箱环境
    //沙箱地址:http://gw.api.tbsandbox.com/router/rest
    //正式地址:http://gw.api.taobao.com/router/rest
    string url = "http://gw.api.tbsandbox.com/router/rest";


                #region taobao.user.get 单用户信息获取
                method = "taobao.user.get";
                IDictionary<string, string> param = new Dictionary<string, string>();
              
                param.Add("fields", "user_id,uid,nick,location");
                param.Add("nick", "alipublic01");
                string xml = Util.Post(url, appKey, appSecret, method, session, param);
                Console.Write("结果:" + xml);
                #endregion

                #region taobao.users.get 多用户信息获取
                //method = "taobao.users.get";
                //IDictionary<string, string> param = new Dictionary<string, string>();
                //param.Add("fields", "user_id,uid,nick,buyer_credit,seller_credit,type,sex,promoted_type,alipay_account,alipay_no,avatar");
                //param.Add("fields", "user_id,uid,nick,buyer_credit,location");
                //param.Add("nicks", "alipublic01,sandbox_c_1");
                //string xml = Util.Post(url, appKey, appSecret, method, session, param);
                //Console.Write("结果:" + xml);
                #endregion


    这是单用户请求返回结果:

    这是多用户请求返回结果:

  • 相关阅读:
    主席树套树状数组——带修区间第k大zoj2112
    卢卡斯定理——应用hdu4349
    没这5个证 付完钱房子也不是你的!
    Java transient关键字使用小记
    线性结构与非线性结构
    java事件处理机制(自定义事件)
    反射setAccessible()方法
    排序
    [JIRA] 最新Linux安装版本jira6.3.6安装破解以及数据导入的详细步骤
    深入研究java.lang.ThreadLocal类
  • 原文地址:https://www.cnblogs.com/SanMaoSpace/p/2144981.html
Copyright © 2020-2023  润新知