使用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++;
}
就像这样:
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'];
}
忘记顶部: $ payment =“PAYMENTREQUEST_”; $ lpayment =“L_PAYMENTREQUEST_”; – MeTaL 2015-02-05 22:32:47
这不会准确,因为我现在正在看它。您需要记住这里有两件独立的事情:您可以有多个付款,这是0来自像PAYMENTREQUEST_0_AMT这样的参数的地方。每笔付款都可以有多个项目,这就是为什么您有像L_PAYMENTREQUEST_0_AMT0这样的参数。您需要跟踪$ i与$ n分开,并使用一个用于付款,另一个用于物品。 – 2015-02-06 04:21:52
谢谢。循环它是有道理的。你有没有使用payum symfony框架 – Baig 2015-02-06 03:59:18
不,我实际上有我自己[PayPal的PHP类库](https://github.com/angelleye/paypal-php-library),我一直在维护多年。我在图书馆内处理订单项目和所有这些内容。它几乎每个API PayPal都可以提供,并且每个API都有一个功能样本和空模板。你所要做的就是用你自己的数据填写参数。我建议看看。我想你会喜欢它的。 – 2015-02-06 04:13:47
谢谢,我会看看,回来。在我上班的路上 – Baig 2015-02-06 04:15:23