/// <summary> /// 执行回调逻辑 /// </summary> /// <param name="key">支付业务关键字</param> /// <param name="outTradeNo">商户系统的订单号</param> /// <param name="totalFee">金额(单位:分)</param> /// <param name="transactionId">微信支付订单号</param> /// <returns></returns> public async Task ExecuteCallback(string key, string outTradeNo, string transactionId, decimal totalFee) { using (var obj = _iocManager.ResolveAsDisposable <TransactionLogHelper>()) { //更新交易日志 await obj.Object.UpdateAsync(outTradeNo, transactionId, async (unitOfWork, logInfo) => { var data = logInfo.CustomData.FromJsonString <JObject>(); Logger?.Info($"正在执行【{key}】回调逻辑。data:{data?.ToJsonString()}"); if (!decimal.Equals(logInfo.Currency.CurrencyValue, totalFee)) { throw new UserFriendlyException( $"支付金额不一致:要求支付金额为:{logInfo.Currency.CurrencyValue},实际支付金额为:{totalFee}"); } var paymentCallbackAction = PaymentCallbackActions?.FirstOrDefault(p => p.Key == key); if (paymentCallbackAction == null) { throw new UserFriendlyException($"Key:{key} 不存在,请使用Register方法进行注册"); } await paymentCallbackAction.Process(unitOfWork, logInfo); }); } }
/// <summary> /// 卸载 /// </summary> /// <param name="paymentCallbackAction"></param> /// <returns></returns> public async Task UnRegisterCallbackAction(IPaymentCallbackAction paymentCallbackAction) { if (await IsRegisterCallbackAction(paymentCallbackAction)) { PaymentCallbackActions.Remove(PaymentCallbackActions.First(p => p.Key == paymentCallbackAction.Key)); } await Task.FromResult(0); }
/// <summary> /// 注册回调逻辑 /// </summary> /// <param name="paymentCallbackAction"></param> /// <returns></returns> public virtual async Task RegisterCallbackAction(IPaymentCallbackAction paymentCallbackAction) { if (!await IsRegisterCallbackAction(paymentCallbackAction)) { PaymentCallbackActions.Add(paymentCallbackAction); } await Task.FromResult(0); }
/// <summary> /// 是否注册回调逻辑 /// </summary> /// <param name="paymentCallbackAction"></param> /// <returns></returns> public virtual async Task <bool> IsRegisterCallbackAction(IPaymentCallbackAction paymentCallbackAction) { return(await Task.FromResult(PaymentCallbackActions.Contains(paymentCallbackAction) || PaymentCallbackActions.Any(p => p.Key == paymentCallbackAction.Key))); }