HTTP POST 数据对接方法
/// <summary>
/// 配送商向Accpet发送加密后的数据,并返回Accpet的相应结果
/// </summary>
/// <param name="url">Accpet接受地址</param>
/// <param name="spid">Accpet分配的配送商ID</param>
/// <param name="data">配送商要发的数据</param>
/// <param name="key">Accpet提供的Key</param>
/// <param name="iv">Accpet提供的iv</param>
/// <returns></returns>
public static string SpRequest(string url,string spid,string data, string key, string iv)
{
string str = DesEncode(data, key, iv);
string supperid = HttpUtility.UrlEncode(spid, Encoding.UTF8);
string xmlValue = HttpUtility.UrlEncode(str, Encoding.UTF8);
WebRequest req = WebRequest.Create(url);
byte[] bytes = Encoding.ASCII.GetBytes("lcData=" + xmlValue + "&SupplierId=" + supperid);
//req.Headers.Add("Accept-Encoding:gzip, deflate");
req.Headers.Add("Accept-Language:zh-cn,en-us");
req.Headers.Set("Pragma", "no-cache");
req.Timeout = 10000;
req.Method = "post";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bytes.Length;
Stream os = null;
try
{
os = req.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return WebResponse((HttpWebRequest)req, System.Text.Encoding.GetEncoding("utf-8"),key,iv);
}
/// <summary>
/// 获取Accpet返回XML
/// </summary>
/// <param name="request">向Accpet发起的HttpWebRequest</param>
/// <param name="encoding">向Accpet发起的HttpWebRequest编码格式</param>
/// <param name="key">Accpet提供key</param>
/// <param name="iv">Accpet提供iv</param>
/// <returns>XML串</returns>
public static string WebResponse(HttpWebRequest request, Encoding encoding, string key, string iv)
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string strResponse = reader.ReadToEnd();
reader.Close();
response.Close();
if (string.IsNullOrEmpty(strResponse))
{
return "";
}
strResponse = HttpUtility.UrlDecode(strResponse, encoding);
strResponse = DesDecode(strResponse, key, iv);
return strResponse;
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="data">要加密的数据</param>
/// <param name="key">Accpet提供key</param>
/// <param name="iv">Accpet提供iv</param>
/// <returns>加密后的串</returns>
public static string DesEncode(string data, string key, string iv)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="data">要解密的数据</param>
/// <param name="key">Accpet提供key</param>
/// <param name="iv">Accpet提供iv</param>
/// <returns>解密后的串</returns>
public static string DesDecode(string data, string key, string iv)
{
byte[] byKey = ASCIIEncoding.ASCII.GetBytes(key);
byte[] byIV = ASCIIEncoding.ASCII.GetBytes(iv);
byte[] byEnc;
try
{
byEnc = Convert.FromBase64String(data);
}
catch
{
return null;
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
浙公网安备 33010602011771号