diff --git a/src/Pix.php b/src/Pix.php index d0f02a6..cc66bc5 100644 --- a/src/Pix.php +++ b/src/Pix.php @@ -79,4 +79,49 @@ class Pix extends Kore $payload ); } + + + public function pixCobrancaDinamicoImediatoSaqueSemValor($payload) + { + pixCobrancaImediataSaqueSemValorRules($payload); + $korePayload = [ + 'calendario' => [ + 'expiracao' => $payload['expiracao'] ?? 86400, + ], + 'valor' => [ + 'original' => 0, + 'retirada' => [ + 'saque' => [ + 'valor' => $payload['valor'] ?? 0, + 'modalidadeAlteracao' => 0, + 'prestadorDoServicoDeSaque' => $payload['ispb'], + 'modalidadeAgente' => $payload['modalidadeAgente'] + ] + ] + ], + 'chave' => $payload['chave'], + 'txid' => $payload['txid'], + 'solicitacaoPagador' => $payload['solicitacaoPagador'] ?? null + ]; + + if (isset($payload['devedor'])){ + if (strlen($payload['devedor']['documento']) > 11){ + $korePayload['devedor']['cnpj'] = $payload['devedor']['documento']; + }else{ + $korePayload['devedor']['cpf'] = $payload['devedor']['documento']; + } + $korePayload['devedor']['nome'] = $payload['devedor']; + } + + return curlRequest( + 'https://httpbin.org/post', + 'POST', + [], + [ + 'x-kore-drone-uid: drone:' . $this->drone, + 'x-kore-drone-sign: ' . $this->signBody($korePayload) + ], + $payload + ); + } } diff --git a/src/rules.php b/src/rules.php index d54bfa2..20ec273 100644 --- a/src/rules.php +++ b/src/rules.php @@ -43,3 +43,27 @@ function pixCobrancaImediataSemValorRules(array $data) return true; } } + + +function pixCobrancaImediataSaqueSemValorRules(array $data) +{ + $rules = [ + 'expiracao' => 'integer', + 'devedor' => 'sometimes|array', + 'devedor.documento' => 'sometimes|string|min:11|max:18', + 'devedor.nome' => 'sometimes|required_with:devedor.documento|string|max:100', + 'valor' => 'sometimes|integer', + 'chave' => 'required|string', + 'txid' => 'required|string|max:100', + 'solicitacaoPagador' => 'string|max:140', + 'ispb' => 'required|string', + 'modalidadeAgente' => 'required|string|in:agtec,agtot,agpss' + ]; + + $validate = validate($data, $rules); + if (!$validate['valid']) { + throw new Exception(json_encode(array_slice($validate['errors'], 0, 1)), 500); + } else { + return true; + } +} diff --git a/src/validator.php b/src/validator.php index a3a1403..42033d8 100644 --- a/src/validator.php +++ b/src/validator.php @@ -80,6 +80,22 @@ function validate_array($field, $value, $param = null, $data = []) return true; } +function validate_in($field, $value, $param, $data = []) +{ + if ($param === null) { + return "The rule 'in' requires a list of accepted values."; + } + + $accepted = explode(',', $param); + + if (!in_array((string) $value, $accepted, true)) { + return "The field '$field' must be one of: " . implode(', ', $accepted) . "."; + } + + return true; +} + + function validate_integer($field, $value, $param = null, $data = []) { if (!is_int($value)) {