2013-08-21 34 views
1

大家下午好!PayPal REST API java sdk - 自定義配置文件

我使用PayPal REST API java sdk,我希望對我的應用程序的不同環境有不同的配置。這裏是我正在努力這樣做:

private static boolean IS_PRODUCTION = false; 

private static String PAYPAL_ACCESS_TOKEN; 

private static void initPayPal() { 
    InputStream is = null; 
    try { 
     is = ApplicationConfig.class.getResourceAsStream(
       IS_PRODUCTION? "/my_paypal_sdk_config.properties" : "/my_paypal_sdk_config_test.properties"); 
     PayPalResource.initConfig(is); 
     String clientID = ConfigManager.getInstance().getConfigurationMap().get("clientID"); 
     String clientSecret = ConfigManager.getInstance().getConfigurationMap().get("clientSecret"); 
     PAYPAL_ACCESS_TOKEN = new OAuthTokenCredential(clientID, clientSecret).getAccessToken(); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } finally { 
     IOUtils.closeQuietly(is); 
    } 
} 

,並嘗試獲取ClientID的我

java.io.IOException: Resource 'sdk_config.properties' could not be found 

奇怪的行爲 - 我想我剛剛配置爲使用自己的SDK屬性文件。

請教如何正確設置這些設置!

回答

1

我們在集成步驟上對PayPal Java SDK進行了一些很好的改進。我們刪除了對sdk_config.properties文件的需求,因爲它們不適用,特別是對於多配置設置。

現在,您只需創建一個APIContext實例,其中包括clientId,clientSecretmode。您從那裏傳遞該上下文對象以進行任何API操作。

下面是代碼會是什麼樣子進行不同的配置:

APIContext defaultContext = new APIContext(clientId1, clientSecret1, "sandbox"); 
APIContext sandboxContext = new APIContext(clientId2, clientSecret2, "sandbox"); 
APIContext someOtherContext = new APIContext(clientId3, clientSecret3, "live"); 
APIContext liveContext = new APIContext(clientId, clientSecret, "live"); 

// Now pass any of the above context in these calls, and it would use those configurations. 
Payment payment = new Payment(); 
// Fill in all the details. 
payment.create(defaultContext); 
// Replace that defaultContext with any of those other contexts. 

這裏是wiki頁面解釋說:https://github.com/paypal/PayPal-Java-SDK/wiki/Making-First-Call

4

因此,這裏是我找到了解決辦法:

  1. 創建默認位置
  2. 空sdk_config.properties文件加載自己的屬性:

    private static void initPayPal() { 
        InputStream is = null; 
        try { 
         is = ApplicationConfig.class.getResourceAsStream(
        IS_PRODUCTION ? "/my_paypal_sdk_config.properties" : "/my_paypal_sdk_config_test.properties"); 
         Properties props = new Properties(); 
         props.load(is); 
         PayPalResource.initConfig(props); 
         ConfigManager.getInstance().load(props); 
         String clientID = ConfigManager.getInstance().getConfigurationMap().get("clientID"); 
         String clientSecret = ConfigManager.getInstance().getConfigurationMap().get("clientSecret"); 
         PAYPAL_ACCESS_TOKEN = new OAuthTokenCredential(clientID, clientSecret).getAccessToken(); 
        } catch (Exception e) { 
         throw new RuntimeException(e); 
        } finally { 
         IOUtils.closeQuietly(is); 
        } 
    } 
    
+0

ConfigManager.load已被棄用。但我也沒有看到這個問題。 –

0

我有與SDK 0.11版本相同的錯誤。我使用自己的屬性文件,但代碼仍然在尋找「sdk_config.properties」。我把它放到我的CLASSPATH的根目錄下,但仍然出現同樣的錯誤。然後我做出了明顯而可怕的解決方案:將空的「sdk_config.properties」放入「rest-api-sdk-0.11.0.jar」庫中。這個街頭魔術解決了我的問題。