Created
September 20, 2017 01:54
-
-
Save raank/d86bce7da405203ff13803d665686929 to your computer and use it in GitHub Desktop.
Integração do Moip
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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