Ruby on rails 使用PayPal REST API,如何取消付款?

Ruby on rails 使用PayPal REST API,如何取消付款?,ruby-on-rails,ruby,rest,paypal,Ruby On Rails,Ruby,Rest,Paypal,使用PayPalRESTAPI,我似乎不知道如何在客户单击“取消订单并返回网站”链接后取消付款。也许在生产模式下,PayPal会自动取消这些付款,但在沙箱模式下,它们似乎保持在“创建”状态 这一观察结果让我相信,在返回网站的“取消url”页面时,我需要以编程方式取消每次付款。但是,我在PayPalRESTAPI文档中似乎找不到cancel函数 无论如何,我使用的是Ruby API。我认为您需要取消付款授权: 事实上,我直接和贝宝的某个人谈过。答案是: 一旦用户授权销售,就必须执行销售。不能取消

使用PayPalRESTAPI,我似乎不知道如何在客户单击“取消订单并返回网站”链接后取消付款。也许在生产模式下,PayPal会自动取消这些付款,但在沙箱模式下,它们似乎保持在“创建”状态

这一观察结果让我相信,在返回网站的“取消url”页面时,我需要以编程方式取消每次付款。但是,我在PayPalRESTAPI文档中似乎找不到cancel函数


无论如何,我使用的是Ruby API。

我认为您需要取消付款授权:


事实上,我直接和贝宝的某个人谈过。答案是:

一旦用户授权销售,就必须执行销售。不能取消 超过那一点。因此,如果用户返回您的返回URL,则您是 只是希望在付款时运行“执行”命令


这可能不直接适用于您的情况。我认为“取消”的唯一方法是先“执行”,然后申请全额“退款”。否则,永远不要执行(我也认为这很奇怪,因为这看起来像是潜在的安全问题。也就是说,可能发生的主要问题是“执行”付款,您的公司将收到钱,您可以在必要时手动退款…)

我上周一直在联系PayPal的技术支持,他们是这么说的:

如果买家已完成贝宝结账页面上的工作 在不取消结账的情况下,它们将被重定向回您的帐户 地点。如果您希望他们在那时取消,您可以 可以构建返回URL以进行最终确认(显示最终确认 总计(待计费)。因此,此时买家在您的网站上,但是 尚未执行付款。如果买方决定 继续,然后运行execute命令,用 成功付款的详细信息。如果买方决定在 此时,您不运行execute命令并清除付款 ID和买家的付款人ID。不会有要求您 需要转到PayPal以取消买家在PayPal上所做的操作。这 将与使用 快速结帐。一旦买家被送到贝宝,他们 选择资金来源和配送地址,并将其发送回 你的网站,如果他们想取消交易,你的网站不会 向PayPal发送任何API调用以取消或作废EC令牌。它是 只是不用于收取付款

当被问及如何处理未执行付款以及在一定时间后是否自动作废未执行付款时:

是的,我建议从数据库中删除付款ID,因此 这不是意外付款。默认情况下,我们的系统将在 PayPal付款人在未付款的情况下进行的付款批准 在3小时内执行。


贝宝已经允许在这里发布他们的答案

我使用了paypal api v2,还有取消订单api


只有当您想在此处定义的稍后时间捕获付款时,才使用授权:我认为这个问题与此类付款无关。不过这很奇怪。。当您在paypal环境中(作为买家批准付款时),确认按钮下方会显示“您几乎完成了。您将在STORENAME上确认您的付款。”建议。。在执行之前,您首先需要在本地存储中进行确认……我同意,并且我也第一次尝试以这种方式实现它。另外,为什么我们需要运行
../execute
,而他们可以先自己运行它。我不太确定我是否理解这样做的必要性。是的,我也想知道同样的。。。我打开了一张罚单,再次询问他们这一点,并要求他们的RESTAPI使用新的API端点来取消批准的付款。一旦我得到回复,我会把它贴在这里。我从贝宝那里得到了一个答案(见下文),结果是未执行的付款在三个小时后从他们的记录中删除。为了保存,当用户在您的商店取消付款时,您可以从自己的数据库中删除付款记录。您知道如何在V2上执行此操作吗?这更有意义。很高兴知道我们可以朝两个方向走:立即执行或向用户提供另一个确认。是的。仍然很奇怪,他们的文档中并没有这一点。但我们现在知道:)这是一个v1api。不要告诉我我需要调用一个不推荐使用的api来实现这一点。