2015-08-23 47 views
1

我想测试Paypals批量支付:宝PHP SDK批量支付

我的代码:

// ... 

public function sendBatchPayment(array $payoutItems, $senderBatchId, $type= 'Email', $currency = 'CAD', $note = '') { 

     $payouts = new \PayPal\Api\Payout(); 

     $senderBatchHeader = new \PayPal\Api\PayoutSenderBatchHeader(); 

     $senderBatchHeader->setSenderBatchId($senderBatchId) 
          ->setEmailSubject("You have a Payout!"); 



     foreach ($payoutItems as $payoutItem) { 

      $emailExists = (isset($payoutItem['email']) && !empty($payoutItem['email'])); 

      $amountExists = (isset($payoutItem['amount']) && !empty($payoutItem['amount'])); 

      $senderItemIdExists = (isset($payoutItem['sender_item_id']) && !empty($payoutItem['sender_item_id'])); 

      if(!$emailExists || !$amountExists || !$senderItemIdExists) continue; 

      $receiver = $payoutItem['email']; 

      $item_id = $payoutItem['sender_item_id']; 

      $value = (float) $payoutItem['amount']; 

      $senderItem = new \PayPal\Api\PayoutItem(); 

      $senderItem->setRecipientType('Email') 
         ->setNote('Your Payment') 
         ->setReceiver($receiver) 
         ->setSenderItemId($item_id) 
         ->setAmount(new \PayPal\Api\Currency('{ 
              "value":$value, 
              "currency":"CAD" 
             }')); 


      $payouts->setSenderBatchHeader($senderBatchHeader) 
         ->addItem($senderItem); 


     } // EO foreach 

     $request = clone $payouts; 

     try { 

      $output = $payouts->create(null, $this->apiContext); 

     } catch (Exception $e) { 

      return $e->getMessage; 
     } 

     return $output; 


    } 

但我不断收到一个400

我怀疑它是由于这是内部循环:

$payouts->setSenderBatchHeader($senderBatchHeader) 
         ->addItem($senderItem); 

时Paypals实例是这样的:

$payouts->setSenderBatchHeader($senderBatchHeader) 
         ->addItem($senderItem1) 
         ->addItem($senderItem2); 

; 

如何在循环内添加项目?

编辑: 错误:

PayPalConnectionException in PayPalHttpConnection.php line 180: 
Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payouts?. 

三江源。

+0

这将有助于获得有关该错误的更多详细信息。 https://github.com/paypal/PayPal-PHP-SDK/wiki/exception-%27PayPal%5CException%5CPayPalConnectionException%27-with-message-%27Got-Http-response-code-400-when-accessing。 –

+0

此外,还有一个示例可帮助您确保正确设置:http://paypal.github.io/PayPal-PHP-SDK/sample/doc/payouts/CreateBatchPayout.html –

回答

1

我设法由$ senderBatchId值更改为只是为了解决这个问题:代替

uniqid() 

uniqid() . microtime(true) 

宝REST API不喜欢它由于某种原因,这种方式。如果比我更好的程序员可以解释这一点,我会标记他/她的答案是正确的。