2017-02-05 3 views
0

Я просто пытаюсь провести тест с помощью платежей в PayPal, и это действительно расстраивает. Моя цель для этого теста - отправить первичный приемник $ 15, а затем $ 1 на вторичный приемник. Вот мой код:PayPal Цепная помощь по платежам [PHP]

$api = "https://svcs.sandbox.paypal.com/AdaptivePayments/Pay"; 

$input = array(
    "actionType" => "PAY", 
    "currencyCode" => "USD", 
    "feesPayer" => "EACHRECEIVER", 
    "cancelUrl" => "https://www.google.com", //test url 
    "returnUrl" => "https://www.google.com", //test url 
    "receiverList" => array( 
     "receiver" => array(//send primary receiver $15 
      "amount" => "15.00", 
      "email" => "[email protected]", 
      "primary" => true 
     ), 
     "receiver" => array(//send owner of site $1 commission 
      "amount" => "1.00", 
      "email" => "[email protected]", 
      "primary" => false 
     ) 
    ), 
    "requestEnvelope" => array(
     "errorLanguage" => "en_US" 
    ) 
); 

$headers = array(
    "X-PAYPAL-SECURITY-USERID: ".USER_ID, //predefined 
    "X-PAYPAL-SECURITY-PASSWORD: ".USER_PASS, //predefined 
    "X-PAYPAL-SECURITY-SIGNATURE: ".USER_SIG, //predefined 
    "X-PAYPAL-REQUEST-DATA-FORMAT: JSON", 
    "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON", 
    "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" 
); 

$ch = curl_init($api); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($input)); 

$response = curl_exec($ch); 
var_dump($response); 

Когда я пытаюсь сделать это, она работает, но в моих деталях платежа он показывает только $ 1 на вторичный приемник, нет никаких следов первичного приемника:

{"paymentInfo":[{"receiver":{"amount":"1.00","email":"[email protected]","primary":"false","paymentType":"SERVICE","accountId":"6LBSVJQNVE9DA"},"pendingRefund":"false"}]}

Я попытался установить «ActionType» на «PAY_PRIMARY», и он дал мне эту ошибку:

"message":"Invalid request parameter: action type PAY_PRIMARY can only be used in chained payments","parameter":["PAY_PRIMARY"]

это становится довольно сложно, как я посмотрел его на YouTube, StackOverflow, некоторые веб-сайты на форуме, и т.д. и не нашли много полезной информации.

Большое спасибо всем, кто найдет время, чтобы прочитать это и помочь мне!

+0

'это действительно расстраивает' добро пожаловать в мир Paypal. – Martin

ответ

0

Ваша ошибка состоит в PHP синтаксис массива здесь:

"receiverList" => array( 
    "receiver" => array(/*primary receiver info*/), 
    "receiver" => array(/*secondary receiver info*/) 
), 

Ассоциативный массив может иметь только одно значение для каждого ключа (представить, почему, представьте себе доступ к $receiverList['receiver'] из массива объявляются таким образом, это Wouldn» знать, что вы хотели).

Для PHP это то же самое, что и запись $foo = 1; $foo = 2;, и ожидая, что и 1, и 2 все еще будут «там». Так что все, что будет отправлено на Paypal это:

"receiverList" => array( 
    "receiver" => array(/*secondary receiver info*/) 
), 

Вы можете увидеть это для себя, если вы эхо из json_encode($input).

Я не знаю, как должен выглядеть массив, но это определенно не так. Моя догадка, не видя документов будет простой список с не указаны никакие клавиши:

"receiverList" => array( 
    array(/*primary receiver info*/), 
    array(/*secondary receiver info*/) 
), 

или, возможно, "recevier" ключ должен быть там, и две записи внутри что:

"receiverList" => array(
    "receiver" => array(
     array(/*primary receiver info*/), 
     array(/*secondary receiver info*/) 
    ) 
), 

Или возможно, вы неправильно документацию и нет никакого ключа «receiverList», только «приемник»:

"receiver" => array( 
    array(/*primary receiver info*/), 
    array(/*secondary receiver info*/) 
), 

Какой бы вариант это, нет никакого смысла изменения остальной вашего запроса, пока вы не получите этот бит правильно, потому что прямо сейчас вы отправляете только один комплект ресивера в Paypal.

+0

@cola Я обновил свой ответ с большим количеством объяснений и еще несколькими возможностями; Я не знаю, что правильно, но я на 100% уверен, что то, что вы задали в своем вопросе, неверно и приведет к точному описанию симптомов. – IMSoP

+0

Большое вам спасибо! Я новичок в PHP и всей этой программе в целом, и вы действительно помогли мне. Большое вам спасибо за то, что вы не торопитесь, я очень благодарен. – cola

+0

@cola См. Также http://stackoverflow.com/questions/24845135/paypal-payments-to-multiple-receivers-adaptive-payments. Пример кода указан в https://github.com/angelleye/paypal-php-library/blob/master/samples/Pay-Chained.php предполагает, что предложение IMSoP, которое является его «лучшей догадкой», является правильным решением. –

Смежные вопросы