2013-10-12 52 views
4

我正在努力攻擊Battle Hack London,並且我偶然發現了一個煩人的問題。用於c#的PayPal SDK似乎不太正確。貝寶c#REST API要求提供一個未公開的配置部分

我試圖做我的第一筆交易,這裏是我的代碼(我放在一起固定破碎online docs

var tokenCredential = new OAuthTokenCredential(something, someother); 
var accessToken = tokenCredential.GetAccessToken(); 
Payment createdPayment = new Payment 
{ 
    intent = "sale", 
    transactions = new List<Transaction> 
    { 
    new Transaction 
    { 
     amount = new Amount 
     { 
     total = value.ToString("R"), 
     currency = "GBP" 
     }, 
     description = forWhat 
    } 
    } 
}.Create(accessToken); 

這導致

無法解析* config文件。確保您已正確配置'paypal'部分。

其中我已追溯到this line of code但我不知道如何正確配置該部分,並找不到正確的文檔。

csharp REST SDK應該如何配置?

回答

5

我已經在PayPal開發人員的支持下完成了這項工作。一個人需要補充:

<configSections> 
    <section name="paypal" type="PayPal.Manager.SDKConfigHandler, PayPalCoreSDK"/> 
</configSections> 
<paypal> 
    <accounts> 
    <account apiUsername="xxx" 
      apiPassword="yyy" 
      applicationId="APP-80W284485P519543T" 
      apiSignature="zzz" 
      /> 
    </accounts> 
    <settings> 
    <add name="mode" value="sandbox"/> 
    </settings> 
</paypal> 

其中xxxyyyzzz你是從您的主sandbox test account的「帳戶信息」獲取值。

+0

in web.config @Will – Sklivvz

+0

我試圖使這個桌面應用程序不使用任何web.anything,真的。如果我必須解析一個網頁html代碼才能使它發生,那很好,但是我的僱主正在從Authorize.Net API切換到PayPal API,我想這與將電動引擎放入柴油卡車一樣複雜來自一個對汽車或卡車一無所知的人)。 – Will

+0

我不必包含部分,但我確實必須包含部分,儘管我已通過配置字典將其設置在代碼中。 –

8

我遇到了這個相同的錯誤。我嘗試了Skliwz的解決方案,但它對我沒有幫助。

相反,我可以通過傳遞字典對象與調用得到結果。

Dictionary<string, string> payPalConfig = new Dictionary<string, string>(); 
     payPalConfig.Add("mode", "sandbox"); 
OAuthTokenCredential tokenCredential = new AuthTokenCredential("myCliedId", "myClientSecret", payPalConfig); 
string accessToken = tokenCredential.GetAccessToken(); 

上得到我的登錄工作仍在工作......

+0

這允許訪問令牌被創建,但沒有別的工作。例如,調用Payment.Get(accessToken,paymentId)來獲得付款會導致關於缺少配置部分的相同錯誤。 – Mun

2

如果您使用貝寶的.Net SDK(我的是1.3.0版本),你只需要以下條件:

<configSections> 
    <section name="paypal" type="PayPal.SDKConfigHandler, PayPal" /> 
</configSections> 
<paypal> 
    <settings> 
     <add name="mode" value="sandbox" /> 
    </settings> 
</paypal> 
+1

還有[在SDK的GitHub文檔中的一節](https://github.com/paypal/PayPal-NET-SDK#2-configure-your-application),它提供了一個可以在配置。我在這裏添加到你的配置示例中的一件事是爲貝寶REST應用程序包含'clientId'和'clientSecret'設置(當然值被屏蔽了!)。 –

0

僅供將來參考,PayPal .NET SDK的可用配置設置現在提供在SDK's GitHub wiki上。這包括所有支持PayPal配置設置的信息及其默認值。

如果您希望在應用程序中啓用日誌記錄,wiki還包含有關如何(可選)在配置中(可選)setup log4net的信息。

如果有任何信息缺失或需要澄清,或者您想要求支持更多配置設置,請不要猶豫,立即告訴我或on GitHub

0
var config = ConfigManager.Instance.GetProperties(); 

     // Use OAuthTokenCredential to request an access token from PayPal 
     var accessToken = new OAuthTokenCredential(config).GetAccessToken(); 

Web配置:

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

    <!-- PayPal SDK settings --> 
    <paypal> 
    <settings> 
     <add name="mode" value="sandbox"/> 
     <add name="clientId" value="_client_Id_"/> 
     <add name="clientSecret" value="_client_secret_"/> 
    </settings> 
    </paypal> 
</configuration> 
1

如果你像我一樣,不希望存儲在* .config文件的客戶信息(web.config中的app.config)我我們發現你可以在一個Dictionary中指定它,你必須傳入OAuthTokenCredential並分配給APIContext。配置(關鍵工作):

var clientId = "___REPLACE_WITH_CLIENTID___"; 
var clientSecret = "___REPLACE_WITH_CLIENTSECRET___";    
var sdkConfig = new Dictionary<string, string> { 
    { "mode", "sandbox" }, 
    { "clientId", clientId }, 
    { "clientSecret", clientSecret } 
}; 
var accessToken = new OAuthTokenCredential(clientId, clientSecret, sdkConfig).GetAccessToken(); 
var apiContext = new APIContext(accessToken); 
apiContext.Config = sdkConfig; 

似乎有點多餘必須把它傳遞到OAuthTokenCredential並將其設置爲apiContext.Config,但這是我的作品。

+0

將值添加到web.config對我來說不是一種選擇,並且此方法有效。 –