2014-04-04 13 views
1

我一直想(徒勞!)得到PayPals SetPaymentOptions API功能正常工作,按照:https://developer.paypal.com/docs/classic/api/adaptive-payments/SetPaymentOptions_API_Operation/貝寶自適應支付SetPaymentOptions - 它的工作?

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 => '[email protected]', 
       paymentType => "GOODS", 
       invoiceId => "test" 
      }, 
      { 
       amount => 15, 
       email => '[email protected]', 
       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 => '[email protected]' 
      }, 
      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完成 - 因爲他們看起來更有希望這...但現在,我必須湊合一下我們在這裏與自適應付款)

UPDATE:

這是你的意思問候運行ExecutePayment什麼?

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

- 終於得到它的工作!根據安德魯斯的信息,我沒有看到ExecutePayment請求中的運費/單位/稅款等原因是因爲我們還沒有將它們發送到付款頁面(並且在付款完成之前您無法獲取它) )。使用沙盒,您可以登錄到測試帳戶,並完美地查看所有單位等。

+0

您是否在調用PaymentDetails之前使用ExecutePayment完成支付? –

+0

哦,你打電話給** SetPaymentOptions **之後必須這麼做嗎? –

+0

@AndrewAngel我試着在'SetPaymentOptions'請求後執行'PaymentDetails'請求,但是我得到一個錯誤:這個支付請求必須由發送者在test.cgi第16行授權。我傳入:'payKey => $ json_returned - > {payKey},requestEnvelope => {detailLevel =>「ReturnAll」,errorLanguage =>「en_US」}'...我錯過了什麼?謝謝! –

回答

2

當您使用Pay with CREATE,然後調用SetPaymentOptions後,直到完成ExecutePayment纔會發生付款。因此,當您撥打PaymentDetails時,沒有可獲得的細節。

嘗試調用ExecutePayment完成任務,然後查看PaymentDetails是否對您更好。

+0

感謝您的答覆。所以只是爲了確定,你是在建議我先'付費',然後是'SetPaymentOptions',然後是'ExecutePayment',最後(測試它是否保存好),'PaymentDetails'? –

+0

是的。在運行ExecutePayment之前,您甚至不應該在接收方帳戶中看到任何付款。 –

+0

謝謝 - 當我按順序運行它時,我得到: '錯誤:此付款請求必須由發件人在test.cgi第170行授權。(來自** ExecutePayment **請求)。當我執行「付款」請求時,這是正確的行爲,是嗎? 'actionType =>「PAY」,'? (在它使用UPDATE提到的某些地方,cos,但肯定不會在** Pay **請求中調用) –