>

스트라이프 연결 계정은 일반 지급 일정 에서 지불금을 통합하도록 구성 할 수 있습니다. 예를 들어 우리의 경우 월별 지불금. 이 월별 대금을 지불하려면 계정 소유자에게 플랫폼에서 발생한 거래 (이 경우 예약 및 환불)가 전체 금액을 산출했음을 설명해야합니다. 우리는 스트라이프 요금 ID (Resp. 환불 ID)를 데이터베이스의 예약 (Resp 환불) 객체에 저장합니다. 따라서 질문은 다음과 같이 요약됩니다.

스트라이프 계정 ID를 제공하면 마지막 지불금에 기여한 스트라이프 청구 및 환불 ID 목록을 어떻게 얻을 수 있습니까?


  • 답변 # 1

    스트라이프의 지원팀과 폭 넓은 교류를 해왔으며 거기에 도착하는 데 필요한 몇 가지 퍼즐 조각이 있습니다 :

    결제 금액은 계정별로 적용됩니다

    지급금 목록에 대해 스트라이프를 쿼리하면 플랫폼 소유자가 스트라이프에서 가져온 지불금 개체 만 받게됩니다. 특정 계정의 지불금 개체를 얻으려면 플랫폼에 대한 일반 인증을 사용하지만 스트라이프 계정 ID를 헤더로 보낼 수 있습니다. 따라서 마지막 지불금을 얻는 코드 스 니펫은 다음과 같습니다 (나머지 답변의 예제로 루비 스 니펫을 사용합니다) :

    Stripe::Payout.list({limit: 1}, {stripe_account: 'acct_0000001234567890aBcDeFgH'})
    => #<Stripe::ListObject:0x0123456789ab> JSON: {
      "object": "list",
      "data": [
        {"id":"po_1000001234567890aBcDeFgH",
         "object":"payout",
         "amount":53102,
         "arrival_date":1504000000,
         "balance_transaction":"txn_2000001234567890aBcDeFgH",
         "created":1504000000,
         "currency":"eur",
         "description":"STRIPE TRANSFER",
         "destination":"ba_3000001234567890aBcDeFgH",
         "failure_balance_transaction":null,
         "failure_code":null,
         "failure_message":null,
         "livemode":true,"metadata":{},
         "method":"standard",
         "source_type":"card",
         "statement_descriptor":"[…]",
         "status":"paid",
         "type":"bank_account"
        }
      ],
      "has_more": true,
      "url": "/v1/payouts"
    }
    
    

    지급 ID가 있으면 지불 범위로 범위를 정한 잔액 거래 목록을 쿼리 할 수 ​​있습니다.

    Stripe::BalanceTransaction.all({
        payout: 'po_1000001234567890aBcDeFgH',
        limit: 2,
    }, {
        stripe_account: 'acct_0000001234567890aBcDeFgH'
    })
    
    
    계정으로 보는 객체는 플랫폼 소유자로 보는 것과 비교하여 대부분의 정보가 제거됩니다

    현재 지불금 ID를 가지고 있지만 객체의 계정 범위는 여전히 정해져 있으며 플랫폼 소유자로 검색 할 수 없습니다. 그러나 계정으로 볼 때 지불금은 유사 청구 및 환불 대상 만 표시합니다 (두 번째 거래에는 py_7000001234567890aBcDeFgH 가 있음을 알 수 있습니다)  일반 ch_ 대신 소스로 객체  청구 대상) :

    Stripe::BalanceTransaction.all({
        payout: 'po_1000001234567890aBcDeFgH',
        limit: 2,
    }, {
        stripe_account: 'acct_0000001234567890aBcDeFgH'
    })
    => {
        :object => "list",
        :data => [
            {
                :id => "txn_4000001234567890aBcDeFgH",
                :object => "balance_transaction",
                :amount => -53102,
                :available_on => 1504000000,
                :created => 1504000000,
                :currency => "eur",
                :description => "STRIPE TRANSFER",
                :fee => 0,
                :fee_details => [],
                :net => -53102,
                :source => "po_5000001234567890aBcDeFgH",
                :status => "available",
                :type => "payout"
            },
            {
                :id => "txn_6000001234567890aBcDeFgH",
                :object => "balance_transaction",
                :amount => 513,
                :available_on => 1504000000,
                :created => 1504000000,
                :currency => "eur",
                :description => nil,
                :fee => 0,
                :fee_details => [],
                :net => 513,
                :source => "py_7000001234567890aBcDeFgH",
                :status => "available",
                :type => "payment"
            }
        ],
        :has_more => true,
        :url => "/v1/balance/history"
    }
    
    
    응답에서 스트라이프가 자동으로 객체를 확장하도록 할 수 있습니다

    추가 매개 변수로서, 응답에서 스트라이프를 확장하려는 오브젝트의 스트라이프 경로를 제공 할 수 있습니다. 따라서 전송을 통해 의사 객체에서 원래 충전 객체로 다시 이동할 수 있습니다.

    Stripe::BalanceTransaction.all({
        payout: 'po_1000001234567890aBcDeFgH',
        limit: 2,
        expand:['data.source.source_transfer',]
    }, {
        stripe_account: 'acct_0000001234567890aBcDeFgH'
    }).data.second.source.source_transfer.source_transaction
    => "ch_8000001234567890aBcDeFgH"
    
    

    그리고 전체 목록을 처리하려면 source.object 사이에 명확성이 필요합니다.  속성 :

    Stripe::BalanceTransaction.all({
        payout: 'po_1000001234567890aBcDeFgH',
        limit: 2,
        expand:['data.source.source_transfer',]
    }, {
        stripe_account: 'acct_0000001234567890aBcDeFgH'
    }).data.map do |bt| 
      if bt.source.object == 'charge'
        ['charge', bt.source.source_transfer.source_transaction]
      else
        [bt.source.object]
      end
    end
    => [["payout"], ["charge", "ch_8000001234567890aBcDeFgH"]]
    
    
    환불 대상 객체 경로를 원래 ID로 되돌릴 수 없습니다 불행히도 현재 원래 re_ 를 얻을 수있는 방법이 없습니다  의사 pyr_ 에서 개체  환불 거래에 대한 BalanceTransaction 목록 호출에 의해 반환됩니다. 내가 찾은 최고의 대안은 data.source.charge.source_transfer.source_transaction 를 통과하는 것입니다.  환불이 발생한 청구의 청구 ID를 가져와 created 와 함께 사용하는 경로   pyr_ 의 속성  데이터베이스 환불 개체와 일치하도록 그러나 그 방법이 실제로 얼마나 안정적인지 잘 모르겠습니다. 해당 데이터를 추출하는 코드 :

    Stripe::BalanceTransaction.all({
        payout: 'po_1000001234567890aBcDeFgH',
        limit: 100, # max page size, the code to iterate over all pages is TBD
        expand: [
            'data.source.source_transfer', # For charges
            'data.source.charge.source_transfer', # For refunds
        ]
    }, {
        stripe_account: 'acct_0000001234567890aBcDeFgH'
    }).data.map do |bt|
      res = case bt.source.object
        when 'charge'
          {
              charge_id: bt.source.source_transfer.source_transaction
          }
        when 'refund'
          {
              charge_id: bt.source.charge.source_transfer.source_transaction
          }
        else
          {}
      end
      res.merge(type: bt.source.object, amount: bt.amount, created: bt.created)
    end
    
    

  • 답변 # 2

    이제 "환승 전환"개체를 통해 환불 ID를 얻을 수 있습니다 :

    Stripe::BalanceTransaction.list({
      payout: 'po_1000001234567890aBcDeFgH',
      expand: [
        'data.source.source_transfer', # For charges
        'data.source.transfer_reversal', # For refunds
      ]
    }, {
      stripe_account: 'acct_0000001234567890aBcDeFgH'
    }).auto_paging_each do |balance_transaction|
      case balance_transaction.type
        when 'payment'
          charge_id = balance_transaction.source.source_transfer.source_transaction
        when 'payment_refund'
          refund_id = balance_transaction.source.charge.source_transfer.source_transaction
        end
      end
    end
    
    

  • 이전 dplyr - R (DBI 패키지)을 사용하여 SQL Server 테이블에서 행 삭제
  • 다음 python - 확률로 빈에 정수를 분배하는 방법