using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using PaySharp.Alipay.Domain; using PaySharp.Alipay.Request; using PaySharp.Core.Request; namespace PaySharp.Alipay.Response { public class BarcodePayResponse : BaseResponse { /// /// 支付宝交易号 /// public string TradeNo { get; set; } /// /// 商户订单号 /// public string OutTradeNo { get; set; } /// /// 买家支付宝账号 /// public string BuyerLogonId { get; set; } /// /// 订单金额 /// public double TotalAmount { get; set; } /// /// 标价币种 /// public string TransCurrency { get; set; } /// /// 结算币种 /// public string SettleCurrency { get; set; } /// /// 结算金额 /// public double SettleAmount { get; set; } /// /// 支付币种 /// public string PayCurrency { get; set; } /// /// 支付金额 /// public double PayAmount { get; set; } /// /// 结算币种兑换标价币种汇率 /// public double SettleTransRate { get; set; } /// /// 标价币种兑换支付币种汇率 /// public double TransPayRate { get; set; } /// /// 实收金额 /// public double ReceiptAmount { get; set; } /// /// 付款金额 /// public double BuyerPayAmount { get; set; } /// /// 集分宝金额 /// public double PointAmount { get; set; } /// /// 开票金额 /// public double InvoiceAmount { get; set; } /// /// 交易付款时间 /// public DateTime GmtPayment { get; set; } /// /// 交易支付使用的资金渠道 /// public List FundBillList { get; set; } /// /// 支付宝卡余额 /// public double CardBalance { get; set; } /// /// 发生支付交易的商户门店名称 /// public string StoreName { get; set; } /// /// 买家支付宝用户号 /// public string BuyerUserId { get; set; } /// /// 本交易支付时使用的所有优惠券信息 /// public string DiscountGoodsDetail { get; set; } /// /// 本交易支付时使用的所有优惠券信息 /// public List VoucherDetailList { get; set; } /// /// 预授权支付模式,该参数仅在信用预授权支付场景下返回。信用预授权支付:CREDIT_PREAUTH_PAY /// public string AuthTradePayMode { get; set; } /// /// 商户传入业务信息,具体值要和支付宝约定 /// 将商户传入信息分发给相应系统,应用于安全,营销等参数直传场景 /// 格式为json格式 /// public string BusinessParams { get; set; } /// /// 买家用户类型 /// CORPORATE:企业用户 /// PRIVATE:个人用户 /// public string BuyerUserType { get; set; } /// /// 商家优惠金额 /// public double MdiscountAmount { get; set; } /// /// 平台优惠金额 /// public double DiscountAmount { get; set; } private Merchant _merchant; internal override void Execute(Merchant merchant, Request request) { _merchant = merchant; var barcodePayRequest = request as BarcodePayRequest; if (Code == "10000") { barcodePayRequest.OnPaySucceed(this, null); return; } if (!string.IsNullOrEmpty(TradeNo)) { var queryResponse = new QueryResponse(); Task.Run(async () => { queryResponse = await PollQueryTradeStateAsync( TradeNo, barcodePayRequest.PollTime, barcodePayRequest.PollCount); }) .GetAwaiter() .GetResult(); if (queryResponse != null) { barcodePayRequest.OnPaySucceed(queryResponse, null); return; } else { barcodePayRequest.OnPayFailed(this, "支付超时"); return; } } barcodePayRequest.OnPayFailed(this, SubMessage); } /// /// 轮询查询用户是否支付 /// /// 支付宝订单号 /// 轮询间隔 /// 轮询次数 /// private QueryResponse PollQueryTradeState(string tradeNo, int pollTime, int pollCount) { for (var i = 0; i < pollCount; i++) { var queryRequest = new QueryRequest(); queryRequest.AddGatewayData(new QueryModel { TradeNo = tradeNo }); var queryResponse = SubmitProcess.Execute(_merchant, queryRequest); if (queryResponse.TradeStatus == "TRADE_SUCCESS") { return queryResponse; } Thread.Sleep(pollTime); } //支付超时,取消订单 var cancelRequest = new CancelRequest(); cancelRequest.AddGatewayData(new CancelModel { TradeNo = tradeNo }); SubmitProcess.Execute(_merchant, cancelRequest); return null; } /// /// 轮询查询用户是否支付 /// /// 支付宝订单号 /// 轮询间隔 /// 轮询次数 /// private async Task PollQueryTradeStateAsync(string tradeNo, int pollTime, int pollCount) { return await Task.Run(() => PollQueryTradeState(tradeNo, pollTime, pollCount)); } } }