为了方便扩展制定支付宝回调接口
public interface IReturnHandler
{
/// <summary>
/// 处理Returl_url回调请求
/// </summary>
/// <param name="properties">支付宝相关参数</param>
/// <param name="customs">自定义参数</param>
void Return(System.Collections.Specialized.NameValueCollection properties, IList<string> customs);
/// <summary>
/// 处理Notify_url回调请求
/// </summary>
/// <param name="properties">支付宝相关参数</param>
/// <param name="customs">自定义参数</param>
void Notify(System.Collections.Specialized.NameValueCollection properties, IList<string> customs);
/// <summary>
/// 支付宝处理错误回调请求
/// </summary>
/// <param name="properties">支付宝相关参数</param>
/// <param name="customs">自定义参数</param>
/// <param name="responsetext">结果内容</param>
void OnError(System.Collections.Specialized.NameValueCollection properties, IList<string> customs,string responsetext);
/// <summary>
/// 合作商ID
/// </summary>
string Partner
{
get;
}
/// <summary>
/// 加密Key
/// </summary>
string Key
{
get;
}
/// <summary>
/// 卖家邮件地址
/// </summary>
string Seller_Email
{
get;
}
}
重新实现AliPay类
/// <summary>
/// 支付宝虚拟货币支付
/// </summary>
public class AliPay
{
/// <summary>
/// 构造虚拟货币支付对象
/// </summary>
/// <param name="subject">商品名称</param>
/// <param name="body">商品描述</param>
/// <param name="total_fee">总金额</param>
public AliPay(string subject, string body, decimal total_fee
,string returnurl)
{
Gateway = Untity.Service_Ulr;
Service = "create_direct_pay_by_user";
Sing_Type = Untity.Sing_Type;
Payment_Type = "1";
Subject = subject;
Body = body;
Total_Fee = total_fee;
Return_Url = returnurl;
Notify_Url = returnurl;
}
public string Notify_Url
{
get;
set;
}
public string Buyer_Id
{
get;
set;
}
public void Execute<T>(params string[] customparams) where T:IReturnHandler,new()
{
System.DateTime currentTime = new System.DateTime();
currentTime = System.DateTime.Now;
string out_trade_no = currentTime.ToString("g");
Out_Trade_No = out_trade_no.Replace("-", "");
Out_Trade_No = Out_Trade_No.Replace(":", "");
Out_Trade_No = Out_Trade_No.Replace(" ", "");
//返回支付Url;
System.Web.HttpContext.Current.Response.Redirect(parameter.ToString());
}
}
Alipay的代码就贴部分出来,具体代码下载源码可以得到。
Execute方法是用调用支付宝接口,T泛型参数主要描述支付宝回调后用那个IReturnHandler的实现者来处理;customparams就是用户自定义的参数可以是多个,注意参数内容过多生成Returl_url过长会导致支付宝处理错误。
