我可以在app.config文件中使用两个不同的clientId和clientSecret值与c#中的PayPal API吗?

时间:2018-03-09 22:58:33

标签: c# paypal app-config paypal-rest-sdk

有没有合理的方法在同一个C#Winforms应用程序中使用两个不同的clientId和clientSecret值?

以下是我想要这样做的原因:我有一个内部公司应用程序为客户执行PayPal退款 - 有些来自我们的美国PayPal帐户,有些来自我们的英国PayPal帐户。因为它们来自不同的帐户,所以我需要创建两个PayPal应用程序并获得两组不同的安全clientId和clientSecret值。我真的希望Winforms应用程序能够退还任何一个帐户,但此时,我只能通过使用PayPal API并在app.config文件中包含以下代码来成功退款。 / p>

  <!-- PayPal SDK settings -->
  <paypal>
    <settings>
      <add name="mode" value="live" />
      <add name="clientId" value="AZxxxxxxxxxxxxxxxxx" />
      <add name="clientSecret" value="ELxxxxxxxxxxxxxxxxxxxxxxxxxx" />
    </settings>
  </paypal>

如果必须,我会为我们的英国帐户创建一个单独的退款申请,但似乎必须有合理的方法在一个申请中执行此操作。

据我所知,虽然可能有一些方法可以更改app.config文件,但每个人似乎都说这是一个糟糕的主意,即使你设法做到这一点,你的应用程序也会重新启动。

所以我想我要问的是,有没有办法在运行时更改clientId和clientSecret的值而不会实际导致重启程序?或者,是否有其他方法从PayPal API获取accessstoken,这将允许我在运行时指定clientId和clientSecret?

更新 - 在阅读下面的Erik Philip的回答后,我尝试在app.config文件中注释掉clientId和clientSecret,然后代替此代码进行授权:

    var config = ConfigManager.Instance.GetProperties();
    var accessToken = new OAuthTokenCredential(config).GetAccessToken();
    var apiContext = new APIContext(accessToken);

我添加了这个:

    var config = ConfigManager.Instance.GetProperties();
    config.Add("clientId", "AZxxxxxxxxxxxxxxxxxxxxxxxxx");
    config.Add("clientSecret", "ELxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    var accessToken = new OAuthTokenCredential(config).GetAccessToken();
    var apiContext = new APIContext(accessToken);

这很好用,我后来在那里添加了一个if()语句来检查它是否是英国订单,并相应地更改了clientId和clientSecret。

1 个答案:

答案 0 :(得分:2)

根据他们自己的documentation,你可以。

摘录:

使用PayPal.Api;

ConfigManager

由于{{1}}正在创建实例,您可以创建自己的实例,也可以采用此实例并相应地进行更改。