Stripe: Balance Transactions, Extract as TSV by Payout ID
List all Balance Transactions on the payment platform Stripe. They can be filtered with Payout ID.
Configs
  • C1: Authorization Setting in which API Token is set *
  • C2: Set Payout ID.#{EL}
  • C3: Limit can range between 1 and 100, and the default is 10.
  • C4: Select STRING DATA that stores created TSV(update)
  • C5: Select NUMERIC DATA that stores number of data(update)
Script (click to open)


main();

function main(){

    const auth = configs.get("conf_auth");
    const payoutId = configs.get("conf_payout_id");
    
    const tempDDView = configs.getObject("conf_limit");
    let limit = 0;

    if(tempDDView !== null){
        limit = engine.findDataByNumber(tempDDView.getNumber());
    }else{
        limit = Number(configs.get("conf_limit"));
    }

    const balanceTransactions = listAllBalanceTransactions(auth, payoutId, limit);

    const conf_tsv = configs.get("conf_tsv");
    const conf_num = configs.get("conf_num");    

    if(conf_tsv !== ""){
        engine.setDataByNumber(configs.get("conf_tsv"), createBalanceTransactionsTsv(balanceTransactions));
    }
    if(conf_num !== ""){
        engine.setDataByNumber(configs.get("conf_num"), new java.math.BigDecimal(balanceTransactions.data.length));
    }

}

//limit: can range between 1 and 100, and the default is 10.
function listAllBalanceTransactions(auth, payoutId, limit){

    let request = httpClient.begin();
    request = request.authSetting(auth);

    if(payoutId !== ""){
        request = request.queryParam("payout", payoutId);
    }
    
    if(limit >=1 && limit <= 100){
        request = request.queryParam("limit", String(limit));
    }else{
        engine.log("Limit can range between 1 and 100, and the default is 10.");
    }

    const response = request.get("https://api.stripe.com/v1/balance_transactions");

    const httpStatus = response.getStatusCode();
    const responseStr = response.getResponseAsString();
    engine.log("HTTP Status: " + String(httpStatus));

    const balanceTransactions = JSON.parse(responseStr)
    if(httpStatus===200){
        engine.log(balanceTransactions.data.length + " balance transactions");
        return balanceTransactions;
    }else{
        engine.log(responseStr);
        throw "listAllBalanceTransactions Error: HTTP Status was not 200.";
    }

}

//TSV which consists of the values of Balance Transaction Object(JSON) Elements will be retured.(except for fee_details)
function createBalanceTransactionsTsv(balanceTransactions){
    let tsv = "";
    for(let i = 0 ; i < balanceTransactions.data.length ; i++){
        tsv += balanceTransactions.data[i].id + "\t";
        tsv += balanceTransactions.data[i].amount + "\t";
        tsv += epochTimeToDateString(balanceTransactions.data[i].available_on) + "\t";
        tsv += epochTimeToDateString(balanceTransactions.data[i].created) + "\t";
        tsv += balanceTransactions.data[i].currency + "\t";
        tsv += balanceTransactions.data[i].description + "\t";
        tsv += balanceTransactions.data[i].exchange_rate + "\t";
        tsv += balanceTransactions.data[i].fee + "\t";
        tsv += balanceTransactions.data[i].net + "\t";
        tsv += balanceTransactions.data[i].reporting_category + "\t";
        tsv += balanceTransactions.data[i].source + "\t";
        tsv += balanceTransactions.data[i].status + "\t";
        tsv += balanceTransactions.data[i].type;
        tsv += "\n";
    }
    return tsv;
}

/*
String Format Date("YYYY-MM-DD") will be returned.
timestamp: Integer Unix timestamp(second)
*/
function epochTimeToDateString(timestamp){
    return new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.sql.Date(timestamp * 1000));
}


/*
Notes:
- Can include the automated step "listng all balance transactions as tsv by payout id" into the workflow.(No code)
    - When the matter reaches, a listing all balance transactions request is automatically sent to the Stripe API.
    - stripe API: GET /v1/balance_transactions
    - https://stripe.com/docs/api/balance_transactions/list
- The Stripe API key "secret key" is required for HTTP_Authz Setting.
    - https://dashboard.stripe.com/apikeys
    - https://dashboard.stripe.com/test/apikeys
- If you want to test-operate the workflow app, use the "test key" of the Stripe API key.
    - Set the secret key starting with `sk_test_` to "HTTP Authorization Aetting > Token Fixed Value".
        - Name: `StripeSecretKeyForXYZ`
        - Token: `sk_test_123456789012345678901234`
    - For actual operation, set a secret key starting with `sk_live_`.
- Extracted TSV has 13 columns. (All elements of Payout except for "fee_details") [Details of Balance Transaction Object](https://stripe.com/docs/api/balance_transactions/object)
    - [0] Balance Transaction ID
    - [1] Amount: Gross Amount of the transaction
    - [2] Available On: (YYYY-MM-DD)
    - [3] Created: (YYYY-MM-DD)
    - [4] Currencty: ("usd" "jpy" etc.)
    - [5] Description
    - [6] Exchange Rate
    - [7] Fee: Fees paid for this transaction
    - [8] Net: Net amount of the transaction
    - [9] Reporting Category
    - [10] Source: The Stripe object to which this transaction is related
    - [11] Status: ("available" or "pending")
    - [12] Type: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
Notes(ja):
- ワークフロー内に自動工程『残高取引TSV抽出処理(入金ID指定)』を組み込めるようになります。(ノーコード実装)
    - 案件が到達するとStripe APIに対して残高取引抽出リクエストが送信されます。
    - stripe API: GET /v1/balance_transactions
    - https://stripe.com/docs/api/balance_transactions/list
- 通信設定には、Stripe APIキーの "シークレットキー" が必要です。
    - https://dashboard.stripe.com/apikeys
    - https://dashboard.stripe.com/test/apikeys
- ワークフローアプリをテスト運用したい場合は、テスト用のシークレットキー "テストキー" を利用します。
    - `sk_test_` で始まるテストキーを『HTTP認証設定 > トークン直接指定』に設定します。
        - Name: `StripeSecretKeyForXYZ` 
        - Token: `sk_test_123456789012345678901234` 
    - 本運用する場合は `sk_live_` で始まるシークレットキーを設定します。抽出されるTSVは20列。(metadata 以外の全てのPayout要素)
- 抽出されるTSVは13列。Payout fee_details 以外のものすべて。 [Balance Transaction オブジェクトの詳細](https://stripe.com/docs/api/balance_transactions/object)
    - [0] Balance Transaction ID: 取引ID
    - [1] Amount: 取引総額
    - [2] Available On: (YYYY-MM-DD)
    - [3] Created: 取引データが生成された日(YYYY-MM-DD)
    - [4] Currencty: 通貨("usd" "jpy" etc.)
    - [5] Description: 説明
    - [6] Exchange Rate
    - [7] Fee: Stripe 手数料
    - [8] Net: 取引金額からStripe手数料が差し引かれた金額
    - [9] Reporting Category
    - [10] Source: 取引に関連のあるデータのID
    - [11] Status: ("available" or "pending")
    - [12] Type: [Balance transaction types](https://stripe.com/docs/reports/balance-transaction-types)
*/

Download

2022-06-17 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/addons/stripe-balance-transactions-list-all-as-tsv-by-payout-id/
The Addon-import feature is available with Professional edition.
Freely modifiable JavaScript (ECMAScript) code. No warranty of any kind.

Notes

  • Can include the automated step “listng all balance transactions as tsv by payout id” into the workflow.(No code)
  • The Stripe API key “secret key” is required for HTTP_Authz Setting.
  • If you want to test-operate the workflow app, use the “test key” of the Stripe API key.
    • Set the secret key starting with sk_test_ to “HTTP Authorization Aetting > Token Fixed Value”.
      • Name: StripeSecretKeyForXYZ
      • Token: sk_test_123456789012345678901234
    • For actual operation, set a secret key starting with sk_live_.
  • Extracted TSV has 13 columns. (All elements of Payout except for “fee_details”) Details of Balance Transaction Object
    • [0] Balance Transaction ID
    • [1] Amount: Gross Amount of the transaction
    • [2] Available On: (YYYY-MM-DD)
    • [3] Created: (YYYY-MM-DD)
    • [4] Currencty: (“usd” “jpy” etc.)
    • [5] Description
    • [6] Exchange Rate
    • [7] Fee: Fees paid for this transaction
    • [8] Net: Net amount of the transaction
    • [9] Reporting Category
    • [10] Source: The Stripe object to which this transaction is related
    • [11] Status: (“available” or “pending”)
    • [12] Type: Balance transaction types

Capture

See also

%d bloggers like this: