예제 #1
0
        /// <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);
                });
            }
        }
예제 #2
0
 /// <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);
 }
예제 #3
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);
 }
예제 #4
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)));
 }