閱讀206 返回首頁    go 阿裏雲 go 技術社區[雲棲]


淘寶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

  上一篇:go 控製gridview顯示字段中顯示的字數
  下一篇:go GridView中的鏈接按鈕