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()); } }