我正在尝试编写一个应用程序,它将通过java spring引擎连接到Quickbooks Online API,提取一些数据并对其进行转换,并通过电子邮件发送到某个地方。
我已经完成了所有这些工作,但我现在的问题是我的QBO令牌到期180天。我想重新联系。 (我使用的是ipp-java-qbapihelper的1.2.0版本和ipp-v3-java-devkit的2.0.3版本。)
我找到了这个答案:Disconnecting app in quickbooks v3 api讨论断开连接(并告诉你编辑你的ia.properties文件以包含我做过的断开网址,添加disconnect_url=https://appcenter.intuit.com/api/v1/Connection/Disconnect
)。
由于此应用程序的一个版本目前正在生产中,我创建了另一个应用程序并通过以下步骤将其连接到QBO:http://www.mooreds.com/wordpress/archives/1396我已经验证新应用程序可以通过检索客户来连接到QBO
现在我只是想重新连接。我的总体想法是:
但是,我无法重新连接或断开连接。如果我写代码如下:
IAPlatformClient client = new IAPlatformClient();
client.disconnect(consumerKey, consumerSecret, accessToken, accessTokenSecret);
我收到此错误消息:
Error Code: 100,Error Message: Error Revoking Access for authId=xxx, realmId=, appToken=xxxx
我觉得realmId是空白的。我没有看到在IAPlatformClient上设置realmid的任何方法或者如何使用此类的示例。 appToken与我用来生成上下文的apptoken不同。
如果我尝试重新连接:
IAPlatformClient client = new IAPlatformClient();
client.reConnect(consumerKey, consumerSecret, accessToken, accessTokenSecret);
我收到此错误消息:
Caused by: Error Code: null,Error Message: Failed to disconnect: java.lang.NullPointerException null
这是因为我正在使用处于开发模式的应用吗?这只是一个内部应用程序在我们公司周围移动数据,因此我不确定是否需要将其移至生产状态。
我不应该使用IAPlatformClient(如果是这样,我应该使用什么)?
这里有一个网址:https://appcenter.intuit.com/Playground/OAuth/IA/,可让您以更短的时间连接应用,但使用该功能似乎没有帮助 - 我无法找到访问令牌和访问令牌秘密。
我已经在线查看(无法找到比我上面提到的SO问题更多的内容)和IPP liveconnect论坛。我还查看了示例QB java代码:https://github.com/IntuitDeveloperRelations/QuickbooksV3API-Java/但是这是针对webapp的,所以我没有发现它有用。我还阅读了断开连接文档:https://developer.intuit.com/docs/0025_quickbooksapi/0053_auth_auth/oauth_management_api#Reconnect,遗憾的是我没有收到任何记录的错误消息。
liveconnect论坛有这篇文章:https://intuitpartnerplatform.lc.intuit.com/questions/800930-reconnect-c-or-net-example但它并没有太大帮助。我还从PHP https://intuitpartnerplatform.lc.intuit.com/questions/806889-how-should-i-call-reconnect-api-using-php看了这个例子,看起来很不错但是没有翻译成java。
答案 0 :(得分:1)
您可以查看此帖子(重新断开连接)。
Disconnecting app in quickbooks v3 api
您是否尝试了
中提到的“https://appcenter.intuit.com/api/v1/connection/reconnect”https://developer.intuit.com/docs/0025_quickbooksapi/0053_auth_auth/oauth_management_api#Reconnect
我不确定Disconnect API的行为(因为我还没有使用它)。 断开连接(或没有连接)后,要获得一组新的accessToken和AccessSecret,您可以通过C2QB(三脚OAuth流程)。
使用sampleQBOV3App或使用OAuthPlayground。 https://appcenter.intuit.com/Playground/OAuth
更新 - 在不使用java devkit的情况下添加工作代码。
import java.io.InputStream;
import java.io.StringWriter;
import java.net.URI;
import java.net.URISyntaxException;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.signature.AuthorizationHeaderSigningStrategy;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import com.intuit.ipp.data.Account;
import com.intuit.ipp.exception.FMSException;
import com.intuit.ipp.net.MethodType;
import com.intuit.ipp.services.DataService;
public class POCWithoutDevkitTest {
private DataService service;
private OAuthConsumer oAuthConsumer;
private static String realmID = null;
public static final String TEMPLATE_CONTENT_BOUNDARY = "\r\n\r\n--%s\r\nContent-Disposition: form-data; name=\"%s\" %s\r\n%s\r\n";
public POCWithoutDevkitTest() {
realmID = "122294642099";
String consumerKey = "AAAAA";
String consumerSecret = "BBBBB";
String accessToken = "CCCCC";
String accessTokenSecret = "DDDDD";
setupContext(consumerKey, consumerSecret, accessToken, accessTokenSecret);
}
public void setupContext(String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret) {
this.oAuthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
oAuthConsumer.setTokenWithSecret(accessToken, accessTokenSecret);
oAuthConsumer.setSigningStrategy(new AuthorizationHeaderSigningStrategy());
}
public void authorize(HttpRequestBase httpRequest) throws FMSException {
try {
oAuthConsumer.sign(httpRequest);
} catch (OAuthMessageSignerException e) {
throw new FMSException(e);
} catch (OAuthExpectationFailedException e) {
throw new FMSException(e);
} catch (OAuthCommunicationException e) {
throw new FMSException(e);
}
}
public void executeGetRequest(String customURIString){
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter("http.protocol.content-charset", "UTF-8");
HttpRequestBase httpRequest = null;
URI uri = null;
try {
uri = new URI(customURIString);
} catch (URISyntaxException e) {
e.printStackTrace();
}
String methodtype = "GET";
if (methodtype.equals(MethodType.GET.toString())) {
httpRequest = new HttpGet(uri);
}
httpRequest.addHeader("content-type", "application/xml");
httpRequest.addHeader("Accept","application/xml");
try {
authorize(httpRequest);
} catch (FMSException e) {
e.printStackTrace();
}
HttpResponse httpResponse = null;
try {
HttpHost target = new HttpHost(uri.getHost(), -1, uri.getScheme());
httpResponse = client.execute(target, httpRequest);
System.out.println("Connection status : " + httpResponse.getStatusLine());
InputStream inputStraem = httpResponse.getEntity().getContent();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStraem, writer, "UTF-8");
String output = writer.toString();
System.out.println(output);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]) {
POCWithoutDevkitTest withoutDevkitClient = new POCWithoutDevkitTest();
withoutDevkitClient.executeGetRequest("https://appcenter.intuit.com/api/v1/connection/reconnect");
}
private void testCall() {
try {
this.service.findAll(new Account());
} catch (FMSException e) {
e.printStackTrace();
}
}
}
由于