Paypal Refund Sale REST API 返回:远程服务器返回错误:(404)未找到

Posted

技术标签:

【中文标题】Paypal Refund Sale REST API 返回:远程服务器返回错误:(404)未找到【英文标题】:Paypal Refund Sale REST API Returning: Remote server returned an error: (404) Not Found 【发布时间】:2016-12-20 12:05:24 【问题描述】:

我正在使用 Paypal .NET SDK 尝试执行付款和退款。我的付款功能正常,但是我无法执行退款。我一直在翻阅 Paypal 的文档和代码示例,例如:

http://paypal.github.io/PayPal-NET-SDK/Samples/SaleRefund.aspx.html https://developer.paypal.com/docs/api/payments/#sale_refund

我的退款流程基于 Paypal 的一个代码示例(上面的第一个链接),并在我自己的类库中稍作修改:

public class RefundTransaction

    private readonly string _paypalUniqueTransactionId;
    private readonly CurrencyEnum _currency;
    private readonly decimal _orderTotal;

    /// <summary>
    /// Creates a refund with basic key fields.
    /// </summary>
    /// <param name="paypalUniqueTransactionId"></param>
    /// <param name="currency"></param>
    /// <param name="orderTotal"></param>
    public RefundTransaction(string paypalUniqueTransactionId, CurrencyEnum currency, decimal orderTotal)
    
        _paypalUniqueTransactionId = paypalUniqueTransactionId;
        _currency = currency;
        _orderTotal = orderTotal;
    

    /// <summary>
    /// Processes and completes a refund on a sale transaction.
    /// </summary>
    public void RefundWholeSale()
    
        #region Set the refund details

        Refund processRefund = new Refund
        
            amount = new Amount()
            
                currency = _currency.ToString(),
                total = _orderTotal.ToString("N")
            
        ;

        #endregion

        #region Action the refund

        Sale refundSale = new Sale()
        
            id = _paypalUniqueTransactionId
        ;

        Refund refundResponse = refundSale.Refund(Configuration.GetAPIContext(), processRefund);

        #endregion

    

我得到的响应是 404 错误。据我了解,此 API 调用使用 /v1/payments/sale/sale-id/refund 端点。我使用的 Sale ID 值是用户付款后我存储的值:PAY-XXXXXXXXXXXXXXXXXXXXXXX。

我是否使用了正确的“销售 ID”? Paypal 帐户是否需要特殊权限才能通过 REST API 退款?

对此的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我终于让它工作了。我以为是销售 ID,实际上是不正确的。销售 ID 隐藏在 Paypal .NET SDK 的 related_resources 部分中。

在代码中创建付款时,我现在存储销售 ID,您可以按如下方式检索:

// Create a payment using a valid APIContext.
Payment createdPayment = payment.Create(Configuration.GetAPIContext());

string id = createdPayment.id; // This is no the Sale ID you're looking for...
string saleId = createdPayment.transactions[0].related_resources[0].sale.id;

我希望这可以帮助其他有同样问题的人。

【讨论】:

【参考方案2】:

在服务器上找不到请求的资源时会出现404错误。我认为您错过了完整的 API 网址,请尝试将以下信息与标头值一起发布。

网址:https://api.sandbox.paypal.com/v1/payments/sale/&amp;lt;Transaction-Id&amp;gt;/refund 内容类型:application/json 授权:Bearer &lt;Access-Token&gt;

数据:


  "amount":
  
  "total": "2.34",
  "currency": "USD"
  

【讨论】:

以上是关于Paypal Refund Sale REST API 返回:远程服务器返回错误:(404)未找到的主要内容,如果未能解决你的问题,请参考以下文章

PayPal REST API - 已退款交易错误

使用 Paypal REST API 创建付款

PayPal Rest API 直接付款

Paypal支付的退款refund之getAccessToken

通过 PayPal REST API 进行银行支付

PayPal Rest API 创建付款不返回销售 ID