package com.stylefeng.guns.modular.system.utils;
|
|
import com.intuit.ipp.core.Context;
|
import com.intuit.ipp.core.ServiceType;
|
import com.intuit.ipp.data.*;
|
import com.intuit.ipp.exception.FMSException;
|
import com.intuit.ipp.security.OAuth2Authorizer;
|
import com.intuit.ipp.services.DataService;
|
import com.intuit.ipp.util.Config;
|
import com.intuit.oauth2.client.OAuth2PlatformClient;
|
import com.intuit.oauth2.config.Environment;
|
import com.intuit.oauth2.config.OAuth2Config;
|
import com.intuit.oauth2.config.Scope;
|
import com.intuit.oauth2.data.BearerTokenResponse;
|
import com.intuit.oauth2.exception.InvalidRequestException;
|
import com.intuit.oauth2.exception.OAuthException;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.web.servlet.View;
|
import org.springframework.web.servlet.view.RedirectView;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* <p>
|
*
|
* </p>
|
*
|
* @Author: lisy
|
* @date: 2023-05-23 14:37
|
* @Description:
|
*/
|
@Slf4j
|
public class InvoicesDataUploadUtil {
|
|
// private static final String redirectUrl = "http://cca19.com:8010/gunsApi/oauth2redirect";
|
private static final String redirectUrl = "http://cca19.com:8010/gunsApi/oauth2redirectOfCar";
|
|
private static final String createInvoiceUrl = "https://sandbox-quickbooks.api.intuit.com";
|
|
private static final String clientId = "ABXjfdoTHLWaBrkWRkoe6C8sk9mixpQJ1OlrFVkZznsdUzLPIf";
|
|
private static final String clientSecret = "WJ01VwbagGa23FJZQVJW4LGKPG9vaJIBgzxEEfEA";
|
|
|
public static View connectToQuickBooks() throws InvalidRequestException {
|
|
|
OAuth2Config oauth2Config = new OAuth2Config.OAuth2ConfigBuilder(clientId,clientSecret)
|
.callDiscoveryAPI(Environment.SANDBOX)
|
.buildConfig();
|
|
String csrf = oauth2Config.generateCSRFToken();
|
|
List<Scope> scopes = new ArrayList<Scope>();
|
scopes.add(Scope.Accounting);
|
String prepareUrl = oauth2Config.prepareUrl(scopes, redirectUrl, csrf);
|
System.out.println(prepareUrl);
|
return new RedirectView(prepareUrl, true, true, false);
|
}
|
|
|
public static String refreshToken() throws OAuthException {
|
|
//Prepare the config
|
OAuth2Config oauth2Config = new OAuth2Config.OAuth2ConfigBuilder(clientId,clientSecret).callDiscoveryAPI(Environment.SANDBOX).buildConfig();
|
|
//Prepare OAuth2PlatformClient
|
OAuth2PlatformClient client = new OAuth2PlatformClient(oauth2Config);
|
|
//Call refresh endpoint
|
BearerTokenResponse bearerTokenResponse = client.refreshToken("refreshToken"); //set refresh token
|
return bearerTokenResponse.getAccessToken();
|
}
|
|
private static Context prepareContext(String realmId, String accessToken) throws FMSException {
|
String url = new OAuth2PlatformClientFactory().getHost() + "/v3/company";
|
|
Config.setProperty(Config.BASE_URL_QBO, url);
|
//create oauth object
|
OAuth2Authorizer oauth = new OAuth2Authorizer(accessToken);
|
//create context
|
Context context = new Context(oauth, ServiceType.QBO, realmId);
|
return context;
|
}
|
|
public static DataService getDataService(String realmId, String accessToken ) throws FMSException {
|
Context context = prepareContext(realmId, accessToken);
|
|
// create dataservice
|
return new DataService(context);
|
}
|
|
|
|
public static BearerTokenResponse callBackFromOAuth(String code) throws OAuthException {
|
OAuth2Config oauth2Config = new OAuth2Config.OAuth2ConfigBuilder(clientId,clientSecret)
|
.callDiscoveryAPI(Environment.SANDBOX)
|
.buildConfig();
|
//prepare OAuth2Platform client
|
OAuth2PlatformClient client = new OAuth2PlatformClient(oauth2Config);
|
//retrieve access token by calling the token endpoint
|
return client.retrieveBearerTokens(code, redirectUrl);
|
|
}
|
}
|