使用symfony的

问题描述:

我与Symfony的Payum工作捆绑发送命令到PayPal,到目前为止,这是工作的罚款单品使用symfony的

假设我的单品数组类似

$orderDetails = array(
     'productID' => '10', 
     'fname' => 'First Name', 
     'lname' => 'Last Name', 
     'phone' => '111', 
     'clientemail' => '[email protected]', 
     'name' => 'Product Name', 
     'description' => 'The Product description.', 
     'price' => 8.64, 
     'currency_symbol' => '$', 
     'currency' => 'USD', 
     'clientId' => '222', 
     'payment_option' => $paymentName 


); 
发送多个产品,以贝宝

然后将下面的代码工作完全正常

$storage = $this->get('payum')->getStorage('ClickTeck\featuresBundle\Entity\Orders'); 
/** @var $paymentDetails Orders */ 
$paymentDetails = $storage->create(); 


$paymentDetails->setClientFname($orderDetails['fname']); 
$paymentDetails->setClientLname($orderDetails['lname']); 
$paymentDetails->setClientPhone($orderDetails['phone']); 
$paymentDetails->setClientEmail($orderDetails['clientemail']); 
$paymentDetails->setNumber($orderDetails['productID']); 
$paymentDetails->setDescription($orderDetails['description']); 
$paymentDetails->setCurrencyCode($orderDetails['currency']); 
$paymentDetails->setTotalAmount($orderDetails['price']); 
$paymentDetails->setClientId($orderDetails['clientId']); 
$paymentDetails->setPaymentOption($orderDetails['payment_option']); 



$paymentDetails['PAYMENTREQUEST_0_CURRENCYCODE'] = $orderDetails['currency']; 
$paymentDetails['PAYMENTREQUEST_0_AMT'] = $orderDetails['price']; 
$paymentDetails['NOSHIPPING'] = Api::NOSHIPPING_NOT_DISPLAY_ADDRESS; 
$paymentDetails['REQCONFIRMSHIPPING'] = Api::REQCONFIRMSHIPPING_NOT_REQUIRED; 
$paymentDetails['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = Api::PAYMENTREQUEST_ITERMCATEGORY_DIGITAL; 
$paymentDetails['L_PAYMENTREQUEST_0_AMT0'] = $orderDetails['price']; 
$paymentDetails['L_PAYMENTREQUEST_0_NAME0'] = $orderDetails['name']; 
$paymentDetails['L_PAYMENTREQUEST_0_DESC0'] = $orderDetails['description']; 
$storage->update($paymentDetails); 
$captureToken = $this->getTokenFactory()->createCaptureToken(
    $paymentName, 
    $paymentDetails, 
    'payment_done' 
); 
$paymentDetails['INVNUM'] = $paymentDetails->getId(); 
$storage->update($paymentDetails); 
return $this->redirect($captureToken->getTargetUrl()); 

但是,如果我有多个产品,如阵列下方,那么该如何处理呢?

$paymentName = 'paypal'; 

$orderDetails = array(
    array(
     'productID' => '10', 
     'fname' => 'First Name', 
     'lname' => 'Last Name', 
     'phone' => '111', 
     'clientemail' => '[email protected]', 
     'name' => 'Product Name', 
     'description' => 'The Product description.', 
     'price' => 8.64, 
     'currency_symbol' => '$', 
     'currency' => 'USD', 
     'clientId' => '222', 
     'payment_option' => $paymentName 
    ), 
    array(
     'productID' => '10', 
     'fname' => 'First Name', 
     'lname' => 'Last Name', 
     'phone' => '111', 
     'clientemail' => '[email protected]', 
     'name' => 'Product Name', 
     'description' => 'The Product description.', 
     'price' => 8.64, 
     'currency_symbol' => '$', 
     'currency' => 'USD', 
     'clientId' => '222', 
     'payment_option' => $paymentName 
    ), 
); 

您只需循环浏览项目以动态生成API请求的那部分。所以它会是这样的。

$i = 0; 
foreach($orderDetails as $orderItem) 
{ 
    $paymentDetails['L_PAYMENTREQUEST_0_ITEMCATEGORY' . $i] = Api::PAYMENTREQUEST_ITERMCATEGORY_DIGITAL; 
    $paymentDetails['L_PAYMENTREQUEST_0_AMT' . $i] = $orderItem['price']; 
    $paymentDetails['L_PAYMENTREQUEST_0_NAME' . $i] = $orderItem['name']; 
    $paymentDetails['L_PAYMENTREQUEST_0_DESC' . $i] = $orderItem['description']; 
    $i++; 
} 
+0

谢谢。循环它是有道理的。你有没有使用payum symfony框架 – Baig 2015-02-06 03:59:18

+0

不,我实际上有我自己[PayPal的PHP类库](https://github.com/angelleye/paypal-php-library),我一直在维护多年。我在图书馆内处理订单项目和所有这些内容。它几乎每个API PayPal都可以提供,并且每个API都有一个功能样本和空模板。你所要做的就是用你自己的数据填写参数。我建议看看。我想你会喜欢它的。 – 2015-02-06 04:13:47

+0

谢谢,我会看看,回来。在我上班的路上 – Baig 2015-02-06 04:15:23

就像这样:

for ($i = 0; $i < count($orderDetails); $i++) { 
    $paymentDetails->setClientEmail($orderDetails[$i]['clientemail']); 
    $paymentDetails->setDescription($orderDetails[$i]['description']); 
    $paymentDetails->setCurrencyCode($orderDetails[$i]['currency']); 
    $paymentDetails->setTotalAmount($orderDetails[$i]['price']); 
    $paymentDetails[$payment.$i.'_CURRENCYCODE'] = $orderDetails[$i]['currency']; 
    $paymentDetails[$payment.$i.'_AMT'] = $orderDetails[$i]['price']; 
    $paymentDetails['NOSHIPPING'] = Api::NOSHIPPING_NOT_DISPLAY_ADDRESS; 
    $paymentDetails['REQCONFIRMSHIPPING'] = Api::REQCONFIRMSHIPPING_NOT_REQUIRED; 
    $paymentDetails[$lpayment.$i.'_ITEMCATEGORY0'] = Api::PAYMENTREQUEST_ITERMCATEGORY_DIGITAL; 
    $paymentDetails[$payment . $i . '_PAYMENTREQUESTID'] = "CART26488-PAYMENT".$i; 
    $paymentDetails[$payment . $i . '_SELLERPAYPALACCOUNTID'] = "[email protected]"; 
    $paymentDetails[$lpayment.$i.'_AMT0'] = $orderDetails[$i]['price']; 
    $paymentDetails[$lpayment.$i.'_NAME0'] = $orderDetails[$i]['name']; 
    $paymentDetails[$lpayment.$i.'_DESC0'] = $orderDetails[$i]['description']; 
} 
+0

忘记顶部: $ payment =“PAYMENTREQUEST_”; $ lpayment =“L_PAYMENTREQUEST_”; – MeTaL 2015-02-05 22:32:47

+0

这不会准确,因为我现在正在看它。您需要记住这里有两件独立的事情:您可以有多个付款,这是0来自像PAYMENTREQUEST_0_AMT这样的参数的地方。每笔付款都可以有多个项目,这就是为什么您有像L_PAYMENTREQUEST_0_AMT0这样的参数。您需要跟踪$ i与$ n分开,并使用一个用于付款,另一个用于物品。 – 2015-02-06 04:21:52