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; /** *

* *

* * @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/oauth2redirect"; 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 scopes = new ArrayList(); 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); } }