コード例 #1
0
        public async Task <IHttpActionResult> CompletePayment(WechatPaymentNotificationModel notification)
        {
            if (notification == null || !notification.IsValid())
            {
                return(Ok(GetErrorModel(ApiErrorCode.InvalidData)));
            }
            using (var context = new TasteContext())
            {
                var payment = context.Payments.FirstOrDefault(o => o.TransactionId == notification.TransactionId);
                if (payment == null || payment.Success)
                {
                    return(Ok());
                }
                var order = context.Orders.FirstOrDefault(o =>
                                                          o.OrderId == payment.OrderId && o.UserId == payment.UserId);
                if (order == null)
                {
                    return(Ok());
                }
                var restaurant = context.Restaurants.FirstOrDefault(r => r.Id == order.RestaurantId);
                if (restaurant == null)
                {
                    return(Ok());
                }

                var merchantId  = ConfigurationManager.AppSettings.Get("WeChatMerchantId");
                var merchantKey = ConfigurationManager.AppSettings.Get("WeChatMerchantKey");

                var paymentMade = await WechatPayHttpClient.CheckIfPaymentIsPaidAsync(payment.TransactionId, ConfigurationManager.AppSettings.Get("WeChatMiniProgramAppId"), merchantId, merchantKey);

                if (!paymentMade)
                {
                    return(Ok(GetErrorModel(ApiErrorCode.PaymentNotMade)));
                }

                payment.Success = true;
                order.Paid      = true;
                restaurant.OustandingBalance += Convert.ToInt32(notification.Total / restaurant.ExchangeRate);
                context.SaveChanges();

                return(Ok());
            }
        }