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

Posted

技术标签:

【中文标题】需要帮助使用 PayPal REST API 或 C# 中的任何其他方法获取 PayPal 交易【英文标题】:Need help getting PayPal transactions using PayPal REST API or any other method in C# 【发布时间】:2021-08-15 00:17:12 【问题描述】:

我一直在反复研究如何获取交易清单(需要说明的是,我是一名 PayPal 商家,我想要的交易是向我们支付的款项)并且我一直在寻找旧的、已弃用和误导性的信息.

备份,我的问题是这样的:

当我们有订单时,我们使用 PayPal 的 IPN 系统通知我们。这在 99% 的时间里都很好用。每隔一段时间,PayPal 就会丢球,从不发送 IPN。我有一个用 VB6 编写的旧应用程序,用于查询我们的 PayPal 帐户并创建我自己的模拟 IPN 条目,但它很笨重并且有时会崩溃。无论如何我都不喜欢它,因为它必须在用作网络服务器的 PC 上运行,并调用一堆我个人没有编写的 php 脚本。出于某种原因,我现在无法对程序进行更改,所以我需要用 C#.NET 中的内容替换它

我知道你们喜欢代码示例,所以这就是我所拥有的。我很容易就能让 OAuth 凭据正常工作,但我终其一生都无法弄清楚如何查看向我们支付的款项(或我们发放的退款)。这个例子是我遇到的兔子洞之一,结果证明 Payment.List 给了我我们支付的款项,而不是支付给我们的款项。我研究了这么多不同的功能/方法/你们喜欢怎么称呼它们,我找不到任何可以产生支付给我们的付款清单的东西,你只需要指定一个日期范围(它没有帮助拥有一个我需要指定交易 ID 的功能,因为交易 ID 是我正在寻找的东西之一。

    private void cmdPayPalTest_Click(object sender, EventArgs e)
    
        var config = ConfigManager.Instance.GetProperties();
        config.Add("clientId","<<PayPalclientId Goes here>>");                 
        config.Add("clientSecret", "<<PayPal clientSecret Goes here>>");
        var accessToken = new OAuthTokenCredential(config).GetAccessToken();
        var apiContext = new APIContext(accessToken);
        var bob = PayPal.Api.Payment.List(apiContext, 20, "", 0);
        var sam = bob.ConvertToJson();
    

有没有人知道获取支付给我们作为商家的交易清单的现代、非弃用、批准的方法?我很沮丧,多次碰壁。

编辑:

因为我在用于搜索交易的 REST API 的文档中找不到任何内容,所以我尝试添加一些代码来翻译 PayPal 为 TransactionSearch 提供的 Curl(我完全不清楚这是 REST 还是 NVP/SOAP )。我从 Preston PHX 的以下答案中看到,也许 TransactionSearch 是我唯一的选择,但我编写的代码给了我一个错误 - “StatusCode:403, ReasonPhrase: 'Forbidden'...”这是否与Preston PHX 的回答中提到了 9 小时?我有另一个应用程序不断在另一台计算机上运行,​​该计算机在某些 PHP 脚本中使用 TransactionSearch。如果我的问题是“9 小时”所指的任何问题,我会暂时关闭它,我将在早上尝试我的新代码。同时,如果有人对我的 403 错误有其他解释,我很想听听。这是我从上面的代码中提供 Oauth 令牌 accessToken 的代码:

      private async void CurlRequest(string MrToken)
    
        using (var httpClient = new HttpClient())
        
            using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-m.paypal.com/v1/reporting/transactions?start_date=2020-01-01T00:00:00-0700&end_date=2021-05-25T23:59:59-0700&fields=all&page_size=100&page=1"))
            
                request.Headers.TryAddWithoutValidation("Authorization", MrToken);

                var response = await httpClient.SendAsync(request);
                MessageBox.Show(response.ToString());
            
        

    

响应字符串显示我提到的 403 错误。如果这意味着什么,也很高兴提供其余的错误消息,但我认为也许真的没有。

【问题讨论】:

developer.paypal.com/docs/api/overview... 这个链接应该有所有的信息 如果您使用的是 PayPal-NET-SDK...请从 Git 中查看这些示例。github.com/paypal/PayPal-NET-SDK/tree/master/Samples 如果您正在寻找 ASP.NET 中 PayPal 支付网关集成的最新解决方案,请查看演示:techtolia.com/PayPal 【参考方案1】:

cmets 中提及的 PayPal-NET-SDK 已弃用,不应使用。如果您要对 Checkout-NET-SDK 或 Payouts-NET-SDK 用例以外的任何内容进行 API 调用,请使用直接 REST API 调用。

获取交易列表的最佳方法是从www.paypal.com下载 CSV 格式的活动日志报告

但是,如果出于某种原因您需要 API 来执行此会计任务,则唯一公开可用的 API 是交易搜索 API:https://developer.paypal.com/docs/api/transaction-search/v1 - 您必须为您正在使用的客户端 ID 启用它,并等待9 小时(或终止令牌),如果您已经请求访问令牌。

【讨论】:

谢谢。这是令人失望的消息。我不能像下载 CSV 文件那样使用手动过程,因为我们每个月都有成千上万的 PayPal 交易,我需要这个过程来立即发现 PayPal 的 API 系统中的失误,所以我们不会忽略向客户发送他们的订单时间。 我很确定我现在在其他人为我编写的 PHP 脚本中使用的是事务搜索 API。我在上面编辑了我的问题,但基本上,你说我需要等待 9 个小时来等待我在编辑的问题中描述的错误原因,还是我的代码有缺陷?我只是真的不知道如何在 C# 中提交事务搜索查询并且需要一些帮助。提前致谢。 请注意,在我的第一条评论中,当我打算输入“PayPal 的 IPN 系统”时,我输入了“PayPal 的 API 系统”。我已经过了允许编辑 cmets 的五分钟窗口期,所以我只是想说明一下。我正在进行的整个项目都是关于捕获通过 PayPal 的 IPN 系统的订单,这种情况经常发生,需要这样的东西。 您的客户端 ID 的应用似乎没有所需的范围。当您请求访问令牌时,它需要为事务搜索返回范围 https://uri.paypal.com/services/reporting/search/read。在 paypal.com/… 中管理您的 clientid 应用程序的权限。启用必要的权限后,您将需要等待 9 小时或终止现有的访问令牌 用例如curl -X POST https://api.sandbox.paypal.com/v1/oauth2/token/terminate \ -d "token=REPLACE_WITH_YOUR_TOKEN"

以上是关于需要帮助使用 PayPal REST API 或 C# 中的任何其他方法获取 PayPal 交易的主要内容,如果未能解决你的问题,请参考以下文章

通过 PayPal REST API 示例打折?

PayPal Rest API SDK:如何添加 SOLUTIONTYPE 选项(或等效项)

通过 Classic 或 Rest API 的 Paypal 付款

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

使用 Paypal REST API 时需要 API 证书

如何使用 PayPal PHP REST API 设置帐单或送货地址?