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 应用程序的clientId
和 clientSecret
设置(当然,这些值被屏蔽了!)。【参考方案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>
其中xxx
、yyy
、zzz
是您从主sandbox test account 的“帐户详细信息”中获得的值。
【讨论】:
我正在尝试在不使用任何 web.anything 的情况下将其作为桌面应用程序,真的。如果我必须解析网页 html 代码来实现它,那很好,但我的雇主正在从 Authorize.Net API 切换到 Paypal API,我想这就像将电动发动机放入柴油卡车一样复杂(即将到来来自一个对汽车或卡车一无所知的人)。 我不必包含 部分,但我确实必须包含我遇到了同样的错误。我尝试了 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 卡存在(刷卡)付款?