Есть ли нумерация страниц для поиска транзакции?

Я пытаюсь выполнить метод TransactionSearchReq с помощью API-интерфейса PayPal SOAP и получаю следующее предупреждение:

ShortMessage: Поиск предупреждения

LongMessage: число результатов было усечено. Пожалуйста, измените параметры поиска, если хотите увидеть все свои результаты.

Код ошибки: 11002

SeverityCode: Предупреждение

В документации также говорится, что "Максимальное количество транзакций, которые могут быть возвращены из вызова API TransactionSearch, равно 100". ( https://developer.paypal.com/docs/classic/api/merchant/TransactionSearch_API_Operation_SOAP/)

Есть ли способ разбить результаты на страницы, чтобы я мог получить более 100 результатов по нескольким запросам?

1 ответ

Вот один из способов сделать это в Rails. Предполагается, что вы хотите искать с определенного момента времени до настоящего момента, но вы можете изменить end_date указать дату окончания. Обратите внимание, что я добавил 'paypal-sdk-merchant' Перейдите в мой гемфайл (см. https://github.com/paypal/merchant-sdk-ruby) и следуйте инструкциям по настройке моей аутентификации.

Ниже вы можете отредактировать две вещи: start_date метод (чтобы установить собственную дату начала) и do_something(x) метод, который будет тем, что вы хотите сделать с каждым из отдельных заказов в пределах вашего диапазона дат.

module PaypalTxnSearch
  def check_for_updated_orders
    begin
      @paypal_order_list = get_paypal_orders_in_range(start_date, end_date)

      @paypal_order_list.PaymentTransactions.each do |x|
        # This is where you can call a method to process each transaction
        do_something(x)
      end
      # TransactionSearch returns up to 100 of the most recent items.
    end while txn_search_result_needs_pagination?
  end

  def get_paypal_orders_in_range(start_date, end_date)
    @api = PayPal::SDK::Merchant::API.new
    # Build Transaction Search request object
    # https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/TransactionSearch_API_Operation_NVP/
    @transaction_search = @api.build_transaction_search(
      StartDate: start_date,
      EndDate: end_date
    )
    # Make API call & get response
    @response = @api.transaction_search(@transaction_search)
    # Access Response
    return_response_or_errors(@response)
  end

  def start_date
    # In this example we look back 6 months, but you can change it 
    Date.today.advance(months: -6)
  end

  def end_date
    if defined?(@paypal_order_list)
      @paypal_order_list.PaymentTransactions.last.Timestamp
    else
      DateTime.now
    end
  end

  def txn_search_result_needs_pagination?
    @@paypal_order_list.Ack == 'SuccessWithWarning' &&
      @@paypal_order_list.Errors.count == 1 &&
      @@paypal_order_list.Errors[0].ErrorCode == '11002'
  end

  def return_response_or_errors(response)
    if response.success?
      response
    else
      response.Errors
    end
  end
end
Другие вопросы по тегам