Ejemplo n.º 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);
        }
Ejemplo n.º 2
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));
        }