/// <summary> /// 解析支付结果 /// </summary> /// <param name="data">业务数据报文</param> /// <param name="resultInfo">支付结果记录</param> /// <returns></returns> public override ExecuteResult <PayNotifyInfo> ResolveRequest(string data, PayResultInfo resultInfo) { var result = new ExecuteResult <PayNotifyInfo>(); try { var paramsData = new ParameterData(); paramsData.FromUrl(data); resultInfo.OrderId = paramsData.GetValue("out_trade_no"); resultInfo.TradeNo = paramsData.GetValue("trade_no"); resultInfo.PaymentAmt = Convert.ToDecimal(paramsData.GetValue("total_fee")); string tradeStatus = paramsData.GetValue("trade_status"); var tradeResult = (tradeStatus == "TRADE_FINISHED" || tradeStatus == "TRADE_SUCCESS") ? ResultStatus.Success : ResultStatus.Failure; resultInfo.ResultDesc = tradeStatus; resultInfo.ExecuteResult = (int)tradeResult; result.Data = this.GetPayNotifyInfo(resultInfo); result.Status = ResultStatus.Success; } catch { result.Status = ResultStatus.Error; resultInfo.ResultDesc = result.Message = "解析支付结果参数失败"; resultInfo.ExecuteResult = (int)ResultStatus.Error; PayResultDAL.Update(resultInfo); } return(result); }
/// <summary> /// 解析支付结果 /// </summary> /// <param name="data">业务数据报文</param> /// <param name="resultInfo">支付结果记录</param> /// <returns></returns> public override ExecuteResult <PayNotifyInfo> ResolveRequest(string data, PayResultInfo resultInfo) { var result = new ExecuteResult <PayNotifyInfo>(); try { var notifyData = new ParameterData(); notifyData.FromUrl(data); resultInfo.OrderId = notifyData.GetValue("orderNo"); resultInfo.TradeNo = notifyData.GetValue("paymentOrderId"); resultInfo.PaymentAmt = Convert.ToDecimal(notifyData.GetValue("payAmount")) / 100;//通联支付金额单位为“分”,所以除以100 string tradeStatus = notifyData.GetValue("payResult"); var tradeResult = tradeStatus == "1" ? ResultStatus.Success : ResultStatus.Failure; resultInfo.ResultDesc = tradeStatus; resultInfo.ExecuteResult = (int)tradeResult; result.Data = this.GetPayNotifyInfo(resultInfo); result.Status = ResultStatus.Success; } catch { result.Status = ResultStatus.Error; result.Message = "解析支付结果参数失败"; } return(result); }
/// <summary> /// 校验支付结果请求 /// </summary> /// <param name="data">业务数据报文</param> /// <param name="resultInfo">支付结果记录</param> /// <returns></returns> public override ExecuteResult CheckRequest(string data, PayResultInfo resultInfo) { var result = new ExecuteResult(); var paramsData = new ParameterData(); paramsData.FromUrl(data); var paramsDict = paramsData.GetValues(); //判断是否有带返回参数 if (paramsDict.Count == 0) { result.Status = ResultStatus.Failure; result.Message = resultInfo.ResultDesc = "支付结果无通知参数"; resultInfo.ExecuteResult = (int)ResultStatus.Failure; PayResultDAL.Update(resultInfo); return(result); } //校验请求报文 resultInfo.OrderId = paramsData.GetValue("out_trade_no"); var aliNotify = new AlipayNotify(); bool verifyResult = aliNotify.Verify(paramsDict, paramsData.GetValue("notify_id"), paramsData.GetValue("sign")); if (!verifyResult) { result.Status = ResultStatus.Failure; result.Message = resultInfo.ResultDesc = "verify failed"; resultInfo.ExecuteResult = (int)ResultStatus.Failure; PayResultDAL.Update(resultInfo); return(result); } result.Status = ResultStatus.Success; return(result); }