Пример #1
0
        public async Task <PaymentTransactionResponse> CreateAsync(PaymentRequest req)
        {
            // Amount (https://docs.borgun.is/paymentgateways/bapi/rpg/payments.html)
            // Required Transaction amount, including two decimal points, i.e. 100 USD is 10000.
            // An exception is JPY, it contains no decimal points.

            // We handle this here, no reason to leave this to caller
            if (req.Amount.HasValue && req.Currency != Currency.JPY.ToString())
            {
                req.Amount *= 100;
            }

            var paymentRes = new PaymentTransactionResponse();

            var resp = await DefaultPolly.PurchaseTransactionPolicy()
                       .ExecuteAsync(() => _client.PostAsJsonAsync("payment", req))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            paymentRes.Transaction = await resp.Content.ReadAsAsync <TransactionInfo>().ConfigureAwait(false);

            if (resp.Headers.Location != null)
            {
                paymentRes.Uri = resp.Headers.Location.AbsoluteUri;
            }

            return(paymentRes);
        }
        public async Task DisableAsync(string token)
        {
            var resp = await DefaultPolly.Policy()
                       .ExecuteAsync(() => _client.PutAsync("token/single/" + token + "/disable", null))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);
        }
Пример #3
0
        public async Task <TokenMultiInfo> GetAsync(string token)
        {
            var resp = await DefaultPolly.Policy()
                       .ExecuteAsync(() => _client.GetAsync("token/multi/" + token))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            return(await resp.Content.ReadAsAsync <TokenMultiInfo>().ConfigureAwait(false));
        }
Пример #4
0
        public async Task <RefundAuthorizationResponse> RefundAsync(string transactionId)
        {
            var resp = await DefaultPolly.PurchaseTransactionPolicy()
                       .ExecuteAsync(() => _client.PutAsync("payment/" + transactionId + "/refund", null))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            return(await resp.Content.ReadAsAsync <RefundAuthorizationResponse>().ConfigureAwait(false));
        }
Пример #5
0
        public async Task <TransactionInfo> GetTransactionAsync(string transactionId)
        {
            var resp = await DefaultPolly.Policy()
                       .ExecuteAsync(() => _client.GetAsync("payment/" + transactionId))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            return(await resp.Content.ReadAsAsync <TransactionInfo>().ConfigureAwait(false));
        }
Пример #6
0
        public async Task <ValidationResponse> PaResValidationAsync(string PARes)
        {
            var resp = await DefaultPolly.Policy()
                       .ExecuteAsync(() => _client.PostAsJsonAsync("mpi/v2/validation", new { PARes }))
                       .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            return(await resp.Content.ReadAsAsync <ValidationResponse>().ConfigureAwait(false));
        }
Пример #7
0
        public async Task <EnrollmentResponse> EnrollAsync(EnrollmentRequest req)
        {
            return(await Policy <EnrollmentResponse>
                   .HandleResult(r => IsRetryableMdStatus(r.MdStatus))
                   .WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)))
                   .ExecuteAsync(async() =>
            {
                var resp = await DefaultPolly.Policy()
                           .ExecuteAsync(() => _client.PostAsJsonAsync("mpi/v2/enrollment", req))
                           .ConfigureAwait(false);

                await HandleErrorResponseAsync(resp).ConfigureAwait(false);

                return await resp.Content.ReadAsAsync <EnrollmentResponse>()
                .ConfigureAwait(false);
            })
                   .ConfigureAwait(false));
        }
        public async Task <TokenSingleResponse> CreateAsync(TokenSingleRequest req)
        {
            var tokenRes = new TokenSingleResponse();
            var resp     = await DefaultPolly.Policy()
                           .ExecuteAsync(() => _client.PostAsJsonAsync("token/single", req))
                           .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            tokenRes.Token = await resp.Content.ReadAsAsync <TokenSingleInfo>()
                             .ConfigureAwait(false);

            if (resp.Headers.Location != null)
            {
                tokenRes.Uri = resp.Headers.Location.AbsoluteUri;
            }

            return(tokenRes);
        }
Пример #9
0
        public async Task <TokenMultiResponse> CreateAsync(TokenMultiRequest req)
        {
            // See notes in PaymentAPI
            if (req.VerifyCard != null && req.VerifyCard.Currency != Currency.JPY.ToString())
            {
                req.VerifyCard.CheckAmount *= 100;
            }

            var tokenRes = new TokenMultiResponse();
            var resp     = await DefaultPolly.Policy()
                           .ExecuteAsync(() => _client.PostAsJsonAsync("token/multi", req))
                           .ConfigureAwait(false);

            await HandleErrorResponseAsync(resp).ConfigureAwait(false);

            tokenRes.Token = await resp.Content.ReadAsAsync <TokenMultiInfo>().ConfigureAwait(false);

            if (resp.Headers.Location != null)
            {
                tokenRes.Uri = resp.Headers.Location.AbsoluteUri;
            }

            return(tokenRes);
        }