require_once("MedodoDiPagamento.php");
class Scalapay extends MedodoDiPagamento{
var $nome_metodo = "Scalapay";
var $apiUrl = "https://api.scalapay.com/v2/";
// var $secret = "qhtfs87hjnc12kkos";
var $valuta = "EUR";
var $orderInformations = []; // Da compilare seguendo i parametri della richiesta ordine https://developers.scalapay.com/reference/post_v2-orders-1
function auto(){
if($this->demo){
//$this->debug = true;
$this->account_venditore = "tnx@tnx.it";
//Smart Buttons
$this->apiUrl = 'https://integration.api.scalapay.com/v2/';
$this->secret = 'sp_19g6jl09epw22';
}
if(!$this->secret) return 'Parametri mancanti';
switch($_GET[$this->step_var]){
case 'cancel':
case 'return_ko':
return $this->Procedura->annulla();
case 'return_ok':
return $this->Procedura->concluso();
case 's2s':
if($_GET["orderToken"]){
$paymentResult = $this->sendScalapayApiCall("payments/" . $_GET["orderToken"], [], false);
if(in_array((string) $paymentResult->status, ["authorized", "charged"])){
if((string) $paymentResult->captureStatus != "captured"){
// Confermo la cattura dell'ordine
$postFields = [];
$postFields["token"] = $_GET["orderToken"];
$capturePaymentResult = $this->sendScalapayApiCall("payments/capture", $postFields);
if((string) $capturePaymentResult->status != "APPROVED"){
indi_redirect($this->Procedura->genera_link_agg(array($this->step_var=>"return_ko")));
}
}
$this->Procedura->confermato($this->identificativo);
indi_redirect($this->Procedura->genera_link_agg([$this->step_var=>"return_ok", "orderToken" => "", "status" => ""]));
} else {
indi_redirect($this->Procedura->genera_link_agg(array($this->step_var=>"return_ko")));
}
} else {
trigger_error("Ricevuta chiamata S2S da ScalaPay senza orderToken");
indi_redirect($this->Procedura->genera_link_agg(array($this->step_var=>"error")));
}
case 'error':
return $this->Procedura->errore();
default:
$this->Procedura->iniziato($this->nome_metodo);
$postFields = [];
$postFields["totalAmount"]["amount"] = (string) $this->importo;
$postFields["totalAmount"]["currency"] = (string) $this->valuta;
$postFields["merchant"]["redirectCancelUrl"] = (string) $this->Procedura->genera_link_agg(array($this->step_var=>"cancel"));
$postFields["merchant"]["redirectConfirmUrl"] = (string) $this->Procedura->genera_link_agg(array($this->step_var=>"s2s"));
$postFields["merchant"]["merchantReference"] = (string) $this->identificativo;
if($this->orderInformations) foreach($this->orderInformations as $keyPostField => $postFieldValues){
$postFields[$keyPostField] = $postFieldValues;
}
if(!$postFields["consumer"]["givenNames"]) $postFields["consumer"]["givenNames"] = "";
if(!$postFields["consumer"]["surname"]) $postFields["consumer"]["surname"] = "";
$curlResult = $this->sendScalapayApiCall("orders", $postFields);
if($curlResult->checkoutUrl){
indi_redirect($curlResult->checkoutUrl);
} else {
indi_redirect($this->Procedura->genera_link_agg(array($this->step_var=>"return_ko")));
}
break;
}
}
function demoInfo(){
return '
Inserisci un numero di telefono valido per ricevere OTP di conferma.
Carte di credito di test:
Pagamento Accettato:
Numero di carta: 4111 1111 1111 1111
CVV: qualsiasi codice (es. 123)
Data di scadenza: qualsiasi data
Pagamento Respinto:
Numero di carta: 4100 0000 0000 0019
CVV: qualsiasi codice (es. 123)
Data di scadenza: qualsiasi data';
}
function getScalapayCurlHeader(){
$curlRequestHeaders = [];
$curlRequestHeaders[] = "Content-Type: application/json";
$curlRequestHeaders[] = "Authorization: Bearer " . $this->secret;
$curlRequestHeaders[] = "Accept: application/json";
return $curlRequestHeaders;
}
function sendScalapayApiCall($operation, $callParameters = [], $isPost = true){
$curlRequestHeaders = $this->getScalapayCurlHeader();
$curlUri = $this->apiUrl . $operation;
$curlRequest = curl_init($curlUri);
curl_setopt($curlRequest, CURLOPT_HTTPHEADER, $curlRequestHeaders);
curl_setopt($curlRequest, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlRequest, CURLOPT_ENCODING, "");
curl_setopt($curlRequest, CURLOPT_MAXREDIRS, 10);
curl_setopt($curlRequest, CURLOPT_TIMEOUT, 30);
curl_setopt($curlRequest, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
if($isPost) curl_setopt($curlRequest, CURLOPT_CUSTOMREQUEST, "POST");
if($callParameters) curl_setopt($curlRequest, CURLOPT_POSTFIELDS, json_encode($callParameters));
$curlResult = curl_exec($curlRequest);
curl_close($curlRequest);
return json_decode($curlResult);
}
function setValuta($currencyCode){
$this->valuta = $currencyCode;
}
}
?>