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_123id для Начисления на подключенном аккаунте. Этот 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();
Другие вопросы по тегам