예제 #1
0
        /// <summary>
        /// 处理支付平台通知
        /// 支付宝是用POST方式发送通知信息
        /// </summary>
        /// <param name="param">支付平台通知参数</param>
        /// <returns></returns>
        public override Result <Notification> HandleNotify(PaymentParam param)
        {
            var now          = DateTime.Now;
            var input        = param.ToXml();
            var notification = new Notification(Platform.Id, input, "fail");
            var result       = new Result <Notification>(false, notification);

            OnTraced("支付宝支付 通知数据", input);

            var isValid = VerifySign(param);

            if (isValid)
            {
                result.Data.PayId  = param.GetString("out_trade_no");       //商户订单号
                result.Data.PayNo  = param.GetString("trade_no");           //支付宝交易号
                result.Data.Amount = param.GetDecimal("total_fee");         //支付金额
                result.Data.PaidOn = param.GetDateTime("gmt_payment", now); //支付时间

                result.Data.State = param.GetString("extra_common_param");  //扩展字段 支付平台原样返回

                var tradeStatus = param.GetString("trade_status");          //交易状态

                if (tradeStatus == "TRADE_FINISHED" || tradeStatus == "TRADE_SUCCESS")
                {
                    var status = OnNotified(notification);
                    if (status)
                    {
                        result.Status = true;
                        result.Data.SetOutput("success");

                        OnTraced("支付宝支付 处理通知成功", result.Data.PayId);
                    }
                    else
                    {
                        result.Message = "支付宝支付 处理通知失败 OnNotified 返回 false";

                        OnTraced("支付宝支付 处理通知失败", "OnNotified 返回 false");
                    }
                }
                else
                {
                    result.Message = "支付宝支付 处理通知失败 交易状态错误 " + tradeStatus;

                    OnTraced("支付宝支付 处理通知失败 交易状态错误", tradeStatus);
                }
            }
            else
            {
                result.Message = "支付宝支付 处理通知失败 签名或通知验证失败";

                OnTraced("支付宝支付 处理通知失败 处理通知失败 签名或通知验证失败", string.Empty);
            }
            return(result);
        }