Skip to content

Commit

Permalink
Pagamentos MbWay
Browse files Browse the repository at this point in the history
  • Loading branch information
vladyslavkotyk committed Apr 27, 2021
1 parent 2babbb5 commit 3edf34a
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 6 deletions.
22 changes: 20 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Pagamentos Ifthenpay
*Alternativa de PHP puro para o sistema de pagamentos MBWAY e Ref Multibanco [https://ifthenpay.com/](https://ifthenpay.com/).
Se houver necessidade escrevo uma versão do código em package composer*
Alternativa de PHP puro para o sistema de pagamentos MBWAY e Ref Multibanco [https://ifthenpay.com/](https://ifthenpay.com/).

Se houver necessidade escrevo uma versão do código em package composer
Qualquer dúvida é so criar um ticket, poderei também escrever o código em node.js ou python num breve futuro.

[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/Y8Y14FZMA)

Expand Down Expand Up @@ -60,6 +62,22 @@ Se houver necessidade escrevo uma versão do código em package composer*
| 3 | Chave inválida.|
| 9 | Erro desconhecido.|

## Erros do status de pagamento MbWay

| Código | Descrição |
| --- | --- |
| 000 | Operação financeira concluída com sucesso |
| 020 | Operação financeira cancelada pelo utilizador |
| 023 | Operação financeira devolvida pelo Comerciante |
| 048 | Operação financeira anulada pelo Comerciante |
| 100 | Não foi possível concluir a Operação |
| 104 | Operação financeira não permitida |
| 111 | O formato do número de telemóvel não se encontrava no formato correto |
| 113 | O número de telemóvel usado como identificador não foi encontrado |
| 122 | Operação recusada ao utilizador |
| 123 | Operação financeira não encontrada |
| 125 | Operação recusada ao utilizador |

## Como funciona uma referência MB
A referência é composta sempre por 9 dígitos (em grupos de 3 facilita a visualização) e é composta do seguinte modo:

Expand Down
99 changes: 99 additions & 0 deletions class/mbway.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
<?php

/*
Pagamentos MbWay
Author: github.com/vladyslavkotyk/ifthenpay
2021
*/

class MBway {

private $mbway_key;
private $channel;
private $url_protocol;

function __construct($mbway_key, $channel, $url_protocol) {

$this->mbway_key = $mbway_key;
$this->channel = $channel;
$this->url_protocol = $url_protocol;
}

/*
Criar um pagamento MBWay com o número de telemóvel do client
$phone_number - Número de telemóvel do cliente
$internal_reference - Referência interna para ser usada depois no callback e identificar o pagamento ( MAX 15 caráters )
$order_value - Valor da encomenda em €
$customer_email - Email do utilizador ( OPCIONAL )
$description - Descrição do pagamento ( MAX 50 caráters ) ( OPCIONAL )
*/

function create($phone_number, $internal_reference, $order_value, $customer_email = "", $description = "") {

$url = $this->url_protocol . "://www.ifthenpay.com/mbwayws/IfthenPayMBW.asmx/SetPedidoJSON";

// Dados que vão ser enviados para o Ifthenpay
$post = http_build_query(array(
'MbWayKey' => $this->mbway_key,
'canal' => $this->channel,
"referencia" => $internal_reference,
"valor" => $order_value,
"nrtlm" => $phone_number,
"email" => $customer_email,
"descricao" => $description
));

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($curl);

curl_close($curl);

var_dump($data);

// Limpar e converter a resposta da api em JSON
$data = str_replace('<?xml version="1.0" encoding="utf-8"?>', "", $data);
$data = str_replace('<string xmlns="https://www.ifthenpay.com/">', "", $data);
$data = str_replace("</string>", "", $data);

$data = json_decode($data, true);

return $data;
}

/*
Obter o status do pagamento com uma API call à ifthenpay
( sem usar o callback )
*/

function status($payment_id) {

$url = $this->url_protocol . "://www.ifthenpay.com/mbwayws/IfthenPayMBW.asmx/EstadoPedidosJSON";
$url .= "?MbWayKey=" . $this->mbway_key . "&canal=" . $this->channel . "&idspagamento=" . $payment_id;

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($curl);

curl_close($curl);

// Limpar e converter a resposta da api em JSON
$data = str_replace('<?xml version="1.0" encoding="utf-8"?>', "", $data);
$data = str_replace('<string xmlns="https://www.ifthenpay.com/">', "", $data);
$data = str_replace("</string>", "", $data);

$data = json_decode($data, true);

return $data;
}
}
6 changes: 3 additions & 3 deletions class/multibanco.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,13 @@ function status($api_key, $reference) {
// Limpar os espaços da referencia
$reference = str_replace(" ", "", $reference);

$url = "http://www.ifthenpay.com/IfmbWS/WsIfmb.asmx/GetPaymentsJson";
$url = $this->url_protocol . "://www.ifthenpay.com/IfmbWS/WsIfmb.asmx/GetPaymentsJson";
$url .= "?chavebackoffice=" . $api_key . "&entidade=" . $this->entity . "&subentidade=" . $this->sub_entity . "&referencia=" . $reference . "&sandbox=0&dtHrInicio=&dtHrFim=&valor=";

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$data = curl_exec($curl);

Expand Down
26 changes: 26 additions & 0 deletions pagamento_mbway.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

require("class/mbway.php");

define("MBWAY_KEY", "DTM-0000000"); // Key MbWay fornecida pelo IfThenpay
define("IFTHENPAY_MBWAY_CHANNEL", "03"); // Canal predefinido na documentação do Ifthenpay

define("URL_PROTOCOL", "http");

$mbway = new MBWay(MBWAY_KEY, IFTHENPAY_MBWAY_CHANNEL, URL_PROTOCOL);

// Id da compra, neste caso um número random
$phone_number = "910000000";
$customer_email = "[email protected]";
$description = "Compra teste";
$internal_reference = rand(1000, 10000);
$order_value = 0.01;

// Obter a referência
$status = $mbway->create($phone_number, $internal_reference, $order_value, $customer_email, $description);

// Guarda este ID numa database para futuro processamento de dados
$payment_id = $status["IdPedido"];

// Obter o status do pagamento
var_dump($mbway->status($payment_id));
2 changes: 1 addition & 1 deletion index.php → pagamento_multibanco.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

// Id da compra, neste caso um número random
$order_id = rand(1000, 10000);
$order_value = 39.99;
$order_value = 39.99; // Em euros

// Obter a referência
$reference = $multibanco->generate($order_id, $order_value);
Expand Down

0 comments on commit 3edf34a

Please sign in to comment.