Я пытался внедрить разделенные платежи с помощью API адаптивных платежей Paypal. У меня есть простой параллельный платеж на работу, однако это показывает, как раздельные платежи покупателю.
В основном я продаю членство. Наша местная ассоциация должна получить 75% средств, а 25% передаются руководящему органу. Участник должен видеть только общую сумму как членство в 2015 году, поэтому вместо этого я начал изучать цепочки платежей. На первый взгляд это выглядит как очень простое изменение кода, но вызывает у меня проблемы с односторонними платежами.
Я реализую это в php.
Так вот метод отправки PayPal
function PaypalSend($payment_details, $api_function){
// initial endpoint that starts the transaction
$paypalInitialEndpoint = 'https://svcs.sandbox.paypal.com/AdaptivePayments/';
// set http headers
$headers = array(
'Connection: Close',
'X-PAYPAL-SECURITY-USERID: testseller_api1.nipf.com',
'X-PAYPAL-SECURITY-PASSWORD: 1381912839',
'X-PAYPAL-SECURITY-SIGNATURE: AzykGe5AzfK.mJFMRzBwIcTap-LcAsmsP4AhYzk1Y-07mh-xPLc-goK3',
'X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T',
'X-PAYPAL-REQUEST-DATA-FORMAT: JSON',
'X-PAYPAL-RESPONSE-DATA-FORMAT: JSON'
);
// setup curl request and http headers
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $paypalInitialEndpoint . $api_function);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payment_details));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if(!($res = curl_exec($ch)) )
{
error_log(curl_error($ch));
curl_close($ch);
exit;
}
curl_close($ch);
return json_decode($res, TRUE);
}
И вот мой цепной способ оплаты. Этот код требует много рефакторинга, но он был полностью функциональным с параллельными платежами с незначительными изменениями в текущем коде.
function sendChainedPayment(){
$purchase_details_array = array(
"actionType" => "PAY",
"currencyCode" => "GBP",
"feesPayer" => "PRIMARYRECEIVER",
"memo" => "blah blah blah",
"receiverList" => array(
"receiver" => array(
array(
"amount" => "30.00",
"email" => "[email protected]",
"primary" => "true"),
array(
"amount" => "10.00",
"email" => "[email protected]",
"primary" => "false")
)
),
"returnUrl" => "http://localhost/membershipSuccess.php",
"cancelUrl" => "http://localhost/membershipCancel.php",
"requestEnvelope" => array(
"errorLanguage" => "en_UK",
"detailLevel" => "ReturnAll")
);
$response = PaypalSend($purchase_details_array, "Pay");
//echo json_encode($response) . "<br /><br />";
$payKey = $response['payKey'];
$payment_details = array(
"requestEnvelope" => array(
"errorLanguage" => "en_UK",
"detailLevel" => "ReturnAll"),
"payKey" => $payKey,
"receiverOptions" => array(
array(
"receiver" => array("email" => "[email protected]"),
"invoiceData" => array(
"item" => array(
array(
"name" => "Membership 2015",
"price" => "30.00",
"identifier" => "Membership 2015: joe bloggs")
)
)
),
array(
"receiver" => array("email" => "[email protected]"),
"invoiceData" => array(
"item" => array(
array(
"name" => "Membership 2015 (Fee)",
"price" => "10.00",
"identifier" => "Membership 2015 (Fee): joe bloggs")
)
)
)
)
);
$response = PaypalSend($payment_details, "SetPaymentOptions");
//echo json_encode($response) . "<br /><br />";
$paypalCustomerUrl = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=' . $payKey;
echo $paypalCustomerUrl;
//header('Location: ' . $paypalCustomerUrl);
}
Я получаю следующий ответ JSON с первым выноской. Я думаю, что это связано с тем, что учетные записи являются только учетными записями «песочницы», а не реальными учетными записями, но как мне проверить это в «песочнице», если все учетные записи должны быть реальными? В этом случае учетная запись, используемая в качестве учетной записи API, является основным получателем.
{"responseEnvelope":{"timestamp":"2015-02-04T14:37:26.598-08:00","ack":"Failure","correlationId":"749bd1d709e76","build":"15089777"},"error":[{"errorId":"520009","domain":"PLATFORM","subdomain":"Application","severity":"Error","category":"Application","message":"Account Account not found. Unilateral receiver not allowed in chained payment is restricted","parameter":["Account not found. Unilateral receiver not allowed in chained payment"]}]}
Я получал одно и то же сообщение об ошибке и исправил его, убедившись, что оба адреса электронной почты, на которые я отправлял платежи в вызове API, были учетными записями песочницы. Они не существовали как реальные адреса электронной почты, но они должны были существовать как учетные записи PayPal. (Ранее я отправлял их на 2 настоящие живые учетные записи PayPal, которых не было в песочнице).
Судя по сообщению об ошибке «аккаунт не найден. Односторонний получатель не допускается в цепочке платежей «, он просто не может найти вашу учетную запись, возможно, потому что они не являются учетными записями песочницы.
Других решений пока нет …