2013-06-05 17 views
2

我嘗試使用支付寶.NET與動態配置(而不是從網絡配置)SDK。我發現PayPalAPIInterfaceServiceService類過載,可以使用實際表示配置的Dictionary對象啓動。 github上的主題https://github.com/paypal/sdk-core-dotnet/issues/1。我的代碼:使用貝寶SDK和自定義配置不是從web.config中

Dictionary<string, string> paypalConfig = new Dictionary<string, string>(); 
paypalConfig.Add("mode", "sandbox"); 
paypalConfig.Add("connectionTimeout", "30000"); 
paypalConfig.Add("requestRetries", "5"); 
paypalConfig.Add("IPAddress", "127.0.0.1"); 
paypalConfig.Add("apiUsername", "***.gmail.com"); 
paypalConfig.Add("apiPassword", "api password goes here"); 
paypalConfig.Add("apiSignature", "signature goes here"); 
paypalConfig.Add("applicationId", "sandbox app id"); 
paypalConfig.Add("signatureSubject", ""); 
paypalConfig.Add("certificateSubject", ""); 


PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(paypalConfig); 

DoDirectPaymentResponseType response = service.DoDirectPayment(wrapper); 

當我打電話DoDirectPayment(包裝)方法,我得到MissingCredentialException與消息「缺少憑據」。現在的問題是:如何正確初始化自定義配置?我應該使用什麼鍵?我找不到這個問題的任何信息。

回答

5

貝寶文檔激怒我的時候。他們說'檢查樣本',然後沒有引用此構造函數的單個樣本!

幸好他們沒有解釋它on this page

...或者,通過動態傳遞字典(您可以從 加載數據庫或適合您的需要)。

Dictionary<string, string> config = new Dictionary<string, string>(); 
config.Add("mode", "sandbox"); 
config.Add("account1.apiUsername", "jb-us-seller_api1.paypal.com"); 
config.Add("account1.apiPassword", "..."); 
config.Add("account1.apiSignature", "..."); 

PayPalAPIInterfaceService s = new PayPalAPIInterfaceService(config); 
+0

我意識到這是@cmd了同樣的答案,但我想後的正式名單需要的東西。 applicationId對於基本操作似乎並不需要 - 但可能是因爲如果您使用的是需要批准的高級API –

0

你應該給你的帳戶credentials.change在以下幾個方面。

aypalConfig.Add("apiUsername", "***.gmail.com"); 
paypalConfig.Add("apiPassword", "api password goes here"); 
paypalConfig.Add("apiSignature", "signature goes here"); 
paypalConfig.Add("applicationId", "sandbox app id"); 

轉到您的開發人員帳戶。在這裏您將獲得所需的信息。

+0

伊赫桑您好,感謝的答覆,但我已經知道我的帳戶憑據。在發佈代碼示例之前,我替換了它們。看到我自己的答案。 – cmd

+0

那好,你讓你的solution.Well Done.If我的回答可以幫助你或可有助於others.Please批准it.Thanks。@在cmd – Ehsan

1

這很有趣,但我找到了解決辦法之後我張貼了這個問題:) 所以,正確的方式來初始化定製配置:

Dictionary<string, string> paypalConfig = new Dictionary<string, string>(); 
paypalConfig.Add("mode", "sandbox"); 
paypalConfig.Add("connectionTimeout", "30000"); 
paypalConfig.Add("requestRetries", "5"); 
paypalConfig.Add("IPAddress", "127.0.0.1"); 
paypalConfig.Add("account1.apiUsername", "***.gmail.com"); 
paypalConfig.Add("account1.apiPassword", "*******"); 
paypalConfig.Add("account1.apiSignature", "api signature here"); 
paypalConfig.Add("account1.applicationId", "app id here"); 
paypalConfig.Add("account1.signatureSubject", ""); 
paypalConfig.Add("account1.certificateSubject", ""); 

所以我只是有配置屬性前添加「帳戶1」字頭。

0

您可以覆蓋貝寶測試證書由您測試帳戶 寶APICONTEXT類有字典配置,您可以指定憑據如下

APIContext apiContext = new APIContext(GetAccessToken()); 
apiContext.Config = GetConfig(); 

private static Dictionary<string, string> GetConfig() 
{ 
    Dictionary<string, string> configMap = new Dictionary<string, string>(); 

    configMap.Add("mode", ConfigurationManager.AppSettings["mode"].ToString()); 
    configMap.Add("account0.apiUsername",ConfigurationManager.AppSettings["apiUsername"].ToString()); 
    configMap.Add("account0.apiPassword", ConfigurationManager.AppSettings["apiPassword"].ToString()); 
    configMap.Add("account0.apiSignature", ConfigurationManager.AppSettings["apiSignature"].ToString()); 
    configMap.Add("account0.apiCertificate", ConfigurationManager.AppSettings["apiCertificate"].ToString()); 
    configMap.Add("account0.privateKeyPassword", ConfigurationManager.AppSettings["privateKeyPassword"].ToString()); 
    configMap.Add("account0.subject", ConfigurationManager.AppSettings["subject"].ToString()); configMap.Add("account0.applicationId",ConfigurationManager.AppSettings["applicationId"].ToString()); 

    return configMap; 
} 

我存儲在網絡配置就可以了我的鑰匙直接添加它們

我有另一種方式從網絡配置文件做相同

<configSections> 
<section name="paypal" type="PayPal.Manager.SDKConfigHandler, PayPalCoreSDK"/> 
</configSections> 

<!-- PayPal SDK config --> 
<paypal> 
<settings> 
    <add name="endpoint" value="https://api.sandbox.paypal.com"/> 
    <add name="connectionTimeout" value="360000"/> 
    <add name="requestRetries" value="1"/> 
    <add name="ClientID" value="AUSaZxBqv5PQ2eQ2XyNfhgo2- q_sf7WOKxoOgvbjP_y_KOy0fbKUYApiEZJE"/> 
    <add name="ClientSecret" value="EBDXUBA040ErNqIfDpvh1KZqSaRJhANQuQWl-OHtsSrhEa93o3GICa7WoyF-"/> 
</settings> 
<accounts> 
    <account apiUsername="rhealb_1340347945_biz_api1.gmail.com" apiPassword="1340347981" apiSignature="ATm0VCcoUsJbzRddp810M7zr08G.AAZF2y729RqpgeeyThP.1mI1qXYT"/> 
</accounts> 

設置部分是可選的。 我使用的SDK第一次,所以我真的不知道在哪裏的clientId和ClientSecret習慣