Closed raank closed 7 years ago
Será que isso não resolve?
Meu código:
foreach($business['items'] as $product) {
$products[] = [
'product' => $product['title'],
'quantity' => $product['qnt'],
'detail' => $product['sku'],
'price' => Helpers::format($product['total'])
];
}
if(isset($products)) {
$this->moip->orders()->setOwnId(uniqid())
->addItems($products)
->setShippingAmount($business['total'])
->setAddition($business['adition'])
->setDiscount($business['discount'])
->setCustomer($this->customer)
->addReceiver($business['id'], 'PRIMARY', NULL);
}
No arquivo: vendor/moip/moip-sdk-php/src/Resource/Orders.php
/**
* Adds a new item to order.
*
* @param array $items Array with Products
*
* @return $this
*/
public function addItems(array $items)
{
foreach($items as $item) {
if (!is_int($item['price'])) {
throw new \UnexpectedValueException('Informe o valor do item como inteiro');
}
if (!is_int($item['quantity']) || $item['quantity'] < 1) {
throw new \UnexpectedValueException('A quantidade do item deve ser um valor inteiro maior que 0');
}
$item = new stdClass();
$item->product = $item['product'];
$item->quantity = $item['quantity'];
$item->detail = $item['detail'];
$item->price = $item['price'];
$this->data->items[] = $item;
}
return $this;
}
Olá @raank, tudo bem?
Esse método addItems
funcionaria, porém não existe na versão atual da nossa SDK. Se você quiser enviar um PR com ele, será muito bem-vindo :)
Existe uma outra forma de enviar vários itens ao pedido, veja abaixo:
$order = $this->moip->orders()->setOwnId(uniqid())
->setShippingAmount($business['total'])
->setAddition($business['adition'])
->setDiscount($business['discount'])
->setCustomer($this->customer)
->addReceiver($business['id'], 'PRIMARY', NULL);
foreach($business['items'] as $product) {
$order->addItem($product['title'], $product['qnt'], $product['sku'], Helpers::format($product['total']));
}
$order->create();
Dessa forma você enviaria os itens dinamicamente, conforme o seu array de itens.
Abs, Caio Gaspar
@caiogaspar e como faço com multiorders?
@caiogaspar segue meu código. Lembrando que TODOS os dados estão tratados de maneira correta, como manda a Documentação.
static public function setOrder($customer, $address, $card, $installments = 1)
{
try {
$moip = \Moip::start();
$birthDate = Carbon::parse(str_replace('/', '-', $customer['birth']));
$phone = Helpers::phone($customer['phone']);
$customer = $moip->customers()->setOwnId(uniqid())
->setFullname($customer['name'])
->setEmail($customer['email'])
->setBirthDate($birthDate->format('Y-m-d'))
->setTaxDocument(Helpers::format($customer['document_cpf']))
->setPhone($phone['area'], $phone['number'])
->addAddress('SHIPPING',
$address['street'], $address['number'],
$address['district'], $address['city'], $address['state'],
Helpers::format($address['postalCode']), $address['complement'])
->create();
foreach(Cart::business()->all() as $b) {
$ordersItem = $moip->orders()->setOwnId(uniqid())
->setShippingAmount($b['total'])
->setAddition(0)
->setDiscount(0)
->setCustomer($customer)
->addReceiver($b['moip_id'], 'PRIMARY', NULL);
foreach ($b['items'] as $item) {
$value = number_format($item['total'], 2, '.', '');
$ordersItem->addItem($item['title'], (int) $item['qnt'], $item['sku'], (int) Helpers::format($value));
}
$orders[] = $ordersItem;
}
if (isset($orders)) {
$multiorder = $moip
->multiorders()
->setOwnId(uniqid());
foreach($orders as $o) {
$multiorder->addOrder($o);
}
$multiorder->create();
// $payment = $multiorder->multipayments()
// ->setCreditCardHash($card['hash'], $customer)
// ->setInstallmentCount($installments)
// ->setStatementDescriptor('teste de pag')
// ->setDelayCapture(false)
// ->execute();
return $multiorder;
} else {
return null;
}
} catch (\Exception $exception) {
return $exception->__toString();
}
}
Olá @raank, você apenas precisaria dividir os itens entre os orders e adicionar esses mesmos orders ao multiorder. Aqui está um exemplo: https://github.com/moip/moip-sdk-php#criando-um-multipedido. Abs, Caio Gaspar
Como adicionar vários produtos no multipedido dinamicamente?
Algo do tipo: