.NETCore(微信、支付宝支付异步回调通知)

  public ActionResult WxPayNotify()
        {
            log.AddPayLog("WxPayNotify", "开始调用接口");
            string returnCode = "FAIL";
            string returnMsg = "FAIL";
            string result = "<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>";
            try
            {
                log.AddPayLog("WxPayNotify", "--------微信回调--开始--------");
                NLoggerHelper.Default.Info("WxPayNotify---微信回调--开始");
                ResponseHandler resHandler = new ResponseHandler(HttpContext);
                WxPayNotify notify = new WxPayNotify(resHandler);
                NLoggerHelper.Default.Info("WxPayNotify---微信回调--通知参数---" + notify.ToJson());
                log.AddPayLog("WxPayNotify", "--------微信回调--通知参数--------" + notify.ToJson());
                int tenantId = 0;
                if (!notify.Attach.IsNullOrEmpty() && notify.Attach.Split('-').Length > 2)
                {
                    tenantId = notify.Attach.Split('-')[1].ToInt32();
                }

                bool safe = notify.IsSafe();
                if (safe)
                {
                    if (notify.ResultCode.ToLower() == "success")
                    {
                        string orderType = string.Empty;
                        if (!notify.Attach.IsNullOrEmpty())
                        {
                            string[] arr = notify.Attach.Split('-');
                            if (arr.Length >= 2)
                            {
                                orderType = arr[0];
                            }
                        }

                        if (orderType == PayOrderType.RechargeOrder.ToString())
                        {
                            //充值
                            decimal tradeAmount = notify.TotalFee / 100m;
                            bool success = HandleRechargeOrderNotify(notify.OutTradeNo, notify.TransactionId, tradeAmount, notify.TimeEnd, PayWay.WxPay, notify.ToJson());
                            if (success)
                            {
                                returnCode = "SUCCESS";
                                returnMsg = "OK";
                            }
                        }
                        else
                        {
                            NLoggerHelper.Default.Info("WxPayNotify---微信回调--未知订单类型");
                            log.AddPayLog("WxPayNotify", "--------微信回调--未知订单类型--------");
                        }

                    }
                    else
                    {
                        NLoggerHelper.Default.Info("WxPayNotify---微信回调--交易失败");
                        log.AddPayLog("WxPayNotify", "--------微信回调--交易失败--------");
                    }
                }
                else
                {
                    NLoggerHelper.Default.Info("WxPayNotify---微信回调--参数安全认证失败");
                    log.AddPayLog("WxPayNotify", "--------微信回调--参数安全认证失败--------");
                }

                result = string.Format(result, returnCode, returnMsg);
                NLoggerHelper.Default.Info("WxPayNotify---微信回调--结束:" + result);
                log.AddPayLog("WxPayNotify", "--------微信回调--结束--------" + result);
            }
            catch (Exception ex)
            {
                NLoggerHelper.Default.Info("WxPayNotify---微信回调--异常:" + ex.ToString());
                log.AddPayLog("WxPayNotify", "--------微信回调--异常:" + ex.ToString());
            }
            return Content(result, "text/xml");
        }
public ActionResult AliPayNotify()
        {
            string result = "fail";
            try
            {
                NLoggerHelper.Default.Info("AliPayNotify---支付宝回调---开始");
                log.AddPayLog("AliPayNotify", "--------支付宝回调--开始--------");

                var httpRequest = HttpContext.Request;
                AliPayNotify notify = new AliPayNotify(httpRequest);
                NLoggerHelper.Default.Info("AliPayNotify---支付宝回调---通知参数---" + notify.ToJson());
                log.AddPayLog("AliPayNotify", "--------支付宝回调--通知参数--------" + notify.ToJson());
                if (notify.IsSafe)
                {
                    //交易支付成功
                    if (notify.TradeStatus == AliPayTradeStatus.TRADE_SUCCESS.ToString())
                    {
                        string orderType = string.Empty;
                        if (!notify.PassbackParams.IsNullOrEmpty())
                        {
                            string[] arr = notify.PassbackParams.Split('-');
                            if (arr.Length >= 2)
                            {
                                orderType = arr[0];
                            }
                        }
                        else
                        {
                            string[] arr = notify.Body.Split('-');
                            if (arr.Length >= 2)
                            {
                                orderType = arr[0];
                            }
                        }

                        if (orderType == PayOrderType.RechargeOrder.ToString())
                        {
                            //充值
                            bool success = HandleRechargeOrderNotify( notify.OutTradeNo, notify.TradeNo, notify.TotalAmount, notify.GmtPayment, PayWay.AliPay, notify.ToJson());
                            if (success)
                            {
                                result = "success";
                            }
                        }
                        else
                        {
                            NLoggerHelper.Default.Info("AliPayNotify---支付宝回调--未知订单类型");
                            log.AddPayLog("AliPayNotify", "--------支付宝回调--未知订单类型--------");
                        }
                    }
                    else
                    {
                        NLoggerHelper.Default.Info("AliPayNotify---支付宝回调--交易失败");
                        log.AddPayLog("AliPayNotify", "--------支付宝回调--交易失败--------");
                    }
                }
                else
                {
                    NLoggerHelper.Default.Info("AliPayNotify---支付宝回调--参数安全认证失败");
                    log.AddPayLog("AliPayNotify", "--------支付宝回调--参数安全认证失败--------");
                }
                log.AddPayLog("AliPayNotify", "--------支付宝回调--结束--------" + result);
            }
            catch (Exception ex)
            {
                NLoggerHelper.Default.Info("AliPayNotify---支付宝回调--异常:" + ex.ToString());
            }
            return Content(result);
        }

相关类:

public class AliPayNotify
    {
        HttpRequest request = null;

        public AliPayNotify(HttpRequest httpRequest)
        {
            request = httpRequest;
        }

        public bool IsSafe {
            get {
                bool safe = false;

                //验证商户
                if (AppId == AliPay.AppId)
                {
                    //获取当前请求中的post参数
                    var dict = new Dictionary<string, string>();
                    var keys = request.Form.Keys;
                    if (keys != null)
                    {
                        foreach (string key in keys)
                        {
                            dict.Add(key, request.Form[key]);
                        }
                    }

                    if (dict.Count > 0)
                    {
                        safe = AlipaySignature.RSACheckV1(dict, AliPay.AliPublicKey, AliPay.Charset, AliPay.SignType, false);
                    }
                }

                return safe;
            }
        }

        #region 通知参数
        /// <summary>
        /// 通知时间
        /// </summary>
        public DateTime NotifyTime {
            get {
                return Convert.ToDateTime(request.Form["notify_time"]);
            }
        }
        /// <summary>
        /// 通知类型
        /// </summary>
        public string NotifyType {
            get {
                return request.Form["notify_type"];
            }
        }
        /// <summary>
        /// 通知校验id
        /// </summary>
        public string NotifyId {
            get {
                return request.Form["notify_id"];
            }
        }
        /// <summary>
        /// 支付宝分配给开发者的应用Id
        /// </summary>
        public string AppId {
            get {
                return request.Form["app_id"];
            }
        }
        /// <summary>
        /// 编码格式,如utf-8、gbk、gb2312等
        /// </summary>
        public string Charset {
            get {
                return request.Form["charset"];
            }
        }
        /// <summary>
        /// 调用的接口版本
        /// </summary>
        public string Version {
            get {
                return request.Form["version"];
            }
        }
        /// <summary>
        /// 签名类型
        /// </summary>
        public string SignType {
            get {
                return request.Form["sign_type"];
            }
        }
        /// <summary>
        /// 签名
        /// </summary>
        public string Sign {
            get {
                return request.Form["sign"];
            }
        }
        /// <summary>
        /// 支付宝交易号
        /// </summary>
        public string TradeNo {
            get {
                return request.Form["trade_no"];
            }
        }
        /// <summary>
        /// 商户订单号
        /// </summary>
        public string OutTradeNo {
            get {
                return request.Form["out_trade_no"];
            }
        }
        /// <summary>
        /// 商户业务号,主要是退款通知中返回退款申请的流水号
        /// </summary>
        public string OutBizNo {
            get {
                return request.Form["out_biz_no"];
            }
        }
        /// <summary>
        /// 买家支付宝用户号
        /// </summary>
        public string BuyerId {
            get {
                return request.Form["buyer_id"];
            }
        }
        /// <summary>
        /// 买家支付宝账号
        /// </summary>
        public string BuyerLogonId {
            get {
                return request.Form["buyer_logon_id"];
            }
        }
        /// <summary>
        /// 卖家支付宝用户号
        /// </summary>
        public string SellerId {
            get {
                return request.Form["seller_id"];
            }
        }
        /// <summary>
        /// 卖家支付宝账号
        /// </summary>
        public string SellerEmail {
            get {
                return request.Form["seller_email"];
            }
        }
        /// <summary>
        /// 交易状态 WAIT_BUYER_PAY 交易创建,等待买家付款, TRADE_CLOSED 未付款交易超时关闭,或支付完成后全额退款, TRADE_SUCCESS 交易支付成功, TRADE_FINISHED 交易结束,不可退款
        /// </summary>
        public string TradeStatus {
            get {
                return request.Form["trade_status"];
            }
        }
        /// <summary>
        /// 订单金额(元)
        /// </summary>
        public decimal TotalAmount {
            get {
                return string.IsNullOrEmpty(request.Form["total_amount"]) ? 0 : Convert.ToDecimal(request.Form["total_amount"]);
            }
        }
        /// <summary>
        /// 实收金额 商家在交易中实际收到的款项,单位为元
        /// </summary>
        public decimal ReceiptAmount {
            get {
                return string.IsNullOrEmpty(request.Form["receipt_amount"]) ? 0 : Convert.ToDecimal(request.Form["receipt_amount"]);
            }
        }
        /// <summary>
        /// 开票金额 用户在交易中支付的可开发票的金额
        /// </summary>
        public decimal InvoiceAmount {
            get {
                return string.IsNullOrEmpty(request.Form["invoice_amount"]) ? 0 : Convert.ToDecimal(request.Form["invoice_amount"]);
            }
        }
        /// <summary>
        /// 付款金额 用户在交易中支付的金额
        /// </summary>
        public decimal BuyerPayAmount {
            get {
                return string.IsNullOrEmpty(request.Form["buyer_pay_amount"]) ? 0 : Convert.ToDecimal(request.Form["buyer_pay_amount"]);
            }
        }
        /// <summary>
        /// 集分宝金额 使用集分宝支付的金额
        /// </summary>
        public decimal PointAmount {
            get {
                return string.IsNullOrEmpty(request.Form["point_amount"]) ? 0 : Convert.ToDecimal(request.Form["point_amount"]);
            }
        }
        /// <summary>
        /// 总退款金额
        /// </summary>
        public decimal RefundFee {
            get {
                return string.IsNullOrEmpty(request.Form["refund_fee"]) ? 0 : Convert.ToDecimal(request.Form["refund_fee"]);
            }
        }
        /// <summary>
        /// 订单标题
        /// </summary>
        public string Subject {
            get {
                return request.Form["subject"];
            }
        }
        /// <summary>
        /// 商品描述
        /// </summary>
        public string Body {
            get {
                return request.Form["body"];
            }
        }
        /// <summary>
        /// 交易创建时间 该笔交易创建的时间。格式为yyyy-MM-dd HH:mm:ss
        /// </summary>
        public DateTime GmtCreate {
            get {
                return string.IsNullOrEmpty(request.Form["gmt_create"]) ? DateTime.MinValue : Convert.ToDateTime(request.Form["gmt_create"]);
            }
        }
        /// <summary>
        /// 交易付款时间 该笔交易的买家付款时间。格式为yyyy-MM-dd HH:mm:ss
        /// </summary>
        public DateTime GmtPayment {
            get {
                return string.IsNullOrEmpty(request.Form["gmt_payment"]) ? DateTime.MinValue : Convert.ToDateTime(request.Form["gmt_payment"]);
            }
        }
        /// <summary>
        /// 交易退款时间 该笔交易的退款时间。格式为yyyy-MM-dd HH:mm:ss.S
        /// </summary>
        public DateTime GmtRefund {
            get {
                return string.IsNullOrEmpty(request.Form["gmt_refund"]) ? DateTime.MinValue : Convert.ToDateTime(request.Form["gmt_refund"]);
            }
        }
        /// <summary>
        /// 交易结束时间 该笔交易结束时间。格式为yyyy-MM-dd HH:mm:ss
        /// </summary>
        public DateTime GmtClose {
            get {
                return string.IsNullOrEmpty(request.Form["gmt_close"]) ? DateTime.MinValue : Convert.ToDateTime(request.Form["gmt_close"]);
            }
        }
        /// <summary>
        /// 支付金额信息 支付成功的各个渠道金额信息  [{“amount”:“15.00”,“fundChannel”:“ALIPAYACCOUNT”}]
        /// </summary>
        public string FundBillList {
            get {
                return request.Form["fund_bill_list"];
            }
        }
        /// <summary>
        /// 回传参数,如果请求时传递了该参数,则返回给商户时会在异步通知时将该参数原样返回。
        /// </summary>
        public string PassbackParams {
            get {
                return HttpUtility.UrlDecode(request.Form["passback_params"]);
            }
        }
        /// <summary>
        /// 优惠券信息 本交易支付时所使用的所有优惠券信息 
        /// </summary>
        public string VoucherDetailList {
            get {
                return request.Form["voucher_detail_list"];
            }
        }
        #endregion

    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值