最近做Alisoft的一些isv软件,发现除了官方论坛给的一些技术支持外,网上的资料甚少,官方的也有些小BUG。于是自己写了一个API调用类,写的不是很好,但测试了基本没什么BUG;如果大家有更好的这方面资料,能一起拿来学习交流就更好了。
注意:传参的时候必须按照字母顺序传入,先按顺序传参数名,再对应着传值。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Web;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using System.Xml;
namespace AlisoftApi


{
public class Alirest

{

属性#region 属性
protected string result;
private string posturl;
private string code;
private string appid;
private string sign;
private string _sign;
private Int16 statu;
private string strxml;

/**//// <summary>
/// 加密前
/// </summary>
public string Sign1

{

get
{ return _sign; }

set
{ _sign = value; }
}

/**//// <summary>
/// 读取返回的xml
/// </summary>
public string Strxml

{

get
{ return strxml; }
}

/**//// <summary>
/// 程序状态,1调用成功,2需要绑定用户,-1调用失败
/// </summary>
public Int16 Statu

{

get
{ return statu; }

set
{ statu = value; }
}

/**//// <summary>
/// 设置或读取用户签名
/// </summary>
public string Sign

{

get
{ return sign; }

set
{ sign = value; }
}

/**//// <summary>
/// 设置或读取appid
/// </summary>
public string Appid

{

get
{ return appid; }

set
{ appid = value; }
}

/**//// <summary>
/// 设置或读取认证码
/// </summary>
public string Code

{

get
{ return code; }

set
{ code = value; }
}

/**//// <summary>
/// 设置或读取请求参数url
/// </summary>
public string Posturl

{

get
{ return posturl; }

set
{ posturl = value; }
}

/**//// <summary>
/// 程序返回结果
/// </summary>
public string Result

{

get
{ return result; }

set
{ result = value; }
}
#endregion

构造方法#region 构造方法
public Alirest(string _appid, string _code, string[] strpar)

{
Appid = _appid;
Code = _code;
SortedList mySL = new SortedList();
for (int i = 0; i < strpar.Length / 2; i++)

{
mySL.Add(strpar[i], strpar[(strpar.Length / 2) + i]);
}
StringBuilder signSb = new StringBuilder(code);
foreach (DictionaryEntry Item in mySL)

{
signSb.Append(Item.Key.ToString());
signSb.Append(Item.Value.ToString());
}
Sign1 = HttpUtility.UrlDecode(signSb.ToString(), Encoding.Default);
Sign = GetMd5(HttpUtility.UrlDecode(signSb.ToString(), Encoding.Default));
StringBuilder posturlSb = new StringBuilder("sip_sign="+Sign);
for (int i = 0; i < strpar.Length / 2; i++)

{
posturlSb.Append("&");
posturlSb.Append(strpar[i] + "="+ strpar[(strpar.Length / 2) + i]);
}
Posturl = HttpUtility.UrlDecode(posturlSb.ToString());
GetUrlContent();
}
#endregion

获取返回信息#region 获取返回信息

/**//// <summary>
/// 获取返回信息
/// </summary>
protected void GetUrlContent()

{
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] postdata = encoding.GetBytes(Posturl);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://sip.alisoft.com/sip/rest");
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = postdata.Length;
Stream newStream = myRequest.GetRequestStream();
newStream.Write(postdata, 0, postdata.Length);
newStream.Close();
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
strxml=reader.ReadToEnd();
}
#endregion

获取XML#region 获取XML

/**//// <summary>
/// 获取XML
/// </summary>
/// <param name="XmlRead">要读取的xml节点内容StringResult/result</param>
/// <returns></returns>
public void GetXml(string XmlRead)

{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(Strxml);
try

{
if (Strxml.Contains("http://"))

{
XmlNode xncode = xmlDoc.SelectSingleNode("error_rsp/url");
string result = xmlDoc.SelectSingleNode("error_rsp/url").InnerText;
Result = result;
Statu = 2;
}
else

{
XmlNode xncode = xmlDoc.SelectSingleNode(XmlRead);
string result = xmlDoc.SelectSingleNode(XmlRead).InnerText;
Statu = 1;
Result = result;
}
}
catch

{
Statu = -1;
}
}
#endregion

GetMd5#region GetMd5

/**//// <summary>
/// 生成MD5
/// </summary>
/// <param name="sipsign"></param>
/// <returns></returns>
protected static string GetMd5(string sipsign)

{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
return BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(sipsign))).Replace("-", "");
}
#endregion
}
}
//前台调用代码
protected void Button3_Click(object sender, EventArgs e)

{

string[] par =
{"domainid","sip_apiname" ,"sip_appkey" ,"sip_timestamp" ,"userid" ,
"3", "alisoft.udb.getDomainLoginId" , "11111" , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") , TextBox2.Text };
Alirest ali = new Alirest("11111", "-----------------------", par);
ali.GetXml("StringResult/result");
if (ali.Statu == 1)

{
TextBox3.Text=ali.Result;
}
else if (ali.Statu == 2)

{
Response.Redirect(ali.Result);
}
else

{
TextBox3.Text = ali.Strxml;
}
}