最近做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
}
}
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;
}
}
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;
}
}