工作需要,做美国的在线支付系统,有两种模式,一种是PayPal支付,另一种是信用卡支付。PayPal支付将支付的表单数据提交到指定的IPN,由IPN处理并提供相应的页面,信用卡支付包括单个支付和包月的支付,包月支付既每个月自动的从账户上划钱,如果用户不取消,将一直支付下去。
\n
这两种支付,都有测试环境,在测试环境上调通了,正式环境就可走通,具体的测试环境可自行上网查找。
\n
两种的支付的关键就是如何向指定的网关提交数据,并接收网关返回的数据,提交的数据一种是表单,一种是xml,用到了一个很实用的方法,如下:
\n
PostXML
private string PostXml(string url, string strPost)
{
string result = “”;
\n
StreamWriter myWriter = null;
\n
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Method = “POST”;
objRequest.ContentLength = strPost.Length;
objRequest.ContentType = “text/xml”;//提交xml
//objRequest.ContentType = “application/x-www-form-urlencoded”;//提交表单
try
{
myWriter = new StreamWriter(objRequest.GetRequestStream());
myWriter.Write(strPost);
}
catch (Exception e)
{
return e.Message;
}
finally
{
myWriter.Close();
}
\n
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
return result;
}
\n
\n
传递网关url和指定参数的字符串,就能将信息提交到网关,并返回结果信息。返回的结果,有的是字符串列表,按指定的字符截开,有的是返回一个特定的xml,,这里介绍一个在xml中,输入开始标记和结束标记就可以获取文本的方法,如下:
\n
\n
//write by :suhanyu
private string PraseResponseXml(string conents, string start, string end)
{
if (conents.IndexOf(start) == 0 || conents.IndexOf(end) == 0)
{
return “”;
}
else
{
int start_position = conents.IndexOf(start) + start.Length;
int end_position = conents.IndexOf(end);
\n
if (start_position != -1 && end_position != -1)
{
\n
return conents.Substring(start_position, end_position – start_position);
}
else
{
return “”;
}
}
}
\n
\n
调用:
\n
\n
string refId = this.PraseResponseXml(xmlcode, “<refId>”, “</refId>”);
//xmlcode为xml格式的字符串
\n
做过该方面的再复习下,没做过的学习下 。。。呵呵。。。
\n
来源:http://www.cnblogs.com/shyblog
\n