服务热线: 021-20978108

Net原生代码调用API

http://www.zkibe.com/   来源:ZKIBE纵科   时间:2018/6/26 10:41:19
导读: 使用原生代码调用API,Net调用示例代码(非SDK) .Net调用代码示例(非SDK).Net调用代码示例创建如下两个类,并运行,即完成了调用接口(taob

使用原生代码调用API,Net调用示例代码(非SDK)

.Net调用代码示例(非SDK)


.Net调用代码示例

创建如下两个类,并运行,即完成了调用接口(taobao.user.seller.get)的过程
其中包括:
.参数加密
.请求接口调用服务
.调用返回结果
.注:该接口是在沙箱环境下调用,获取的数据,也是沙箱中数据。若要获取线上环境,请填写自己创建应用获取过来的appkey,appsecret,并更改调用接口的环境地址,同时修改nick为淘宝登陆名

获取数据
using System;

using System.Collections.Generic;

using System.Text;

 

namespace APITest

{

     class Program

     {

     static void Main(string[] args)

     {

          string appkey = "test";

          string secret = "test";

          string session = "test";

 

          IDictionary<string, string> param = new Dictionary<string, string>();

          param.Add("fields", "user_id,nick,type");

         // param.Add("nick", "sandbox_c_1");

 

          //Util.Post 集成了 系统参数 和 计算 sign的方法

          Console.WriteLine("返回结果:" + Util.Post("http://gw.api.tbsandbox.com/router/rest", appkey, secret, "taobao.user.seller.get", session, param));

          Console.ReadKey();

     }

}

}

util
using System;

using System.Net;

using System.Collections.Generic;

using System.Text.RegularExpressions;

using System.Text;

using System.IO;

using System.Xml;

using System.Security.Cryptography;

 

namespace APITest

{

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]", "");

}

}

}
欧美市场
代购市场观察
华人淘宝代购
如何建立代购网站
淘宝开放平台公告
1688开放平台公告
多语言淘宝代购
代购网站推广
如何做淘宝代购
东南亚市场
俄罗斯市场
代购网站功能解析
京东开放平台公告
淘宝代购运营管理
代购开放平台
非洲市场