protected virtual void OnNotifyEvent(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[notifyEventKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
/// <summary> /// 修改交易价格 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_ModifyTradeBaseTotalFee(object sender, NotifyEventArgs e) { log.Info("修改交易价格,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (e.Is_Total_Fee_Adjust == "T") { if (obll.ModifyTotalFee(e.Out_Trade_No, e.Total_Fee ?? 0)) { string remark = String.Format("修改订单金额,修改前总价为:{0},修改后的的总价为:{1},相关状态为:{2}", omodel.Paysum, e.Total_Fee, e.Trade_Status + " " + e.Refund_Status); lbll.Add(e.Out_Trade_No, remark, "议价", "alipay"); } } } }
/// <summary> /// 买家申请退款 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_WaitSellerAgree(object sender, NotifyEventArgs e) { log.Info("买家申请退款,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangePayStatus(e.Out_Trade_No, PayStatus.退款申请中)) { lbll.Add(e.Out_Trade_No, e.Trade_Status + " " + e.Refund_Status, PayStatus.退款申请中.ToString(), "alipay"); } } }
/// <summary> /// 交易创建,等待买家付款 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_WaitBuyerPay(object sender, NotifyEventArgs e) { log.Info("交易创建,等待买家付款,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangeOrderStatus(e.Out_Trade_No, OrderStatus.已创建) && obll.SetPayOrderId(e.Out_Trade_No, e.Trade_No)) { string remark = e.Trade_Status + " " + e.Refund_Status; lbll.Add(e.Out_Trade_No, remark, OrderStatus.已创建.ToString(), "alipay"); } } }
/// <summary> /// 交易成功结束 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_TradeFinished(object sender, NotifyEventArgs e) { log.Info("交易成功结束,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangeOrderStatus(e.Out_Trade_No, OrderStatus.交易完成)) { string remark = e.Trade_Status + " " + e.Refund_Status; lbll.Add(e.Out_Trade_No, remark, OrderStatus.交易完成.ToString(), "alipay"); } } }
/// <summary> /// 退款成功 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_RefundSuccess(object sender, NotifyEventArgs e) { log.Info("退款成功,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangePayStatus(e.Out_Trade_No, PayStatus.退款完成)) { lbll.Add(e.Out_Trade_No, e.Trade_Status + " " + e.Refund_Status, PayStatus.退款完成.ToString(), "alipay"); } } }
/// <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="SignVerifyFailedException">支付宝通知签名验证失败</exception> /// <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(GetReqParas(page), dn);//构造事件参数 //SortedList<string, string> sortedList = GetParam(dn); SortedList <string, string> sortedList = GetParamFromReqPara(GetReqParas(page)); string param = GetUrlParam(sortedList, false); #if (DEBUG) Log4net.log.Error(param + "param"); #endif string sign = GetMd5Sign(encode, param + key); if (sign == dn.Sign)//验证签名 { // 交易状态处理 switch (dn.Trade_Status) { case "WAIT_SELLER_SEND_GOODS": OnWaitSellerSendGoods(dn); break; case "WAIT_BUYER_PAY": OnWaitBuyerPay(dn); break; case "WAIT_SELLER_CONFIRM_TRADE": OnWaitSellerConfirmTrade(dn); break; case "WAIT_SYS_CONFIRM_PAY": OnWaitSysConfirmPay(dn); break; case "WAIT_BUYER_CONFIRM_GOODS": OnWaitBuyerConfirmGoods(dn); break; case "WAIT_SYS_PAY_SELLER": OnWaitSysPaySeller(dn); break; case "TRADE_FINISHED": OnTradeFinished(dn); break; case "TRADE_CLOSED": OnTradeClosed(dn); break; case "modify.tradeBase.totalFee": OnModifyTradeBaseTotalFee(dn); break; default: throw new NotImplementedException(dn.Trade_Status); } // 退款状态处理 switch (dn.Refund_Status) { case "REFUND_CLOSED": OnRefundClose(dn); break; case "REFUND_SUCCESS": OnRefundSuccess(dn); break; case "WAIT_SELLER_AGREE": OnWaitSellerAgree(dn); break; } page.Response.Write("success"); } else { page.Response.Write("fail"); throw new CommonAliPayBaseException("支付宝通知签名验证失败", 102); #if (DEBUG) Log4net.log.Error("支付宝通知签名验证失败"); #endif } } else { page.Response.Write("fail"); throw new CommonAliPayBaseException("支付宝通知验证失败", 101); } }
/// <summary> /// 确认买家付款中,请勿操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_WaitSysConfirmPay(object sender, NotifyEventArgs e) { log.Info("确认买家付款中,请勿操作,订单号为:" + e.Out_Trade_No); }
/// <summary> /// /// </summary> /// <param name="e"></param> protected virtual void OnTradeFinished(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[tradeFinishedKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
protected virtual void OnRefundSuccess(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[refundSuccessKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
protected virtual void OnModifyTradeBaseTotalFee(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[modifyTradeBaseTotalFeeKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
/// <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="SignVerifyFailedException">֧����֪ͨǩ����֤ʧ��</exception> /// <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(GetReqParas(page), dn);//�����¼����� //SortedList<string, string> sortedList = GetParam(dn); SortedList<string, string> sortedList = GetParamFromReqPara(GetReqParas(page)); string param = GetUrlParam(sortedList, false); #if (DEBUG) Log4net.log.Error(param + "param"); #endif string sign = GetMd5Sign(encode, param + key); if (sign == dn.Sign)//��֤ǩ�� { // ����״̬���� switch (dn.Trade_Status) { case "WAIT_SELLER_SEND_GOODS": OnWaitSellerSendGoods(dn); break; case "WAIT_BUYER_PAY": OnWaitBuyerPay(dn); break; case "WAIT_SELLER_CONFIRM_TRADE": OnWaitSellerConfirmTrade(dn); break; case "WAIT_SYS_CONFIRM_PAY": OnWaitSysConfirmPay(dn); break; case "WAIT_BUYER_CONFIRM_GOODS": OnWaitBuyerConfirmGoods(dn); break; case "WAIT_SYS_PAY_SELLER": OnWaitSysPaySeller(dn); break; case "TRADE_FINISHED": OnTradeFinished(dn); break; case "TRADE_CLOSED": OnTradeClosed(dn); break; case "modify.tradeBase.totalFee": OnModifyTradeBaseTotalFee(dn); break; default: throw new NotImplementedException(dn.Trade_Status); } // �˿�״̬���� switch (dn.Refund_Status) { case "REFUND_CLOSED": OnRefundClose(dn); break; case "REFUND_SUCCESS": OnRefundSuccess(dn); break; case "WAIT_SELLER_AGREE": OnWaitSellerAgree(dn); break; } page.Response.Write("success"); } else { page.Response.Write("fail"); throw new CommonAliPayBaseException("֧����֪ͨǩ����֤ʧ��", 102); #if (DEBUG) Log4net.log.Error("֧����֪ͨǩ����֤ʧ��"); #endif } } else { page.Response.Write("fail"); throw new CommonAliPayBaseException("֧����֪ͨ��֤ʧ��", 101); } }
/// <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="SignVerifyFailedException">֧����֪ͨǩ����֤ʧ��</exception> /// <exception cref="CommonAliPayBaseException">֧����֪ͨ��֤ʧ��</exception> public void CommonProcessNotify(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); #if (DEBUG) Log4net.log.Error(param + "param"); #endif string sign = GetMd5Sign(encode, param + key); if (sign == dn.Sign)//��֤ǩ�� { OnNotifyEvent(dn); } else { throw new SignVerifyFailedException("֧����֪ͨǩ����֤ʧ��", 102); } } else { throw new CommonAliPayBaseException("֧����֪ͨ��֤ʧ��", 101); } }
/// <summary> /// 交易已创建,等待卖家确认 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_WaitSellerConfirmTrade(object sender, NotifyEventArgs e) { log.Info("交易已创建,等待卖家确认,订单号为:" + e.Out_Trade_No); }
/// <summary> /// 买家付款成功 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ap_WaitSellerSendGoods(object sender, NotifyEventArgs e) { log.Info("买家付款成功,等待卖家发货,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangePayStatus(e.Out_Trade_No, PayStatus.支付成功)) { string remark = e.Trade_Status + " " + e.Refund_Status; lbll.Add(e.Out_Trade_No, remark, OrderStatus.交易关闭.ToString(), "alipay"); } } }
/// <summary> /// /// </summary> /// <param name="e"></param> protected virtual void OnWaitBuyerConfirmGoods(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[waitBuyerConfirmGoodsKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
/// <summary> /// 买家确认收到货,等待支付宝打款给卖家 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_WaitSysPaySeller(object sender, NotifyEventArgs e) { log.Info("买家确认收到货,等待支付宝打款给卖家,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangeOrderStatus(e.Out_Trade_No, OrderStatus.买家确认)) { string remark = e.Trade_Status + " " + e.Refund_Status; lbll.Add(e.Out_Trade_No, remark, OrderStatus.买家确认.ToString(), "alipay"); } } }
/// <summary> /// /// </summary> /// <param name="e"></param> protected virtual void OnWaitSysPaySeller(NotifyEventArgs e) { ProcessNotifyEventHandler eventHandler = eventList[waitSysPaySellerKey] as ProcessNotifyEventHandler; if (eventHandler != null) { eventHandler(this, e); } }
/// <summary> /// 退款关闭 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void ap_RefundClose(object sender, NotifyEventArgs e) { log.Info("退款关闭,订单号为:" + e.Out_Trade_No); CommOrderModel omodel = obll.GetModel(e.Out_Trade_No); if (omodel.PayMethod == PayMethType.支付宝) { if (obll.ChangePayStatus(e.Out_Trade_No, PayStatus.支付成功)) { string remark = "退款关闭,订单重置为支付成功," + e.Trade_Status + " " + e.Refund_Status; lbll.Add(e.Out_Trade_No, remark, PayStatus.支付成功.ToString(), "alipay"); } } }
void ap_NotifyEvent(object sender, NotifyEventArgs e) { Response.Redirect("~/member/ShowOrder.aspx?orderId=" + e.Out_Trade_No); }