liujie
2023-05-26 26fa723daeccb1e731ed24034ac66aa5c56c4269
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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/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<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);
 
    }
}