2014-04-25 11 views
8

Używam interfejsu API systemu PayPal, ale pojawia się błąd. Tu jest mój kodu:0 - Otrzymałem kod odpowiedzi Http 400 podczas uzyskiwania dostępu do strony https://api.sandbox.paypal.com/v1/payments/payment

function makePaymentUsingPayPal($total, $currency, $paymentDesc, $returnUrl, $cancelUrl) { 

    // set billing address 
    $addr = new Address(); 
    $addr->setLine1('fh52 N Main ST'); 
    $addr->setCity('Johnstownfhf'); 
    $addr->setCountry_code('UK'); 
    $addr->setPostal_code('35345'); 
    $addr->setState('DF'); 

    // set credit card information 
    $card = new CreditCard(); 
    $card->setNumber('4111111111111111'); 
    $card->setType('visa'); 
    $card->setExpire_month('12'); 
    $card->setExpire_year('2015'); 
    $card->setCvv2('123'); 
    $card->setFirst_name('dgdg'); 
    $card->setLast_name('dgdgdShopper'); 
    $card->setBilling_address($addr); 

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

    $payer = new Payer(); 
    $payer->setPaymentMethod("paypal"); 

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

    // Specify the payment amount.   
    $amountDetails = new Details(); 
    $amountDetails->setSubtotal('57.41'); 
    $amountDetails->setTax('0.06'); 
    $amountDetails->setShipping('0.06'); 

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

    // ###Transaction 
    // A transaction defines the contract of a 
    // payment - what is the payment for and who 
    // is fulfilling it. Transaction is created with 
    // a `Payee` and `Amount` types 
    $transaction = new Transaction(); 
    $transaction->setAmount($amount); 
    $transaction->setDescription('sdgdfg This is the payment transaction description.'); 

    $redirectUrls = new RedirectUrls(); 
    $redirectUrls->setReturnUrl($returnUrl); 
    $redirectUrls->setCancelUrl($cancelUrl); 

    $payment = new Payment(); 
    $payment->setRedirectUrls($redirectUrls); 
    $payment->setIntent("buy"); 
    $payment->setPayer($payer); 
    $payment->setTransactions(array($transaction)); 

    //print_r($payment);exit; 
    $payment->create($apiContext); 

    // return $payment; 
} 

Wszystko działa dobrze, dopóki ja nazywam $payment->create($apiContext);

Wtedy to pokazuje ten błąd:

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

+0

Mam ten sam problem, czy ktoś to wymyślił? –

Odpowiedz

10

Myślę, że powodem, dla którego 400 jest to, że suma cząstkowa + podatek + wysyłka nie sumuje się do całości. Powinieneś być w stanie sprawdzić przyczynę w otrzymanej odpowiedzi, powinna ona zawierać szereg błędów.

SUBTOTAL podatek + wysyłka = całkowita

57,41 + 0,06 + 0,06! = 5,47

2

miał ten sam problem. Problemem był space, który był w parametrach, które przeszły w returnurl.

Make sure your $returnUrl and $cancelUrl are urlencoded if you are passing any special characters.

14

Jeśli zawinąć rozmowy w bloku try/catch i złapać PPConnectionException można przeanalizować dane, aby zobaczyć dokładnie to, co jest błąd:

// ... 
try { 
    $response = $pp_payment->create(); 
} catch (PayPal\Exception\PPConnectionException $pce) { 
    // Don't spit out errors or use "exit" like this in production code 
    echo '<pre>';print_r(json_decode($pce->getData()));exit; 
} 
+6

Pomogło to, mimo że przestrzeń nazw wyjątków była: 'PayPal \ Exception \ PayPalConnectionException' – Iwazaru

+0

Zarówno odpowiedź, jak i komentarz @ Iwazaru były bardzo pomocne. Przestrzeń nazw wyjątków dla wersji 1.6.2 pakietu SDK PayPal jest teraz 'PayPal \ Exception \ PayPalConnectionException' –

0

należy dokładnie sprawdzić, czy podsumy a suma jest poprawna. W moim przypadku korzystałem z piaskownicy i nie zwracałem uwagi na sumę i podsumy, które nie były poprawne. Niektóre centa robiły różnicę i generowały błąd, tylko naprawiły wartości i działały poprawnie.

Powiązane problemy