2014-09-20 10 views
7

Używam https://github.com/paypal/rest-api-sdk-phpPaypal Opis przedmiotu z SDK API REST

i chcę mieć opinię Opis produktu mają być wyświetlane, oto kod:

$amountDetails = new Details(); 
    $amountDetails->setSubtotal('7.41'); 
    $amountDetails->setTax('0.03'); 
    $amountDetails->setShipping('0.03'); 

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

    $transaction = new Transaction(); 
    $transaction->setAmount($amount); 
    $transaction->setDescription('This is the payment transaction description.'); 




    $RedirectUrls = new RedirectUrls(); 
    $RedirectUrls ->setReturnUrl('http://localhost/mrSurvey/public/#/pricing'); 
    $RedirectUrls ->setCancelUrl('http://localhost/mrSurvey/public/#/pricing'); 

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

Wszystko, co mogę zobaczyć, to opis, ale chcę zobaczyć numer pozycji i sumę częściową, czego mi brakuje?

Aktualizacja: Więc czytam, że muszę dodać kilka rzeczy: tak zrobiłem coś takiego:

$item = new Item(); 
$item->setQuantity('1'); 
$item->setName('benny'); 
$item->setPrice('7.41'); 
$item->setCurrency('USD'); 
$item->setSku('blah'); 


$items = new ItemList(); 
$items->addItem(array($item)); 

...

$transaction->setItemList($items); 

...

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

$response = $payment->create($apiContext)->toarray(); 

return Response::json($response); 

Teraz powyższy kod daje mi 400 błędów ... z powodu dodanych przedmiotów, jakichkolwiek wskazówek?

Odpowiedz

0

Dodaj ten ...

$transaction->setDescription("Payment description") 

...

+0

ma już, że zaraz po 'setAmount()' – fejese

+0

Ten użytkownik miał błąd 400, ponieważ w ItemList brakuje stanu kodu pocztowego - nie widzę tutaj żadnych informacji o kupującym, więc może nie mieć zastosowania, ale może być, jeśli ma się tam pojawić, ale brakuje http://stackoverflow.com/questions/30273370/paypal-error-400-for-us-and-canada-addresses – Steve

+0

Co jeszcze jest w błędzie 400 - byłoby przydatne wiedzieć, czego nie dostanie. – Steve

2

byłoby wydawać, że jesteś na dobrej drodze z aktualizacji masz. Ale wydaje się również masz kilka problemów również, potem po prostu postawiony problem

spróbuj dodać swój kod do połowu i echo się komunikat z paypal

try{ 
    //your code here 
} 
catch(PayPal\Exception\PayPalConnectionException $e) { 
    //This will show error from paypal 
    $e->getData() 
} 

Domyślam bo mam podobny błąd jest Twoja nie robimy poprawnego dodawania twoich przedmiotów (podatków, wysyłek, sum pośrednich, etc ...) i tak dalej. Wypróbuj tę próbkę @https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/ExecutePayment.php i uruchom ją najpierw, a następnie zmodyfikuj kod z próbki, aby posortować swoje potrzeby.

Poniżej znajduje się część mojego zmodyfikowanego kodu i działa on dla mnie.

Uwaga masz opis przedmiotu oraz opis transakcji

//run x through loop with ++ 
$x = 0; 

//for item 
$items[$x] = new Item(); 
$items->setName($item_name) 
->setDescription($item_description) 
->setCurrency($currency) 
->setQuantity($item_quantity) 
->setTax($item_tax) 
->setPrice($item_price) 
->setSku($item_sku); 

    $itemList = new ItemList(); 
    $itemList->setItems($items); 

    //for transaction 
    $transaction = new Transaction(); 
    $transaction 
    ->setAmount($amount) 
    ->setItemList($itemList) 
    ->setDescription($payment_description) 
    ->setInvoiceNumber($invoice_number); 

function getTotals($quantity, $tax, $price){ 
    $tax = $tax * $quantity; 
    $subtotal = $price * $quantity; 
    $total = $tax + $subtotal; 
} 
total = getTotal($item_quantity, $item_tax, $item_price); 
1

Znalazłem odpowiedź, musimy więcej szczegółów do tworzenia transakcji, i trzeba ustawić poprawny numer do SUBTOTAL(), całkowita() etc ...

Each price item * Quantity = Subtotal 

Subtotal +- Tax, Shipping etc... = total 

to jest to, co mam:

 $sdkConfig = array(
      "mode" => "sandbox" 
     ); 

     $cred = new OAuthTokenCredential($client_id, $secret, $sdkConfig); 
     $apiContext = new ApiContext($cred, 'Request' . time()); 
     $apiContext->setConfig($sdkConfig); 

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

     foreach ($cartHasItems as $key => $order) { 
      $item[$key] = new PayPalItem(); 
      $item[$key]->setName($order->getItem()->getName()) 
       ->setCurrency('EUR') 
       ->setQuantity($order->getQuantity()) 
       ->setPrice($order->getItem()->getPrice()); 
     } 

     if($cart->getPromoCode()){ 
      $item[1] = new PayPalItem(); 
      $item[1]->setName('Promo code '.$cart->getPromoCode()->getCode()) 
       ->setCurrency('EUR') 
       ->setQuantity(1) 
       ->setPrice(-$this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'Promo')); 
     } 

     $itemList = new ItemList(); 
     $itemList->setItems($item); 

     $details = new Details(); 
     $details->setTax($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'HT')*20/100) 
       ->setSubtotal($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'HT')); 

     $amount = new Amount(); 
     $amount->setCurrency("EUR") 
      ->setTotal($this->getDoctrine()->getRepository('AppBundle:CartHasItems')->countTotalForCart($cart, 'All')) 
      ->setDetails($details); 

     $transaction = new Transaction(); 
     $transaction->setAmount($amount) 
      ->setItemList($itemList) 
      ->setDescription("Payment description") 
      ->setInvoiceNumber(uniqid()); 

     $redirectUrls = new RedirectUrls(); 
     $redirectUrls->setReturnUrl($this->generateUrl('paypal_success', array(), UrlGeneratorInterface::ABSOLUTE_URL)); 
     $redirectUrls->setCancelUrl($this->generateUrl('order_validation', array('type' => 'paypal'), UrlGeneratorInterface::ABSOLUTE_URL)); 

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

     $payment->create($apiContext);