Stripe API: как узнать обменный курс и сумму в иностранной валюте для трансграничного перевода на учетную запись Connect?
Я использую Stripe для обработки платежей. У меня есть платформа, на которой международные учетные записи Connect могут продавать товары другим через мою платформу.
Моя платформа - доллар США. В этом конкретном примере учетная запись Connect находится в канадских долларах (CAD). Когда кто-то покупает предмет из этой учетной записи CAD Connect, Stripe помещает деньги в мою учетную запись платформы, оставляет там мою плату за приложение, а затем переводит правильную сумму в учетную запись CAD Connect. Он конвертирует эту сумму в канадские доллары. В графическом интерфейсе с полосой я могу найти обменный курс и сумму, переведенную в CAD , как показано на скриншоте ниже. Но я не могу найти эти атрибуты в API.
Единственный объект, который я видел с
exchange_rate
атрибут - баланс транзакции . Однако, когда я получаю транзакцию баланса для транзакции на скриншоте, я получаю этот объект ответа:
Запрос: https://api.stripe.com/v1/balance_transactions/txn_1IBNiNLLBOhef2QNqIeaNg9o
Ответ:
{
"id": "txn_1IBNiNLLBOhef2QNqIeaNg9o",
"object": "balance_transaction",
"amount": -7777,
"available_on": 1611619200,
"created": 1611076199,
"currency": "usd",
"description": null,
"exchange_rate": null,
"fee": 0,
"fee_details": [],
"net": -7777,
"reporting_category": "transfer",
"source": "tr_1IBNiNLLBOhef2QNcNqv3IlS",
"status": "pending",
"type": "transfer" }
Проблема здесь в том, что приведенный выше объект транзакции баланса показывает эту транзакцию только в долларах США : 77,77 долларов США вышли из моей учетной записи платформы.
Но он не показывает коэффициент конверсии или сумму в канадских долларах. Когда эти 77 долларов США поступили в учетную запись CAD Connect, как мы видим на снимке экрана с графическим интерфейсом, эти 77,77 долларов США были преобразованы в 98,02 доллара США, а обменный курс составил 1,26039 (USD-> CAD).
Как я могу узнать эту сумму в канадских долларах и обменный курс через API?
4 ответа
Перевод, сделанный на подключенную учетную запись на этом снимке экрана, осуществляется в долларах США. Конвертация происходит после самого Переноса . Средства отправляются в долларах США, а затем на подключенной учетной записи они конвертируются в валюту по умолчанию для этой учетной записи.
Вы хотите посмотреть на Трансфер
destination_payment
собственность, которая имеет
py_123
id для Начисления на подключенном аккаунте. Этот Charge имеет объект BalanceTransaction (аналогичный объекту Transfer, которым вы поделились). Эта BalanceTransaction будет отражать конверсию из долларов США в канадские доллары и отображать обменный курс, используемый в
exchange_rate
собственность в таком случае.
Если вам нужно узнать курс валюты до того, как произойдет фактическая транзакция, они предоставляют курсы валют здесь.
ОДНАКО, это всего лишь интерфейсная страница, и она требует авторизации. Кроме того, он обновляется каждые 12 часов. Официального API, возвращающего курсы валют, нет.
Существует небольшой продукт SaaS, который предоставляет полосные курсы валют в виде REST API.https://striperate.com/
Вот как я это сделал: я смоделировал платеж в иностранной валюте на счет в США (чтобы он был представлен в долларах США), затем я получил связанную балансовую транзакцию и аргумент exchange_rate.
async function exchangeFeesToUS(currency) {
const paymentIntent = await stripeTestUS.paymentIntents.create({
amount: 10000,
currency: currency,
payment_method_types: ['card'],
customer: "ANY_CUSTOMER_WITH_A_PAYMENT_METHOD",
payment_method: "ANY_CARD_ASSOCIATED_TO_THIS_CUSTOMER",
confirm: true
});
return await balanceTransaction(paymentIntent).then(balance => {
return balance.exchange_rate
})
}
async function balanceTransaction(paymentIntent) {
const chargeId = paymentIntent.charges.data[0].id;
const charge = await stripeTestUS.charges.retrieve(
chargeId
);
return await stripeTestUS.balanceTransactions.retrieve(
charge.balance_transaction
);
}
Теперь, если вы хотите конвертировать в другую валюту, кроме доллара США, просто дважды вызовите вышеупомянутую функцию:
async function exchangeFeesToCUSTOM_CURRENCY(currency) {
const rate = await exchangeFeesToUS(currency)
const rateCUSTOM_CURRENCY = await exchangeFeesToUS('your_custom_currency')
return rate / rateCUSTOM_CURRENCY
}
В Java вы можете сделать
Stripe.apiKey = "sk_live_...";
Transfer transfer = Transfer.retrieve("tr_...");
RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("acct_...").build();
Charge charge = Charge.retrieve(transfer.getDestinationPayment(), requestOptions);
BalanceTransaction balanceTransaction = BalanceTransaction.retrieve(charge.getBalanceTransaction(), requestOptions);
balanceTransaction.getExchangeRate();
balanceTransaction.getNet();
balanceTransaction.getCurrency();