/// <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); }