2014-09-20 65 views
7

我使用https://github.com/paypal/rest-api-sdk-php與REST API SDK寶物品描述

,我想有一個項目說明審查顯示,這裏是代碼:

$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); 

所有我能看到的是描述,但我想看到項目號和小計,我錯過了什麼?

更新: 所以我讀,我需要添加幾件事情:讓我做了這樣的事情:

$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); 

現在上面的代碼給了我400錯誤...因爲添加的項目的東西,任何線索?

回答

0

添加此 ...

$transaction->setDescription("Payment description") 

...

+0

他已經有這個權利之後'setAmount()' – fejese 2015-01-06 10:00:10

+0

此用戶有錯誤400,因爲在ItemList中缺少狀態郵編 - 我沒有在此處看到任何買方信息,所以它可能不適用,但可能如果這應該在那裏,但缺少http://stackoverflow.com/questions/30273370/paypal-error-400-for-us-and-canada-addresses – Steve 2016-01-15 23:35:03

+0

錯誤400中還有什麼 - 可以方便地知道它沒有得到什麼。 – Steve 2016-01-15 23:44:09

2

它會顯示你從你得到了更新正軌。但是,這也似乎你有幾個問題還,那麼就了上述問題,

嘗試加入你的代碼進入捕集和貝寶

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

我的猜測原因回聲出消息,我得到了類似的錯誤就是你沒有正確添加你的物品(稅,運費,小計等)等等。試試這個樣本@https://github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/ExecutePayment.php並讓它首先工作,然後修改示例中的代碼,對您的需求進行排序。

下面是我修改的一些代碼,它適用於我。

注意你有一個項目的描述和交易描述

//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

我找到了答案,我們需要建立一個交易更多的細節,你必須正確的號碼設置爲小計(),總()等等......

Each price item * Quantity = Subtotal 

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

這是我有:

 $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);