有没有合理的方法在同一个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。
答案 0 :(得分:2)
根据他们自己的documentation,你可以。
摘录:
使用PayPal.Api;
ConfigManager
由于{{1}}正在创建实例,您可以创建自己的实例,也可以采用此实例并相应地进行更改。