📄 alipay.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Reflection;
using System.Collections;
using System.IO;
using System.Net;
using System.Web;
using CommonAliPay.Result;
using System.Web.UI;
using System.Security.Cryptography;
using System.Diagnostics;
namespace CommonAliPay
{
/// <summary>
/// 支付宝接口
/// </summary>
public class AliPay
{
#region Event
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public delegate void ProcessNotifyEventHandler(object sender, NotifyEventArgs e);
/// <summary>
/// 等待买家付款
/// </summary>
public event ProcessNotifyEventHandler WaitBuyerPay;
/// <summary>
/// 交易已创建,等待卖家确认
/// </summary>
public event ProcessNotifyEventHandler WaitSellerConfirmTrade;
/// <summary>
/// 确认买家付款中,暂勿发货
/// </summary>
public event ProcessNotifyEventHandler WaitSysConfirmPay;
/// <summary>
/// 支付宝收到买家付款,请卖家发货
/// </summary>
public event ProcessNotifyEventHandler WaitSellerSendGoods;
/// <summary>
/// 确认买家付款中,暂勿发货
/// </summary>
public event ProcessNotifyEventHandler WaitBuyerConfirmGoods;
/// <summary>
/// 买家确认收到货,等待支付宝打款给卖家
/// </summary>
public event ProcessNotifyEventHandler WaitSysPaySeller;
/// <summary>
/// 交易成功结束
/// </summary>
public event ProcessNotifyEventHandler TradeFinished;
/// <summary>
/// 交易中途关闭(未完成)
/// </summary>
public event ProcessNotifyEventHandler TradeClosed;
public virtual void OnWaitSellerSendGoods(NotifyEventArgs e)
{
if (WaitSellerSendGoods != null)
{
WaitSellerSendGoods(this, e);
}
}
public virtual void OnWaitBuyerPay(NotifyEventArgs e)
{
if (WaitBuyerPay != null)
{
WaitBuyerPay(this, e);
}
}
public virtual void OnWaitSysConfirmPay(NotifyEventArgs e)
{
if (WaitSysConfirmPay != null)
{
WaitSysConfirmPay(this, e);
}
}
public virtual void OnWaitSellerConfirmTrade(NotifyEventArgs e)
{
if (WaitSellerConfirmTrade != null)
{
WaitSellerConfirmTrade(this, e);
}
}
public virtual void OnWaitBuyerConfirmGoods(NotifyEventArgs e)
{
if (WaitBuyerConfirmGoods != null)
{
WaitBuyerConfirmGoods(this, e);
}
}
public virtual void OnWaitSysPaySeller(NotifyEventArgs e)
{
if (WaitSysPaySeller != null)
{
WaitSysPaySeller(this, e);
}
}
public virtual void OnTradeFinished(NotifyEventArgs e)
{
if (TradeFinished != null)
{
TradeFinished(this, e);
}
}
public virtual void OnTradeClosed(NotifyEventArgs e)
{
if (TradeClosed != null)
{
TradeClosed(this, e);
}
}
#endregion
#region Public
/// <summary>
/// 创建虚拟交易
/// </summary>
/// <param name="gatewayUrl">提交支付宝的地址</param>
/// <param name="digitalGoods">交易参数</param>
/// <param name="page">Page对象</param>
public void CreateDigitalTrade(string gatewayUrl, DigitalGoods digitalGoods, Page page)
{
HttpResponse Response = page.Response;
Response.Redirect(gatewayUrl + "?" + Md5SignParam(digitalGoods));
}
/// <summary>
/// 创建标准交易,包含虚拟交易
/// </summary>
/// <param name="gatewayUrl">提交支付宝的地址</param>
/// <param name="standardGoods">交易参数</param>
/// <param name="page">Page对象</param>
public void CreateStandardTrade(string gatewayUrl, StandardGoods standardGoods, Page page)
{
HttpResponse Response = page.Response;
Response.Redirect(gatewayUrl + "?" + Md5SignParam(standardGoods));
}
/// <summary>
/// 处理返回的Notify
/// </summary>
/// <param name="page">传如Page对象</param>
/// <param name="verifyUrl">验证的地址,如:https://www.alipay.com/cooperate/gateway.do</param>
/// <param name="key">账户的交易安全校验码(key)</param>
/// <param name="verify">verify对象</param>
/// <param name="encode">编码</param>
/// <exception cref="自定义异常">CommonAliPayBaseException</exception>
public void ProcessNotify(Page page,string verifyUrl,string key, Verify verify,string encode)
{
if (VerifyNotify(verifyUrl, verify)) //验证成功
{
NotifyEventArgs dn = new NotifyEventArgs();
dn= ParseNotify(page.Request.Form, dn);//构造事件参数
SortedList<string, string> sortedList = GetParam(dn);
string param = GetUrlParam(sortedList, false);
string sign = GetMd5Sign(encode, param+key);
if (sign == dn.Sign)//验证签名
{
try
{
if (dn.Trade_Status == "WAIT_SELLER_SEND_GOODS")//触发事件
{
OnWaitSellerSendGoods(dn);
}
else if (dn.Trade_Status == "WAIT_BUYER_PAY")
{
OnWaitBuyerPay(dn);
}
else if (dn.Trade_Status == "WAIT_SELLER_CONFIRM_TRADE")
{
OnWaitSellerConfirmTrade(dn);
}
else if (dn.Trade_Status == "WAIT_SYS_CONFIRM_PAY")
{
OnWaitSysConfirmPay(dn);
}
else if (dn.Trade_Status == "WAIT_BUYER_CONFIRM_GOODS")
{
OnWaitBuyerConfirmGoods(dn);
}
else if (dn.Trade_Status == "WAIT_SYS_PAY_SELLER")
{
OnWaitSysPaySeller(dn);
}
else if (dn.Trade_Status == "TRADE_FINISHED")
{
OnTradeFinished(dn);
}
else if (dn.Trade_Status == "TRADE_CLOSED")
{
OnTradeClosed(dn);
}
page.Response.Write("success");
}
catch (Exception e)
{
//支付宝如果是没有收到success就一直发Notify消息,则可以省略此try块
page.Response.Write("fail");
throw e;
}
}
else
{
//支付宝如果是没有收到success就一直发Notify消息,则可以省略发Fail消息
page.Response.Write("fail");
throw new CommonAliPayBaseException("支付宝通知签名验证失败", 101);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -