【问题标题】:PayPal REST API DotNet SDK 1.9.1 - where is the URI endpoint?PayPal REST API DotNet SDK 1.9.1 - URI 端点在哪里?
【发布时间】:2018-11-02 23:59:07
【问题描述】:

我将 PayPal Dotnet REST SDK 1.9.1 安装到一个测试应用程序中,一切正常(完全没有问题)。但注意到没有指定端点(我也不需要指定它),所以我认为它存储在某个地方(paypal.dll?)。

运行 SDK 代码示例(取自 PayPal 的开发者网站)似乎会自动生成 3 个链接。

我是否需要担心 URI 嵌入在某处的 dll 中?

有什么理由改变它吗?

***** 编辑 ******* 这是我用来获取 APIContext 的代码 - 有人看到这段代码有问题吗?无论我为端点(或模式,或你有什么)输入什么,SDK 总是使用沙盒端点。这里真正的疯狂之处在于它接受了 LIVE ClientId 和 Secret(因此它肯定连接到 LIVE 端点),但任何进一步的请求总是发送到沙盒端点。注意:这个函数只被调用一次,上下文只是传递给其他函数/调用/what-have-you。我什至将其设置为不高兴地通过引用传递。

public static PayPal.Api.APIContext GetPaypalRestAPIContext()
{
    try
    {
        Dictionary<string, string> config = null;
        if (WebAppSettings.PaypalMode.ToLower != "live")
        {
            config = new Dictionary<string, string>()
            {
                {"mode", WebAppSettings.PaypalMode.ToLower},
                {"clientId", WebAppSettings.PaypalTestClientId},
                {"clientSecret", WebAppSettings.PaypalTestClientSecret},
                {"endpoint", "https://api.sandbox.paypal.com/"}
            };
        }
        else
        {
            config = new Dictionary<string, string>()
            {
                {"mode", WebAppSettings.PaypalMode.ToLower},
                {"clientId", WebAppSettings.PaypalClientId},
                {"clientSecret", WebAppSettings.PaypalClientSecret},
                {"endpoint", "https://api.paypal.com/"}
            };
        }

        string accessToken = (new PayPal.Api.OAuthTokenCredential(config)).GetAccessToken();
        PayPal.Api.APIContext apiContext = new PayPal.Api.APIContext(accessToken);

        return apiContext;
    }
    catch (Exception ex)
    {
        EventLog.LogEvent("Paypal APIContext", "PaypalRestAPIContext has failed.", EventLogSeverity.Warning);
        return null;
    }

}

我觉得我在这里错过了什么或失去了理智。

【问题讨论】:

  • 也许我的意思是说 API 端点在哪里?我该如何改变它?我真的,真的,真的,需要对 PayPal 的 REST API 进行负面测试(他们没有关于如何在任何地方进行更改的信息,只是需要更改),但不知道在哪里进行更改。应用程序配置?如果有,如何指定?

标签: asp.net paypal paypal-rest-sdk


【解决方案1】:

根据API reference documentation

API 服务的 URL

  • 沙盒。 https://api.sandbox.paypal.com
  • 直播。 https://api.paypal.com

这些相同的 URL 位于 BaseConstants 类的 GitHub Repository of the SDK 中,这意味着它们实际上是嵌入/硬编码在 SDK 中的

/// <summary>
/// Sandbox REST API endpoint
/// </summary>
public const string RESTSandboxEndpoint = "https://api.sandbox.paypal.com/";

/// <summary>
/// Live REST API endpoint
/// </summary>
public const string RESTLiveEndpoint = "https://api.paypal.com/";

/// <summary>
/// Security Test Sandbox REST API endpoint
/// </summary>
public const string RESTSecurityTestSandoxEndpoint = "https://test-api.sandbox.paypal.com/";

这将证实 SDK 观察到 3 个链接“生成”

文档中也有提及。

为了在您的应用程序中使用 PayPal .NET SDK,您需要首先配置您的应用程序。默认情况下,SDK 将尝试在应用程序的 web.configapp.config 文件中查找 PayPal 特定设置。

PayPal Config Settings

以下是一个示例配置文件,其中包含用于此 SDK 的设置所需的配置部分:

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

mode:确定您的应用程序将使用哪个 PayPal 端点 URL。可能的值为livesandbox

所以看起来设置中的mode 将确定当向 API 发出请求时 SDK 调用哪个端点 URL。

回答您的问题。

我是否需要担心 URI 嵌入在某个 dll 中?

没有。

有什么理由改变它吗?

它们允许工具更改代码运行的模式设置,以便在执行时使用适当的端点 URL。这意味着如果您想针对沙盒运行测试,只需更改应用程序的模式设置即可。

【讨论】:

  • 我将把这个问题移到别处。无论我为端点输入什么,SDK 都会坚持将我发送到沙盒 URL。我开始认为 SDK 中存在错误。
  • @MC9000 检查是否已经在 Github 上的 repo 上提出了问题。您可以尝试查看代码,看看它是否证实了您的怀疑。
  • 我刚刚将我的代码贴在了顶部(因为我无法将代码添加到 cmets) - 一定是我做错了。不幸的是,最新的代码示例是几年前的,可能不适用于最新版本的 SDK
  • 我想通了(我是个白痴)。我从未添加以下内容: apiContext.Config = config;因此,自然地,在获得带有正确配置数据的令牌后,上下文默认为沙箱(因为我忽略了这个小东西)。因为沙盒一切正常,所以我认为没有任何遗漏。
猜你喜欢
  • 1970-01-01
  • 2016-02-10
  • 1970-01-01
  • 2016-04-02
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 2016-05-19
相关资源
最近更新 更多