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