支付宝及时到帐接口使用详解

http://blog.csdn.net/sufei1013/article/details/5299547

这两天写支付宝接口, 这个话题不新了, 因为很多人都 做过了, 在这里我说说我的看法吧, 先说一下实现

其实支付宝公司已经给我们做的很好了, 只要少量的改动就OK了,只是有的程序员不太明天他们的动作流程而以,我就以及时到帐为例子来说了,呵呵

在这之前就大家先下载一下c#版的及时到帐代码 这里是下载地址http://dev.alipay.com/devclub/mvnforum/viewthread_thread,4;jsessionid=595DB7442AAA5CD2FC849E7C2FBE51D7

先看一下程序的结构吧

支付宝及时到帐接口使用详解_第1张图片

支付宝有一个类文件叫 AliPay 是一些加密算法之类的东西,包括构造URL

要吧看一下这个类的全部内容

using System.Web;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using System;

/// <summary>
/// NewInterfaceforAliPay
/// </summary>
namespace Gateway
{
public class AliPay
{
/// <summary>
/// 与ASP兼容的MD5加密算法
/// </summary>
public static string GetMD5( string s, string _input_charset)
{
MD5md5
= new MD5CryptoServiceProvider();
byte []t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
StringBuildersb
= new StringBuilder( 32 );
for ( int i = 0 ;i < t.Length;i ++ )
{
sb.Append(t[i].ToString(
" x " ).PadLeft( 2 , ' 0 ' ));
}
return sb.ToString();
}

/// <summary>
/// 冒泡排序法
/// 按照字母序列从a到z的顺序排列
/// </summary>
public static string []BubbleSort( string []r)
{
int i,j; // 交换标志
string temp;

bool exchange;

for (i = 0 ;i < r.Length;i ++ ) // 最多做R.Length-1趟排序
{
exchange
= false ; // 本趟排序开始前,交换标志应为假

for (j = r.Length - 2 ;j >= i;j -- )
{
// 交换条件
if (System.String.CompareOrdinal(r[j + 1 ],r[j]) < 0 )
{
temp
= r[j + 1 ];
r[j
+ 1 ] = r[j];
r[j]
= temp;

exchange
= true ; // 发生了交换,故将交换标志置为真
}
}

if ( ! exchange) // 本趟排序未发生交换,提前终止算法
{
break ;
}
}
return r;
}

/// <summary>
/// 生成URL链接或加密结果
/// </summary>
/// <paramname="para"> 参数加密数组 </param>
/// <paramname="_input_charset"> 编码格式 </param>
/// <paramname="sign_type"> 加密类型 </param>
/// <paramname="key"> 安全校验码 </param>
/// <returns> 字符串URL或加密结果 </returns>
public static string CreatUrl(
// stringgateway, // GET方式传递参数时请去掉注释
string []para,
string _input_charset,
string sign_type,
string key
)
{
int i;

// 进行排序;
string []Sortedstr = BubbleSort(para);


// 构造待md5摘要字符串;

StringBuilderprestr
= new StringBuilder();

for (i = 0 ;i < Sortedstr.Length;i ++ )
{
if (i == Sortedstr.Length - 1 )
{
prestr.Append(Sortedstr[i]);

}
else
{
prestr.Append(Sortedstr[i]
+ " & " );
}

}

prestr.Append(key);

// 生成Md5摘要;
string sign = GetMD5(prestr.ToString(),_input_charset);

// 以下是POST方式传递参数
return sign;

// 以下是GET方式传递参数
// 构造支付Url;
// char[]delimiterChars={'='};
// StringBuilderparameter=newStringBuilder();
// parameter.Append(gateway);
// for(i=0;i<Sortedstr.Length;i++)
// { // UTF-8格式的编码转换
// parameter.Append(Sortedstr[i].Split(delimiterChars)[0]+"="+HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1])+"&");
// }
//
// parameter.Append("sign="+sign+"&sign_type="+sign_type);
//
// // 返回支付Url;
// returnparameter.ToString();
}

// 获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求
public static string Get_Http( string a_strUrl, int timeout)
{
string strResult;
try
{
HttpWebRequestmyReq
= (HttpWebRequest)HttpWebRequest.Create(a_strUrl);
myReq.Timeout
= timeout;
HttpWebResponseHttpWResp
= (HttpWebResponse)myReq.GetResponse();
StreammyStream
= HttpWResp.GetResponseStream();
StreamReadersr
= new StreamReader(myStream,Encoding.Default);
StringBuilderstrBuilder
= new StringBuilder();
while ( - 1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
}

strResult
= strBuilder.ToString();
}
catch (Exceptionexp)
{

strResult
= " 错误: " + exp.Message;
}

return strResult;
}

}
}

而我们一般不用管这个类,只要保证能调用 的到就行了,不用管他

我们要做的很少,他是怎么工作的呢,

支付宝及时到帐接口使用详解_第2张图片

这是开发文档里的工作图

其实我们要处理的只有三个Aspx的文件,

先看第一个吧 Default.aspx

这是一个请求的界面

代码

你可能感兴趣的:(支付宝)