⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alipay.cs

📁 淘宝支付宝NET接口实现
💻 CS
📖 第 1 页 / 共 2 页
字号:
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 + -