Paypal c# REST API 要求未记录的配置部分

Posted

技术标签:

【中文标题】Paypal c# REST API 要求未记录的配置部分【英文标题】:Paypal c# REST API asks for an undocumented configuration section 【发布时间】:2013-10-20 18:20:36 【问题描述】:

我正在努力破解Battle Hack London 并且遇到了一个烦人的问题。用于 c# 的 PayPal SDK 似乎不太正常。

我正在尝试进行我的第一笔交易,这是我的代码(我将这些代码放在一起修复损坏的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 应该如何配置?

【问题讨论】:

【参考方案1】:

如果您像我一样,不想将客户端信息存储在 *.config 文件(web.config、app.config)中,我发现您可以在必须的字典中指定它传入 OAuthTokenCredential 并分配给 APIContext.Config(工作的关键):

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,但这对我有用。

【讨论】:

将值添加到 web.config 对我来说不是一个选项,并且这种方法有效。【参考方案2】:
var config = ConfigManager.Instance.GetProperties();

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

网络配置:

    <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>

【讨论】:

【参考方案3】:

仅供将来参考,PayPal .NET SDK 的可用配置设置现在在SDK's GitHub wiki 上提供。这包括有关所有受支持的 PayPal 配置设置及其默认值的信息。

如果您想使用您的应用程序启用日志记录,该 wiki 还包含有关如何(可选)在配置中setup log4net 的信息。

如果有任何信息缺失或需要澄清,或者如果您想请求对更多配置设置的支持,请随时在此处或on GitHub 告诉我。

【讨论】:

【参考方案4】:

如果您使用的是 PayPal .Net SDK(我的是 1.3.0 版),您只需要以下内容:

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

【讨论】:

还有a section in the documentation on GitHub for the SDK 提供了配置中可以执行的示例。我要在您的配置示例中添加的一件事是包含 PayPal REST 应用程序的 clientIdclientSecret 设置(当然,这些值被屏蔽了!)。【参考方案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 的“帐户详细信息”中获得的值。

【讨论】:

我正在尝试在不使用任何 web.anything 的情况下将其作为桌面应用程序,真的。如果我必须解析网页 html 代码来实现它,那很好,但我的雇主正在从 Authorize.Net API 切换到 Paypal API,我想这就像将电动发动机放入柴油卡车一样复杂(即将到来来自一个对汽车或卡车一无所知的人)。 我不必包含 部分,但我确实必须包含 部分,即使我已经通过配置在代码中设置了它字典。【参考方案6】:

我遇到了同样的错误。我尝试了 Skliwz 的解决方案,但它对我不起作用。

相反,我可以通过在调用中传递一个字典对象来获得结果。

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

仍在努力让我的登录工作......

【讨论】:

这允许创建访问令牌,但没有其他工作。例如,调用诸如 Payment.Get(accessToken, paymentId) 之类的东西来获得付款会导致关于缺少配置部分的相同错误。

以上是关于Paypal c# REST API 要求未记录的配置部分的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助使用 PayPal REST API 或 C# 中的任何其他方法获取 PayPal 交易

C# REST PayPal API - 如何传递自定义变量?

如何在 c# 中使用 rest api 进行 paypal 卡存在(刷卡)付款?

Paypal Rest API 未触发 webhook

Paypal REST api 调用适用于 cURL,但不适用于 C# 代码

PayPal REST API 创建协议:传入 JSON 请求未映射到 API 请求