-
Notifications
You must be signed in to change notification settings - Fork 17
/
Document.php
125 lines (107 loc) · 2.92 KB
/
Document.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
namespace ValdeirPsr\PagSeguro\Domains;
use DOMDocument;
use ValdeirPsr\PagSeguro\Interfaces\Serializer\Xml;
use ValdeirPsr\PagSeguro\Interfaces\Serializer\IArray;
use ValdeirPsr\PagSeguro\Parser\Xml as XmlParser;
use \ValdeirPsr\PagSeguro\Validation\Validator as v;
class Document implements Xml, IArray
{
private $type;
private $value;
/**
* @param string $type CPF ou CNPJ
* @param string $value Número do documento
*/
private function __construct(string $type, string $value)
{
$this->type = $type;
$this->value = $value;
}
/**
* Instancia a classe com o tipo CPF
*
* @param string $value
*
* @throws \InvalidArgumentException Quando o CPF for inválido
*
* @return self
*/
public static function cpf(string $value): self
{
if (!v::cpf()->validate($value)) {
throw new \InvalidArgumentException('CPF "' . $value . '" is invalid.', 2010);
}
$instance = new self('cpf', preg_replace('/\D/', '', $value));
return $instance;
}
/**
* Instancia a classe com o tipo CNPJ
*
* @param string $value
*
* @throws \InvalidArgumentException Quando o CNPJ for inválido
*
* @return self
*/
public static function cnpj(string $value): self
{
if (!v::cnpj()->validate($value)) {
throw new \InvalidArgumentException('CNPJ "' . $value . '" is invalid.', 2011);
}
$instance = new self('cnpj', preg_replace('/\D/', '', $value));
return $instance;
}
/**
* @return string Retorna o tipo de documento (CPF/CNPJ)
*/
public function getType(): string
{
return $this->type;
}
/**
* @return string Retorna o valor do documento
*/
public function getValue(): string
{
return $this->value;
}
/**
* {@inheritDoc}
*/
public static function fromXml(string $value)
{
$dom = new DOMDocument();
$dom->loadXml($value);
$type = $dom->getElementsByTagName('type');
$value = $dom->getElementsByTagName('value');
if ($type->count() > 0) {
$type = strtolower(trim($type->item(0)->textContent));
$value = preg_replace('/\D/', '', (trim($value->item(0)->textContent)));
if ($type === 'cpf') {
return new self('cpf', $value);
} elseif ($type === 'cnpj') {
return new self('cnpj', $value);
}
}
return null;
}
/**
* {@inheritDoc}
*/
public function toXml(): string
{
$parser = new XmlParser();
$result = $parser->parser([
"document" => get_object_vars($this)
]);
return $result->saveXml();
}
/**
* {@inheritDoc}
*/
public function toArray(): array
{
return array_filter(get_object_vars($this));
}
}