wirecardBrasil / moip-sdk-php

Cliente em PHP para integração server-side com APIs Moip v2
MIT License
124 stars 90 forks source link

Criar Pedido retornando exception de undefined property com o exemplo da api #198

Closed latreta closed 7 years ago

latreta commented 7 years ago

Tento criar um cliente e um pedido para depois realizar o pagamento segundo a wiki, mas continuo recebendo os seguintes erros Estou rodando no Xampp, windows usando a versão deste repositório juntamente com o Laravel 5.5

ErrorException thrown with message "Undefined property: stdClass::$taxDocument"

Stacktrace:

44 ErrorException in C:\xampp\htdocs\cres_pass\system\vendor\moip\moip-sdk-php\src\Resource\Customer.php:261

E caso eu tente editar o Customer.php no pacote, e coloque

$customer->data->taxDocument = new stdClass();
$customer->data->taxDocument->type = $this->getIfSet('type', $response->taxDocument);
$customer->data->taxDocument->number = $this->getIfSet('number', $response->taxDocument);

Para:

$customer->data->taxDocument = new stdClass();
$customer->data->taxDocument = $this->getIfSet('taxDocument', $response);

eu termino recebendo

ErrorException thrown with message "Undefined property: stdClass::$receivers"

Stacktrace:

43 ErrorException in C:\xampp\htdocs\cres_pass\system\vendor\moip\moip-sdk-php\src\Resource\Orders.php:164

public function test(){
try {
$customer = $this->moip->customers()->setOwnId(uniqid())
->setFullname('Fulano de Tal')
->setEmail('fulano@email.com')
->setBirthDate('1988-12-30')
->setTaxDocument('22222222222', 'CPF')
->setPhone(11, 66778899)
->addAddress('BILLING',
'Rua de teste', 123,
'Bairro', 'Sao Paulo', 'SP',
'01234567', 8)
->addAddress('SHIPPING',
'Rua de teste do SHIPPING', 123,
'Bairro do SHIPPING', 'Sao Paulo', 'SP',
'01234567', 8)
->create();
print_r($customer);
} catch (Exception $e) {
printf($e->__toString());
}
try {
$order = $this->moip->orders()->setOwnId(uniqid())
->addItem("bicicleta 1",1, "sku1", 10000)
->addItem("bicicleta 2",1, "sku2", 11000)
->addItem("bicicleta 3",1, "sku3", 12000)
->setShippingAmount(3000)
->setAddition(1000)
->setDiscount(5000)
->setCustomer($customer)
->addInstallmentCheckoutPreferences([1, 6], 0, 100)
->addReceiver('MPA-VB5OGTVPCI52', 'PRIMARY', 30000, NULL, false)
->addReceiver('MPA-IFYRB1HBL73Z', 'SECONDARY', 2000, NULL, true)
->create();
print_r($order);
} catch (Exception $e) {
printf($e->__toString());
}
}
latreta commented 7 years ago

Se eu comentar os AddReceiver ele imprime o pedido sem problemas.

latreta commented 7 years ago

@caiogaspar se puder me dizer onde está o erro, atualmente esta api é a única coisa travando o progresso do meu projeto.

caiogaspar commented 7 years ago

E aí @latreta, beleza? É provável que isso esteja ocorrendo porque algum dos ID's de conta Moip que você está passando não existe. Pra você testar e verificar se é isso mesmo, crie por ex. 2 contas Moip novas e passe os ID's delas no método addReceiver.

Uma outra dica: pra visualizar melhor os erros retornados pela API seria legal seguir nosso tópico de tratamento de exceções, assim fica muito mais fácil de encontrar possíveis problemas de validação, entre outros 😄 Abs!

latreta commented 7 years ago

@caiogaspar uma dúvida, ao criar um cliente novo eu recebo um objeto e neles está presente uma [hostedAccount] com uma conta referente ao cliente que eu acabei de criar, existe alguma forma de obter este ID para não ter que criar outra conta moip, ou se faz necessário criar uma conta moip a parte e linkar ao usuário em questão?

[_links] => stdClass Object ( [self] => stdClass Object ( [href] => https://sandbox.moip.com.br/v2/customers/CUS-JSUDVVYUBAP5 ) [hostedAccount] => stdClass Object ( [redirectHref] => https://hostedaccount-sandbox.moip.com.br?token=4203872a-ca9e-490b-8b0d-2a639213dd85&id=CUS-JSUDVVYUBAP5&mpa=MPA-B4ABF9C3ED72 ) ) ) )

latreta commented 7 years ago

existe alguma forma de obter este ID para não ter que criar outra conta moip, ou se faz necessário criar uma conta moip a parte e linkar ao usuário em questão?

Tira só mais essa dúvida para mim que acho que o resto já tá funcionando, usei o ->getLinks()

caiogaspar commented 7 years ago

@latreta O ID de conta Moip retornado no hostedAccount não é de uma nova conta criada junto com o customer, e sim da conta Moip que criou o customer. O fluxo ideal é que você verifique se o usuário já possui uma conta Moip e caso não tenha, crie uma conta Moip.

Estou fechando essa issue, mas se você tiver mais dúvidas pode mandar pra integracao@moip.com.br.

Abs!