淘寶API代碼c#實例
這是一個通用的類。。
具體調用 看下麵
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TaoBaoManagersTools
{
public class TaoBaoManagersDataObject
{
public static string sip_sessionid = string.Empty;
public static string format = string.Empty;
public static string sip_appkey = string.Empty;
public static string v = string.Empty;
private static string sip_timestamp;
private byte[] _address = null;
private static ASCIIEncoding encoding;
private static System.Net.HttpWebRequest myRequest;
private System.Security.Cryptography.MD5CryptoServiceProvider md5;
private StringBuilder sb;
private static TaoBaoManagersDataObject instance = null;
private static readonly object padlock = new object();
/**/
/// <summary>
/// 定義TaoBaoDataObject的個單態以獲取該類的一個實例
/// </summary>
public static TaoBaoManagersDataObject getTaoBaoManagersDataObject
{
get
{
lock (padlock)
{
if (instance == null)
instance = new TaoBaoManagersDataObject();
return instance;
}
}
}
/// <summary>
/// 設置店鋪配置
/// </summary>
/// <param name="sce">ShopConfigEntity 實體</param>
public void getShopConfig(TaoBaoManagersEntity.ShopConfigEntity sce)
{
sip_sessionid = sce.Sip_sessionid;
format = sce.Format;
sip_appkey = sce.Sip_appkey;
v = sce.V;
}
/**/
/// <summary>
/// 設置參數
/// </summary>
public void setSL(System.Collections.SortedList mySL)
{
mySL.Clear();
sip_timestamp = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
mySL.Add("format", format);
mySL.Add("sip_appkey", sip_appkey);
mySL.Add("sip_timestamp", sip_timestamp);
mySL.Add("sip_sessionid", sip_sessionid);
mySL.Add("v", v);
}
/**/
/// <summary>
/// 獲取地址字符串
/// </summary>
/// <param name="mySL"></param>
/// <returns></returns>
public byte[] getAddress(System.Collections.SortedList mySL)
{
String address = "";
for (int i = 0; i < mySL.Count; i++)
{
address = String.Format("{0}{1}={2}&", address,
mySL.GetKey(i).ToString(),
System.Web.HttpUtility.UrlEncode(mySL.GetByIndex(i).ToString()));
}
encoding = new ASCIIEncoding();
_address = encoding.GetBytes(address + "sip_sign=" + getEncrypt(mySL));
return _address;
}
/**/
/// <summary>
/// 對地址字符串進行MD5加密
/// </summary>
/// <param name="mySL">地址字符串數組</param>
/// <returns></returns>
public string getEncrypt(System.Collections.SortedList mySL)
{
//簽名字段的生成,將CERT CODE和所有接口要傳的參數進行組合,再將組裝好的字符串進行md5加密後轉成16進製後得到一個32位的密文
//StringBuilder sb = new StringBuilder();
sb = new StringBuilder();
sb.Append("127966e01a9c11deb6daefc7091c0420"); //將安全編碼放字符串首位
//對list裏的參數進行拚裝,參數名+參數值,按自然排序,即所有參數字母排序
foreach (System.Collections.DictionaryEntry Item in mySL)
{
sb.Append(Item.Key.ToString());
if (Item.Value != null)
{
sb.Append(Item.Value.ToString());
}
}
md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
return
BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()))).Replace("-",
"");//對拚裝好的字符串進行md5加密
}
/// <summary>
/// 對字符串進行MD5加密
/// </summary>
/// <param name="pToEntity"></param>
/// <returns></returns>
public string getEncrypt(string pToEntity)
{
//簽名字段的生成,將CERT CODE和所有接口要傳的參數進行組合,再將組裝好的字符串進行md5加密後轉成16進製後得到一個32位的密文
//StringBuilder sb = new StringBuilder();
sb = new StringBuilder();
sb.Append("127966e01a9c11deb6daefc7091c0420"); //將安全編碼放字符串首位
sb.Append(pToEntity.ToString());
return md5.ComputeHash(md5.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString()))).ToString();
}
/// <summary>
/// 加密算法
/// </summary>
/// <param name="pToEncrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public string getEncrypt(string pToEncrypt, string sKey)
{
System.Security.Cryptography.DESCryptoServiceProvider
des = new System.Security.Cryptography.DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Security.Cryptography.CryptoStream
cs = new
System.Security.Cryptography.CryptoStream(ms,des.CreateEncryptor(),System.Security.Cryptography.CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach(byte b in ms.ToArray())
{
//Format as hex
ret.AppendFormat("{0:X2}", b);
}
ret.ToString();
return ret.ToString();
}
//解密算法
public string getDecrypt(string pToDecrypt, string sKey)
{
System.Security.Cryptography.DESCryptoServiceProvider
des = new System.Security.Cryptography.DESCryptoServiceProvider();
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for(int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.Security.Cryptography.CryptoStream
cs = new
System.Security.Cryptography.CryptoStream(ms,des.CreateDecryptor(),System.Security.Cryptography.CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
/**/
/// <summary>
/// 向服務器發送地址字符串
///Prepare web request...
///目前阿裏軟件的服務集成平台(SIP)的接口測試地址是:
https://sipdev.alisoft.com/sip/rest
,生產環境地址是:
https://sip.alisoft.com/sip/rest
,
///這裏使用測試接口先,到正式上線時需要做切換
/// </summary>
/// <returns></returns>
public void sendAddress()
{
System.IO.Stream newStream = getRequest().GetRequestStream();
// Send address
newStream.Write(_address, 0, _address.Length);
newStream.Close();
}
/**/
/// <summary>
/// 獲取Request對象
/// </summary>
/// <param name="myRequest"></param>
/// <param name="mySL"></param>
/// <returns></returns>
public System.Net.HttpWebRequest getRequest()
{
myRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("
https://sip.alisoft.com/sip/rest
");
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = _address.Length;
return myRequest;
}
/**/
/// <summary>
/// 獲取Response對象
/// </summary>
/// <param name="myRequest"></param>
/// <param name="mySL"></param>
/// <returns></returns>
public System.Net.HttpWebResponse getResponse()
{
return (System.Net.HttpWebResponse)myRequest.GetResponse();
}
/**/
/// <summary>
/// 獲取服務器發送回來的狀態碼
/// </summary>
/// <param name="mySL"></param>
/// <returns></returns>
public String getStatus()
{
return ((System.Net.HttpWebResponse)myRequest.GetResponse()).Headers.Get("sip_status");//獲得接口返回狀態碼
}
/**/
/// <summary>
/// 獲取服務器發送回來的數據
/// </summary>
/// <param name="myRequest"></param>
/// <param name="mySL"></param>
/// <returns></returns>
public String getResource()
{
System.IO.StreamReader reader = new System.IO.StreamReader(getResponse().GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
public string getResource(System.Collections.SortedList mySL)
{
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
/**/
/// <summary>
/// 自動添加參數列表到mySL
/// </summary>
/// <param name="mySL">System.Collections.SortedList</param>
/// <param name="list">參數</param>
public void addParamsTomySL(System.Collections.SortedList mySL, params object[] list)
{
for (int i = 0; i < list.Length / 2; i++)
{
//string a=list[2*i].ToString();
//string b= list[(2 * i)+1].ToString();
if (null != list[(2 * i) + 1])
{
mySL.Add(list[2 * i], list[(2 * i) + 1]);
}
}
}
/**/
/// <summary>
/// 獲取參數列表轉換成Object數組
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public object[] getParams(params object[] list)
{
return list;
}
/**/
/// <summary>
/// 將Xml內容字符串轉換成DataSet對象
/// </summary>
/// <param name="xmlStr">Xml內容字符串</param>
/// <returns>DataSet對象</returns>
public System.Data.DataSet CXmlToDataSet(string xmlStr)
{
if (!string.IsNullOrEmpty(xmlStr))
{
System.IO.StringReader StrStream = null;
System.Xml.XmlTextReader Xmlrdr = null;
try
{
System.Data.DataSet ds = new System.Data.DataSet();
//讀取字符串中的信息
StrStream = new System.IO.StringReader(xmlStr);
//獲取StrStream中的數據
Xmlrdr = new System.Xml.XmlTextReader(StrStream);
//ds獲取Xmlrdr中的數據
ds.ReadXml(Xmlrdr);
return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
//釋放資源
if (Xmlrdr != null)
{
Xmlrdr.Close();
StrStream.Close();
StrStream.Dispose();
}
}
}
else
{
return null;
}
}
/**/
/// <summary>
/// 把獲取的xml文件轉換成數據集System.Data.DataSet
/// </summary>
/// <param name="ds">System.Data.DataSet</param>
/// <param name="xml">getResource:xml文件</param>
/// <returns>System.Data.DataSet :數據集</returns>
public System.Data.DataSet getDs(System.Data.DataSet ds, string xml)
{
//System.IO.FileStream fs = new System.IO.FileStream(xml, System.IO.FileMode.Open, System.IO.FileAccess.Read);
//System.IO.StreamReader sr = new System.IO.StreamReader(fs);
//System.Xml.XmlDocument xd = new System.Xml.XmlDocument();
//xd.LoadXml(xml.ToString());
ds.ReadXml(new System.IO.StringReader(xml));
return ds;
}
}
}
調用接口的類
該類為調用 交易數據的類 其他類可以套用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TaoBaoManagersDAL
{
public class TradeDao
{
private static System.Collections.SortedList mySL;
private static TradeDao instance = null;
private static readonly object padlock = new object();
/**/
/// <summary>
/// 定義TradeDao的個單態以獲取該類的一個實例
/// </summary>
public static TradeDao getTradeDao
{
get
{
lock (padlock)
{
if (instance == null)
instance = new TradeDao();
return instance;
}
}
}
/**/
/// <summary>
/// 此接口方法用以搜索當前會話用戶做為買家達成的交易記錄。支持分頁。不支持曆史交易數據。
/// </summary>
/// <param name="fields">必須:需要返回的交易數據結構字段(不包括支付寶交易號及實付金額)</param>
/// <param name="start_created">可選:查詢交易創建時間開始</param>
/// <param name="page_no">可選:頁碼</param>
/// <param name="page_size">可選:每頁條數</param>
/// <param name="title">可選:商品名稱</param>
/// <param name="status">可選:交易狀態</param>
/// <param name="end_created">可選:查詢交易創建時間結束</param>
/// <returns>
/// totalResults:搜索到的交易信息總數
/// trade[]:搜索到的交易信息列表
/// </returns>
public string taobao_trades_bought_get(string fields, string
start_created, string page_no, string page_size, string title, string
status, string end_created)
{
mySL = new System.Collections.SortedList();
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.setSL(mySL);
mySL.Add("sip_apiname", "taobao.trades.bought.get");
object[] myParams =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getParams("fields",
fields, "start_created", start_created, "page_no", page_no,
"page_size", page_size, "title", title, "status", status,
"end_created", end_created);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.addParamsTomySL(mySL, myParams);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
/**/
/// <summary>
/// 此接口方法用以搜索當前會話用戶(做為賣家)已賣出的交易數據。支持分頁。不支持曆史交易數據。
/// </summary>
/// <param name="start_created">可選:查詢交易創建時間開始</param>
/// <param name="page_no">可選:頁碼</param>
/// <param name="page_size">可選:每頁條數</param>
/// <param name="title">可選:商品名稱</param>
/// <param name="status">可選:交易狀態</param>
/// <param name="end_created">可選:查詢交易創建時間結束</param>
/// <param name="fields">需要返回的交易數據結構字段(不包括支付寶交易號及實付金額) </param>
/// <returns>
/// totalResults:搜索到的交易信息總數
/// trade[]:搜索到的交易信息列表
/// </returns>
public string taobao_trades_sold_get(string start_created, string
page_no, string page_size, string title, string status, string
end_created, string fields)
{
mySL = new System.Collections.SortedList();
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.setSL(mySL);
mySL.Add("sip_apiname", "taobao.trades.sold.get");
object[] myParams =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getParams("start_created",
start_created, "page_no", page_no, "page_size", page_size, "title",
title, "status", status, "end_created", end_created, "fields", fields);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.addParamsTomySL(mySL, myParams);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
/**/
/// <summary>
/// 此接口方法用以搜索交易公開信息。支持分頁。
/// </summary>
/// <param name="iid">必須:商品id</param>
/// <param name="fields">必須:需要返回的交易數據結構字段(不包括支付寶交易號及實付金額) </param>
/// <param name="seller_nike">必須:賣家昵稱</param>
/// <param name="page_no">可選:頁碼</param>
/// <param name="page_size">可選:每頁條數</param>
/// <returns>
/// totalResults:搜索到的交易信息總數
/// trade[]:搜索到的交易信息列表
/// </returns>
public string taobao_trades_get(string iid, string fields, string seller_nike, string page_no, string page_size)
{
mySL = new System.Collections.SortedList();
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.setSL(mySL);
mySL.Add("sip_apiname", "taobao.trades.get");
object[] myParams =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getParams("iid",
iid, "fields", fields, "seller_nike", seller_nike, "page_no", page_no,
"page_size", page_size);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.addParamsTomySL(mySL, myParams);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
/**/
/// <summary>
/// 獲取單條交易信息,包含支付寶交易號、實付金額及郵費
/// </summary>
/// <param name="fields">
/// 必須:需要返回的交易數據結構字段
///
seller_nick:賣家昵稱,buyer_nick:買家昵稱,title:商品標題(由於存在父子訂單,這裏返回的是店鋪名稱),type:交易
類型,created:交易創建時間,sid:物流id,buyer_message:買家留言,
/// tid:子訂單id,seller_rate:賣家是否已評價,buyer_rate:買家是否已評價,
/// status交易狀態 等待買家付款:WAIT_BUYER_PA 未創建支付寶交易:TRADE_NO_CREATE_PAY 賣家已發貨:WAIT_BUYER_CONFIRM_GOODS
/// 買家已付款:WAIT_SELLER_SEND_GOODS 交易成功:TRADE_FINISHED,交易關閉:TRADE_CLOSED 創建關閉:TRADE_CLOSED_BY_TAOBAO
/// 其他狀態:OTHER,
/// payment:實付金額,alipay_no:支付寶交易號,pay_time:付款時間,end_time:交易成功時間(tc更新交易狀態為成功的同時更新),out_sid:外部物流訂單號,modified:交易修改時間,
///
buyer_obtain_point_fee:買家獲得積分,返點的積分,buyer_memo:買家備注,seller_memo:賣家備
注,point_fee:買家使用積分,real_point_fee:買家實際使用積分,total_fee:買家付款金額,orders:訂單列表
/// </param>
/// <param name="tid">必須:交易ID</param>
/// <returns></returns>
public string taobao_trade_get(string fields, string tid)
{
mySL = new System.Collections.SortedList();
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.setSL(mySL);
mySL.Add("sip_apiname", "taobao.trade.get");
object[] myParams =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getParams("fields",
fields, "tid", tid);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.addParamsTomySL(mySL, myParams);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
/**/
/// <summary>
/// 查詢某商品的出價記錄
/// </summary>
/// <param name="fiekds">
/// 必須:需要返回的交易數據結構字段
/// seller_nick:賣家昵稱,buyer_nick:買家昵稱,title:商品標題(由於存在父子訂單,這裏返回的是店鋪名稱),
/// type:交易類型,created:交易創建時間,iid:商品id,price:商品價格,pic_path:商品圖片路徑,num:購買數量
/// </param>
/// <param name="iid">必須:商品id</param>
/// <param name="seller_nike">可選:賣家昵稱</param>
/// <param name="pae_no">可選;頁碼</param>
/// <param name="page_size">可選;每頁條數</param>
/// <returns></returns>
public string taobao_orders_get(string fields, string iid, string seller_nike, string pae_no, string page_size)
{
mySL = new System.Collections.SortedList();
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.setSL(mySL);
mySL.Add("sip_apiname", "taobao.orders.get");
object[] myParams =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getParams("fields",
fields, "iid", iid, "seller_nike", seller_nike, "pae_no", pae_no,
"page_size", page_size);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.addParamsTomySL(mySL, myParams);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getAddress(mySL);
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.sendAddress();
return TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.getResource();
}
}
}
頁麵調用 是這樣的,,,,
這個是個空方法 可以任意調用
其他方法 都可以套用
/**/
/// <summary>
/// 獲取買家已付款的數據量
/// </summary>
public void getWAIT_SELLER_SEND_GOODS()
{
string xmlSouse =
TaoBaoManagersDAL.TradeDao.getTradeDao.taobao_trades_sold_get(null,
null, null, null, "WAIT_SELLER_SEND_GOODS", null, fields);
System.Data.DataSet ds =
TaoBaoManagersTools.TaoBaoManagersDataObject.getTaoBaoManagersDataObject.CXmlToDataSet(xmlSouse);
this.WAIT_SELLER_SEND_GOODS.Text = ds.Tables[0].Rows[0]["totalResults"].ToString();
}
[/sell]
最後更新:2017-04-02 04:01:43
上一篇:
控製gridview顯示字段中顯示的字數
下一篇:
GridView中的鏈接按鈕
九度題目1029:魔咒詞典
linux/windows環境下mysql數據庫啟動、停止、重啟命令
智能電表變炸彈:物聯網時代供電設施安全性引關注
Core Data淺談係列之八 : 關於並發
關於ORACLE時間存儲的問題
Joomla模板下載
沙龍報名啦:頂級架構師為您講述企業互聯網架構優化升級之路(阿裏雲授權中心沙龍計劃)
sizeof 和 strlen;gets 和 %s
幾個常用命令小記
展(水樹奈(閆(中華人民共和國稅收征收管理法(主席令第四十九號) 2015年8月15日 - 會關於修改〈中華人民共和國文物保護法〉等十二部法律的決定》(主席令第...第八十九條 納稅人、扣繳義務人可以委托稅務代理人代為辦理稅務事宜。 第...)雷)奈)開相