Esempio n. 1
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 9
0
 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));
        }