2013-11-28 2 views
3

Я использую REST API в PHP, чтобы попытаться создать покупку PayPal, но я получаю только общую ошибку 400 всякий раз, когда я ее запускаю. По-видимому, это означает «плохой запрос», но подробностей нет. Вот основная часть моего кода:PayPal с ошибкой возврата REST PHP 400

define("PP_CONFIG_PATH", "../vendor/"); 

$apiContext = new ApiContext(new OAuthTokenCredential('-redacted-', '-redacted-')); // id, secret 

$addr = new Address(); 
$addr->setLine1($_POST['addr1']); 
if(isset($_POST['addr2']) && !empty($_POST['addr2'])) $addr->setLine2($_POST['addr2']); 
$addr->setCity($_POST['city']); 
$addr->setCountry_code($_POST['country']); 
$addr->setPostal_code($_POST['zip']); 
$addr->setState($_POST['state']); 
$addr->setPhone('9179261285'); // TODO put in actual phone 

$card = new CreditCard(); 
$card->setNumber($_POST['card_num']); 
$card->setExpire_month($_POST['expire_mon']); 
$card->setExpire_year($_POST['expire_yr']); 
$card->setCvv2($_POST['cvv2']); 
$card->setFirst_name($_GET['fname']); 
$card->setLast_name($_GET['lname']); 
$card->setBilling_address($addr); 

$fi = new FundingInstrument(); 
$fi->setCredit_card($card); 

$payer = new Payer(); 
$payer->setPayment_method('credit_card'); 
$payer->setFunding_instruments(array($fi)); 

$cost = $_POST['plan'] == 1 ? '19.95' : '29.95'; 

$amountDetails = new AmountDetails(); 
$amountDetails->setSubtotal($cost); 
$amountDetails->setTax('0.00'); 
$amountDetails->setShipping('0.00'); 

$amount = new Amount(); 
$amount->setCurrency('USD'); 
$amount->setTotal($cost); 
$amount->setDetails($amountDetails); 

$transaction = new Transaction(); 
$transaction->setAmount($amount); 
$transaction->setDescription('MyTrustCo membership subscription.'); 

$payment = new Payment(); 
$payment->setIntent('sale'); 
$payment->setPayer($payer); 
$payment->setTransactions(array($transaction)); 

try { 
    $response = $payment->create($apiContext); 
} catch (PPConnectionException $e) { 
    echo "<br />exception:<br />" . $e->getMessage() . "<br />"; 
} 

echo "response: " . $response; 
die(); 

Последняя часть кода выхода:

exception: 
Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment. 
got response 
response: 

Я понятия не имею, что может быть причиной этой ошибки. Я следил за этим учебным пособием: https://developer.paypal.com/webapps/developer/docs/api/#create-a-payment

+0

Конечно, если вы можете сказать мне, что образец свалка и как получить один. – Greg

+0

Он предоставил дамп на выходе. У меня такая же ошибка, но вместо этого это 404, и это единственное, что возвращается. – cj5

+0

Имея ту же самую проблему в настоящее время (получение ответа 400). Кто-нибудь открыл причину этого? –

ответ

2

У меня была такая же проблема, но в итоге я обнаружил основную причину, захватив исключение вместо PPConnectionException (в соответствии с образцом кода SDK, который обманул нас обоих). Как только я это сделал, мне удалось сбросить данные об исключениях, которые показали, что PayPal жаловался, что моя сумма транзакций не была отформатирована правильно - у меня была только одна цифра после десятичной точки. Если посмотреть на свой код выше, это вряд ли будет иметь место, но изменение обработчика исключений должно быстро выявить реальную проблему.

Вы также можете быть восприимчивы к проблеме форматирования для других значений, хотя в будущем, что вы можете решить со следующим:

money_format('%!i', $amount) 
Смежные вопросы