0

Мне удалось заставить Signpost работать с QuickBooks Online с помощью HttpPost. Однако, когда я пытался опросить фильтры, я каждый раз получал ошибку 401. После обращения в службу поддержки мне сообщили, что это известная ошибка. Они указали мне пример на C#. Я использую библиотеку Signpost oauth на Java. Пример C# не имеет смысла для меня, поскольку у меня нет функций, доступных в Signpost. Также я не понимаю, что именно мне нужно делать.Quickbooks Онлайн-фильтрация с помощью Signpost возвращает ошибку 401

Одностороннее примечание: для этого типа содержимого мне пришлось использовать HttpClient: «application/x-www-form-urlencoded». Это ограничение, которое исходит от Signpost.

Несанкционированное токен OAuth: signature_invalid401SERVER

C# обходной путь пример: https://gist.github.com/IntuitDeveloperRelations/6024616

/* filtering fails with 401 error */ 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost requestHp = new HttpPost("https://qbo.intuit.com/qbo28/resource/accounts/v2/670436015"); 
    requestHp.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
    BasicHttpEntity filter = new BasicHttpEntity(); 
    filter.setContent(new StringInputStream("Filter=Name :EQUALS: Continuing")); 
    requestHp.setEntity(filter); 
    CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(getOauthConsumerKey(), getOauthConsumerSecret()); 
    consumer.setTokenWithSecret(getOauthAccessToken(),getOauthAccessTokenSecret()); 
    consumer.sign(requestHp); 

    HttpResponse response = client.execute(requestHp); 

ответ

1

AcctNum не является допустимым фильтром для лица QBO счета.

Ref - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/account#Attributes_Supporting_Filtering_and_Sorting

Вы можете использовать атрибут 'Name' в качестве фильтра.

ПФБ фрагмент кода

Использование Java DevKit

public List<QBAccount> testGetAll() { 
    QBAccountQuery accountQuery = new QBAccountQuery(context); 
    accountQuery.setName("BankCharges"); 

    final List<QBAccount> entityList = new ArrayList<QBAccount>(); 
    try { 
     QBAccountService service = QBServiceFactory.getService(context, QBAccountService.class); 
      List<QBAccount> qbAccountList = service.getAccounts(context, accountQuery); 
      for (QBAccount each : qbAccountList) { 
       entityList.add(each); 
      } 
    } catch (QBInvalidContextException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return entityList; 
} 

конечных точек - https://qbo.intuit.com/qbo1/resource/accounts/v2/188712345

Content-Type: применение/х-WWW-форм-urlencoded

разместить данные Конечная точка: Фильтр = Название: EQUALS: BankCharges

Использование Signpost

public class PocApiCall { 

    static String accesstoken = ""; 
    static String accessstokensecret = ""; 
    static String appToken = ""; 
    static String oauth_consumer_key = ""; 
    static String oauth_consumer_secret = ""; 
    static String realmID = ""; 
    static String dataSource = ""; 
    static String url = ""; 

    PocApiCall() { 
     setupQBO(); 
    } 

    public static void main(String args[]) { 
     PocApiCall apiCall = new PocApiCall(); 
     apiCall.testLikeDevkit(); 
    } 

    private void testLikeDevkit() { 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost requestHp = new HttpPost(url); 
     requestHp.addHeader("Content-Type", "application/x-www-form-urlencoded"); 

     BasicHttpEntity filter = new BasicHttpEntity(); 

     try { 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

      nameValuePairs.add(new BasicNameValuePair("Filter", "Name :EQUALS: BankCharges")); 
      requestHp.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8")); 

      CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(oauth_consumer_key, oauth_consumer_secret); 
      consumer.setTokenWithSecret(accesstoken, accessstokensecret); 
      consumer.sign(requestHp); 

      debugRequestValues(requestHp); 

      HttpResponse execute = client.execute(requestHp); 

      System.out.println(new BufferedReader(new InputStreamReader(execute.getEntity().getContent())).readLine()); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (OAuthMessageSignerException e) { 
      e.printStackTrace(); 
     } catch (OAuthExpectationFailedException e) { 
      e.printStackTrace(); 
     } catch (OAuthCommunicationException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    private void debugRequestValues(HttpPost requestHp) throws IOException { 
     System.out.println("Method - " + requestHp.getRequestLine().getMethod()); 
     System.out.println("URI - " + requestHp.getRequestLine().getUri()); 
     Header[] allHeaders = requestHp.getAllHeaders(); 
     for(Header h : allHeaders){ 
      System.out.println("Name - " + h.getName() + " Value - " + h.getValue()); 
     } 

     if(requestHp.getEntity() != null){ 
     System.out.println(new BufferedReader(new InputStreamReader(requestHp.getEntity().getContent())).readLine()); 
     } 
    } 

    private static void setupQBO() { 
     System.out.println("QBO token setup"); 
     accesstoken = "your tokens"; 
     accessstokensecret = "your tokens"; 
     appToken = "your tokens"; 
     oauth_consumer_key = "your tokens"; 
     oauth_consumer_secret = "your tokens"; 
     realmID = "688779980"; 
     dataSource = "QBO"; 
     url = "https://qbo.intuit.com/qbo1/resource/accounts/v2/123459980"; 
    } 

} 

Благодаря

+0

Спасибо, но это не было проблемой. Я просто изменил имя, но все еще получил ошибку 401. filter.setContent (новый StringInputStream ("Filter = Name: EQUALS: Continuing")); Несанкционированное OAuth лексем: signature_invalid SERVER user1949497

+0

при установке объект (фильтр), вам должен использовать UrlEncodedFormEntity. Я добавил полный рабочий фрагмент кода в свой пост. Это сработало для меня. Пожалуйста, дайте мне знать, если это поможет. Thanks –

+1

Новый код работал! Бесконечно благодарен! – user1949497