public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request) { var apiHost = await _appSettingService.Get(ShopKeys.ApiHost); var wxRequest = new WeChatPayUnifiedOrderRequest { Body = request.Subject, OutTradeNo = request.OrderNo, TotalFee = Convert.ToInt32(request.TotalAmount * 100), OpenId = request.OpenId, TradeType = "JSAPI", SpbillCreateIp = "127.0.0.1", NotifyUrl = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}", }; var response = await _client.ExecuteAsync(wxRequest); if (response?.ReturnCode == "SUCCESS" && response?.ResultCode == "SUCCESS") { var req = new WeChatPayLiteAppCallPaymentRequest { Package = "prepay_id=" + response.PrepayId }; // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 // 将参数(parameter)给 小程序前端 让他调起支付API var parameter = await _client.ExecuteAsync(req); var json = JsonConvert.SerializeObject(parameter); return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json)); } throw new Exception(response?.ReturnMsg); }
public async Task CreatingACaptureRequest_Serailizes_AsExepceted() { var handler = new FakeDelegatingHandler(); var client = new HttpClient(handler) { BaseAddress = GetUri() }; handler.FakeResponseList.Add(new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.OK, Content = new StringContent(PaymentOrderResponse) }); PaymentOrderRequest paymentOrderRequest = GetPaymentOrderRequest(); var sut = await new PaymentOrdersResource(client).Create(paymentOrderRequest); Assert.NotNull(sut.PaymentOrder); Assert.NotNull(sut.Operations); Assert.NotNull(sut.Operations.Abort); Assert.NotNull(sut.Operations.Cancel); Assert.NotNull(sut.Operations.Capture); Assert.NotNull(sut.Operations.Reverse); Assert.NotNull(sut.Operations.Update); Assert.NotNull(sut.Operations.View); }
public PaymentOrderRequest Build() { var req = new PaymentOrderRequest(this.operation, this.currency, this.amount, this.vatAmount, this.description, this.userAgent, this.language, this.generateRecurrenceToken, this.urls, this.payeeInfo); req.PaymentOrder.OrderItems = orderItems; req.PaymentOrder.Metadata = metadata; return(req); }
public async Task <IPaymentOrderResponse> CreatePaymentOrder(string consumerProfileRef = null) { var totalAmount = this.cartService.CalculateTotal(); Payer payer = null; if (!string.IsNullOrWhiteSpace(consumerProfileRef)) { payer = new Payer { ConsumerProfileRef = consumerProfileRef }; } var orderItems = this.cartService.CartLines.ToOrderItems(); var paymentOrderItems = orderItems?.ToList(); try { var paymentOrderRequest = new PaymentOrderRequest(Operation.Purchase, new Currency("SEK"), new Amount(totalAmount), new Amount(0), "Test description", "useragent", new Language("sv-SE"), false, new Urls(this.urls.HostUrls.ToList(), this.urls.CompleteUrl, this.urls.TermsOfServiceUrl) { CancelUrl = this.urls.CancelUrl, PaymentUrl = this.urls.PaymentUrl, CallbackUrl = this.urls.CallbackUrl, LogoUrl = this.urls.LogoUrl }, new PayeeInfo(this.payeeInfoOptions.PayeeId, this.payeeInfoOptions.PayeeReference)); paymentOrderRequest.PaymentOrder.OrderItems = paymentOrderItems; paymentOrderRequest.PaymentOrder.Payer = payer; var paymentOrder = await this.swedbankPayClient.PaymentOrders.Create(paymentOrderRequest); this.cartService.PaymentOrderLink = paymentOrder.PaymentOrder.Id.OriginalString; this.cartService.PaymentLink = null; this.cartService.Update(); return(paymentOrder); } catch (Exception ex) { Debug.Write(ex.Message); return(null); } }
public async Task <PaymentOrderBaseResponse> GeneratePaymentOrder(PaymentOrderRequest request) { var ip = Dns.GetHostEntry(Dns.GetHostName()) .AddressList.FirstOrDefault(address => address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)?.ToString() ?? "127.0.0.1"; var apiHost = await _appSettingService.Get(ShopKeys.ApiHost); var wxRequest = new WeChatPayUnifiedOrderRequest { Body = request.Subject, OutTradeNo = request.OrderNo, TotalFee = Convert.ToInt32(request.TotalAmount * 100), OpenId = request.OpenId, TradeType = "JSAPI", //SpbillCreateIp = "127.0.0.1", SpBillCreateIp = ip, NotifyUrl = $"{apiHost.Trim('/')}/api/mp/pay/notify/{request.OrderNo}", }; var config = await _appSettingService.Get <MiniProgramOptions>(); var opt = new WeChatPayOptions() { AppId = config.AppId, MchId = config.MchId, Secret = config.AppSecret, Key = config.Key }; var response = await _client.ExecuteAsync(wxRequest, opt); if (response?.ReturnCode == WeChatPayCode.Success && response?.ResultCode == WeChatPayCode.Success) { var req = new WeChatPayLiteAppSdkRequest { Package = $"prepay_id={response.PrepayId}" }; // https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5 // 将参数(parameter)给 小程序前端 让他调起支付API var parameter = await _client.ExecuteAsync(req, opt); var json = JsonConvert.SerializeObject(parameter); return(JsonConvert.DeserializeObject <PaymentOrderResponse>(json)); } throw new Exception(response?.ReturnMsg); }
public async Task Then_Returns_View_With_Correct_Model( PaymentOrderRequest request, PaymentOrderViewModel viewModel, [Frozen] Mock <IModelMapper> mockMapper, PaymentOrderController controller) { mockMapper .Setup(mapper => mapper.Map <PaymentOrderViewModel>(request)) .ReturnsAsync(viewModel); var result = await controller.ProviderPaymentOrder(request) as ViewResult; result.ViewName.Should().BeNull(); var model = result.Model as PaymentOrderViewModel; model.Should().BeSameAs(viewModel); }
public IActionResult SavePaymentOrder(PaymentOrderRequest request) { if (ModelState.IsValid) { SingleResponse <long> response = new SingleResponse <long>(); XBS.ActionResult result = _xBService.SavePaymentOrder(request.Order); response.Result = result.Id; response.ResultCode = ResultCodeFormatter.FromPersonalAccountSecurityService(result.ResultCode); response.Description = Utils.GetActionResultErrors(result.Errors); return(ResponseExtensions.ToHttpResponse(response)); } else { return(ValidationError.GetValidationErrorResponse(ModelState)); } }
public async Task WhenSendingACaptureRequest_WeDoNotCrash_AndGiveAReasonableError() { var handler = new FakeDelegatingHandler(); var client = new HttpClient(handler) { BaseAddress = GetUri() }; handler.FakeResponseList.Add(new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.OK, Content = new StringContent(PaymentOrderResponse) }); handler.FakeResponseList.Add(new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.BadRequest, Content = new StringContent(@" { ""sessionId"": ""27146bc5-269e-4b69-a25b-16308f4b481f"", ""type"": ""https://api.payex.com/psp/errordetail/forbidden"", ""title"": ""Operation not allowed"", ""status"": 403, ""instance"": ""http://api.externalintegration.payex.com/psp/paymentorders/74fa6203-e59a-43e0-0f44-08d7da0988bc/captures"", ""detail"": ""Payment check failed, description in problems node!"", ""problems"": [ { ""name"": ""Capture"", ""description"": ""Capture amount too high."" } ] } ") }); PaymentOrderCaptureRequest captureRequest = GetTestPaymentOrderCaptureRequest(); PaymentOrderRequest paymentOrderRequest = GetPaymentOrderRequest(); var sut = await new PaymentOrdersResource(client).Create(paymentOrderRequest); var result = await Assert.ThrowsAsync <HttpResponseException>(() => sut.Operations.Capture(captureRequest)); Assert.Equal(1, result.Data.Count); }
public PaymentOrderRequestDto(PaymentOrderRequest paymentOrderRequest) { PaymentOrder = new PaymentOrderRequestDetailsDto(paymentOrderRequest.PaymentOrder); }
public async Task <ActionResult> ProviderPaymentOrder(PaymentOrderRequest request) { var viewModel = await _modelMapper.Map <PaymentOrderViewModel>(request); return(View(viewModel)); }