Skip to content

Instantly share code, notes, and snippets.

@raank
Created September 20, 2017 01:54
Show Gist options
  • Save raank/d86bce7da405203ff13803d665686929 to your computer and use it in GitHub Desktop.
Save raank/d86bce7da405203ff13803d665686929 to your computer and use it in GitHub Desktop.
Integração do Moip
<?php
namespace LaraShop\Moip\Facades;
use LaraShop\Factories\Facades\Factory;
use LaraShop\User;
use Artesaos\Moip\Facades\Moip as Facade;
use Moip\Auth\BasicAuth;
use Moip\Auth\Connect;
class Moip
{
/**
* @param $url
* @param array|null $params
* @return string
*/
static public function url($url, array $params = null)
{
return config('moip.api.url') . $url . (isset($params) ? '?' . http_build_query($params) : '');
}
/**
* Pega variavel de configuração do moip
* @param null $key
* @return mixed
*/
static public function get($key = null)
{
return isset($key) ? config('moip.data.' . $key) : config('moip.data');
}
/**
* @return string
*/
static public function token_base64()
{
$token = config('moip.credentials.token');
$key = config('moip.credentials.key');
return base64_encode("{$token}:{$key}");
}
/**
* Pega os token
* @return mixed
*/
static public function getToken()
{
return \Curl::to(config('moip.api.url') . 'channels')
->withData([
'name' => config('app.name'),
'description' => config('app.description'),
'site' => config('app.url'),
'redirectUri' => url(config('config.app.redirect', '/'))
])
->withHeader('Content-Type: application/json')
->withHeader('Authorization: Basic ' . self::token_base64())
->asJson(true)
->post();
}
/**
* Gera o token para o Moip
* @return mixed
*/
static public function auth()
{
$token = config('moip.credentials.token');
$key = config('moip.credentials.key');
$getToken = self::getToken();
$redirect_uri = url(config('config.app.redirect', '/'));
$client_id = $getToken['id'];
$scope = true;
$connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
$connect->setScope(Connect::RECEIVE_FUNDS)
->setScope(Connect::REFUND)
->setScope(Connect::MANAGE_ACCOUNT_INFO)
->setScope(Connect::RETRIEVE_FINANCIAL_INFO);
return $connect->getAuthUrl();
}
/**
* Formata valores como cpf, rg, telefone
* @param $value
* @return string|int
*/
static public function format($value)
{
return str_replace(['.', ',', '(', ')', ' ', '-', '/'], '', $value);
}
/**
* Envia os dados para o Moip
* @param $moip
* @param $user
* @param $business
* @param $address
* @return null|string|array
*/
static public function setUser($moip, $user, $business, $address)
{
try {
$phoneUser = explode(' ', $user->phone);
$phoneUserArea = str_replace(['(', ')'], '', $phoneUser[0]);
$phoneUserNumber = str_replace('-', '', $phoneUser[1]);
$phoneBusiness = explode(' ', $business->phone);
$phoneBusinessArea = str_replace(['(', ')'], '', $phoneBusiness[0]);
$phoneBusinessNumber = str_replace('-', '', $phoneBusiness[1]);
$account = \Curl::to(config('moip.api.url') . 'accounts')
->withData([
'transparentAccount' => true,
'type' => 'MERCHANT',
'email' => [
'address' => $user->email
],
'person' => [
'name' => $user->first_name,
'lastName' => $user->last_name,
'taxDocument' => [
'type' => 'CPF',
'number' => self::format($user->document_cpf)
],
'identityDocument' => [
'type' => 'RG',
'number' => self::format($user->document_rg),
'issuer' => $user->document_rg_issuer,
'issueDate' => $user->document_rg_issueDate,
],
'birthDate' => $user->birth,
'phone' => [
'number' => self::format($phoneUserNumber),
'areaCode' => self::format($phoneUserArea),
'countryCode' => '55'
],
'address' => [
'street' => $address->street,
'streetNumber' => $address->number,
'district' => $address->district,
'zipCode' => self::format($address->postalCode),
'city' => $address->city,
'state' => $address->state,
'country' => $address->country,
'complement' => isset($address->complement) ? $address->complement : null
]
],
'company' => [
'name' => $business->name,
'businessName' => isset($business->description) ? $business->description : 'LTDA',
'taxDocument' => [
'type' => 'CNPJ',
'number' => self::format($business->document)
],
'mainActivity' => [
'cnae' => '82.91-1/00',
'description' => 'Atividades de cobranças e informações cadastrais'
],
'openingDate' => $business->opening_date,
'phone' => [
'number' => self::format($phoneBusinessNumber),
'areaCode' => self::format($phoneBusinessArea),
'countryCode' => '55'
],
'address' => [
'street' => $address->street,
'streetNumber' => $address->number,
'district' => $address->district,
'zipCode' => self::format($address->postalCode),
'city' => $address->city,
'state' => $address->state,
'country' => $address->country,
'complement' => isset($address->complement) ? $address->complement : null
],
'businessSegment' => [
'id' => 2
]
]
])
->withHeader('authorization: OAuth ' . config('moip.data.token'))
->withContentType('application/json')
->asJson( true )
->post();
return $account;
} catch(\Exception $exception) {
return $exception->__toString();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment