【问题标题】:PayPal Adaptive Payment SetPaymentOptions - does it work?PayPal 自适应付款 SetPaymentOptions - 有效吗?
【发布时间】:2014-05-16 11:26:31
【问题描述】:

我一直在尝试(没有结果!)让 PayPals SetPaymentOptions API 功能正常工作,根据:https://developer.paypal.com/docs/classic/api/adaptive-payments/SetPaymentOptions_API_Operation/

FWIW - 我知道下面不是真正的 JSON,但它是我正在创建的 Perl 对象 - 在发送之前会转换为 JSON(这样更容易阅读,与将所有内容集中在一行相比 =))

到目前为止,我使用“支付”功能 (https://svcs.sandbox.paypal.com/AdaptivePayments/Pay) 创建了初始付款:

{
      requestEnvelope => { 
        detailLevel => "ReturnAll",
        errorLanguage =>  "en_US",
      },
      actionType => "PAY",
      currencyCode => "USD",
      receiverList => {
         receiver => [
           {
              amount => 65,
              email  => 'user1@gmail.com',
              paymentType => "GOODS",
              invoiceId => "test"
           },
            {
              amount => 15,
              email  => 'user2@gmail.com',
              paymentType => "GOODS",               
              invoiceId => "test 2"
           }
         ],  
      },
      returnUrl => 'http://xx.com/thanks.html',
      cancelUrl => 'http://xx.com/cancel.html',
}

这可以很好地创建它,并且我可以很好地返回 payKey。当我尝试通过 SetPaymentOptions 添加运费/单位价格/税费等时,问题就开始了。这是我提出的一个示例请求:

{
  payKey => $json_returned->{payKey},
  requestEnvelope => { 
          detailLevel => "ReturnAll",
          errorLanguage =>  "en_US",
  },  
  receiverOptions => [
      {
           customId => "foo123",
           receiver => {
              email => 'andy-facilitator@ultranerds.com'
           }, 
           invoiceData => {
             item => [{
                            name      => "ITEM1",
                            price     => 50,
                            itemCount => 2,
                            itemPrice => 25,
                          }],
              totalTax  => 5,
              totalShipping => 10,
           },
          SenderOptions  => {
              addressOverride => 1,
              requireShippingAddressSelection => 1
          }
      }
  ]
}

然后我通过使用 PaymentDetails 请求 (https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails)

获取该交易以查看它是否全部保存好

返回时总是没有运费、税金、单位编号等。我对发生的事情感到非常茫然 - 因为如果我要更改(例如)第二次请求中的单位数量,或交货价格...它给了我一个数字不匹配的错误!所以它必须承认它 - 但只是不做任何事情

我真的在我的智慧结束了(我希望他们快点完成 REST API - 因为它们看起来比这更有希望......但现在,我必须凑合我们在自适应支付中所拥有的)

更新:

这就是您运行ExecutePayment 的意思吗?

my $pass_in_params = {
  payKey => $json_returned->{payKey},
  requestEnvelope => { 
          detailLevel => "ReturnAll",
          errorLanguage =>  "en_US",
  },
  actionType => "CREATE"
};

WAHOO - 终于成功了!根据 Andrews 的信息,我没有看到 ExecutePayment 请求中的运费/单位/税金的原因是因为我们还没有将它们发送到付款页面(并且您在付款之前无法获取它做完了)。使用沙盒,您可以登录测试帐户并完美查看所有单元等。

【问题讨论】:

  • 您是否在调用 PaymentDetails 之前使用 ExecutePayment 完成付款?
  • 哦,你必须在调用 SetPaymentOptions 之后这样做吗?
  • @AndrewAngel 我尝试在SetPaymentOptions 请求之后执行PaymentDetails 请求,但出现错误:此付款请求必须由发件人在 test.cgi 第 16 行授权。我正在传递:payKey => $json_returned->{payKey}, requestEnvelope => { detailLevel => "ReturnAll", errorLanguage => "en_US" } ...我错过了什么?谢谢!
  • 在我的情况下执行也不起作用

标签: perl paypal paypal-adaptive-payments


【解决方案1】:

当您将 Pay 与 CREATE 一起使用,然后在其后调用 SetPaymentOptions 时,在您使用 ExecutePayment 完成付款之前不会发生任何付款。因此,当您调用 PaymentDetails 时,无需获取任何详细信息。

尝试调用 ExecutePayment 来完成任务,然后查看 PaymentDetails 是否更适合您。

【讨论】:

  • 感谢您的回复。所以为了确定,你建议我做Pay,然后是SetPaymentOptions,然后是ExecutePayment,最后(测试它是否保存好)PaymentDetails
  • 是的。在您运行 ExecutePayment 之前,您甚至不应该在收款人帐户中看到任何付款。
  • 谢谢 - 当我按这个顺序运行它时,我得到:ERROR: This payment request must be authorized by the sender at test.cgi line 170.(来自 ExecutePayment 请求)。当我执行“支付”请求时,这是正确的操作,是吗? actionType => "PAY",? (因为在某些地方它提到使用 UPDATE.. 但肯定不会在 Pay 请求中调用)
  • 使用 SetPaymentOptions 时,支付请求需要设置为 CREATE,而不是 PAY。
  • 谢谢 - 我感觉越来越近了!我现在在 Pay 中有这个:actionType => "CREATE",但是在执行 ExecutePayment 时我仍然收到这个错误(在 SetPaymentOptions 之后):@987654328 @
猜你喜欢
  • 2012-03-11
  • 2013-03-09
  • 2015-07-17
  • 2016-10-25
  • 2014-11-01
  • 2013-04-17
  • 2016-04-06
  • 2012-08-10
  • 2016-07-28
相关资源
最近更新 更多