GlisWeb framework
_default.riepilogo.php
Vai alla documentazione di questo file.
1 <?php
2 
3  // shortcut per il carrello
4  $c = $_SESSION['carrello'];
5 
6  // shortcut per la configurazione
7  $k = $cf['ecommerce']['provider'][ $_SESSION['carrello']['provider_pagamento'] ]['profile'];
8 
9  // shortcut per la lingua
10  $l = $cf['localization']['language']['ietf'];
11 
12  // debug
13  // echo $_SESSION['carrello']['provider_pagamento'] . PHP_EOL;
14  // print_r( $k );
15 
16  // blocco forzato dell'autosubmit (impostare a true per consentire l'autosubmit, a false altrimenti)
17  // NOTA questo parametro dev'essere recepito dal template di riepilogo carrello!!!
18  $ct['autosubmit'] = true;
19 
20  // se la modalità di pagamento scelta prevede un provider esterno, creo il modulo
21  switch( $_SESSION['carrello']['provider_pagamento'] ) {
22 
23  case 'nexi':
24 
25  // verifico se si tratta di una forma di pagamento ibrida
26  $ibrida = mysqlSelectValue( $cf['mysql']['connection'], 'SELECT se_contanti FROM modalita_pagamento WHERE id = ?', array( array( 's' => $_SESSION['carrello']['id_modalita_pagamento'] ) ) );
27 
28  // se la forma di pagamento è ibrida, detraggo dall'importo pagato online il valore dei contanti
29  if( $ibrida == 1 ) {
30  $totalePagareOnline = $c['prezzo_lordo_complessivo'] - 999;
31  } else {
32  $totalePagareOnline = $c['prezzo_lordo_complessivo'];
33  }
34 
35  // dati per la costruzione del modulo
36  $ct['etc']['meta']['ct'] = explode( ' ', microtime() ); // timestamp corrente
37  $ct['etc']['meta']['method'] = $k['method']; // metodo di chiamata al server
38  $ct['etc']['meta']['action'] = $k['action']; // server da chiamare
39  $ct['etc']['meta']['macKey'] = $k['key']; // chiave mac
40 
41  // dati del modulo
42  $ct['etc']['fields']['codTrans'] = $c['id'].'.'.time(); // id del carrello
43  $ct['etc']['fields']['importo'] = str_replace( array( '.', ',' ), '', sprintf( '%01.2f', $totalePagareOnline ) ); // totale a pagare
44  $ct['etc']['fields']['alias'] = $k['alias']; // insegna del negozio
45  $ct['etc']['fields']['divisa'] = 'EUR'; // valuta del carrello
46  $ct['etc']['fields']['mail'] = $c['intestazione_mail']; // mail del cliente
47  $ct['etc']['fields']['url'] = $cf['contents']['pages'][ $k['success'] ]['url'][ $l ]; // pagina di pagamento effettuato con successo
48  $ct['etc']['fields']['url_back'] = $cf['contents']['pages'][ $k['error'] ]['url'][ $l ]; // pagina di problemi con il pagamento
49  $ct['etc']['fields']['urlpost'] = $cf['site']['url'] . $k['listener']; // pagina dell'API di ricezione conferma
50  $ct['etc']['fields']['languageId'] = 'ITA'; // codice della lingua
51 
52  // importo forzato, per i test
53  if( isset( $k['importo'] ) ) {
54  $ct['etc']['fields']['importo'] = $k['importo'];
55  }
56 
57  // calcolo del mac
58  $ct['etc']['fields']['mac'] = sha1(
59  'codTrans=' . $ct['etc']['fields']['codTrans'] .
60  'divisa=EURimporto=' . $ct['etc']['fields']['importo'] . $ct['etc']['meta']['macKey']
61  );
62 
63  break;
64 
65  case 'paypal':
66 
67  // verifico se si tratta di una forma di pagamento ibrida
68  $ibrida = mysqlSelectValue( $cf['mysql']['connection'], 'SELECT se_contanti FROM modalita_pagamento WHERE id = ?', array( array( 's' => $_SESSION['carrello']['id_modalita_pagamento'] ) ) );
69 
70  // se la forma di pagamento è ibrida, detraggo dall'importo pagato online il valore dei contanti
71  if( $ibrida == 1 ) {
72  $totalePagareOnline = $c['prezzo_lordo_complessivo'] - 999;
73  } else {
74  $totalePagareOnline = $c['prezzo_lordo_complessivo'];
75  }
76 
77  // dati per la costruzione del modulo
78  $ct['etc']['meta']['method'] = $k['method']; // metodo di chiamata al server
79  $ct['etc']['meta']['action'] = $k['action']; // server da chiamare
80 
81  // dati del modulo
82  $ct['etc']['fields']['item_name'] = 'ordine e-commerce n. '.$c['id']; // nome del carrello
83  $ct['etc']['fields']['item_number'] = $c['id']; // id del carrello
84  $ct['etc']['fields']['cmd'] = '_xclick'; // comando inviato al server
85  $ct['etc']['fields']['business'] = $k['business']; // indirizzo e-mail dell'account
86  $ct['etc']['fields']['amount'] = str_replace( ',', '.', sprintf( '%01.2f', $totalePagareOnline ) ); // totale a pagare
87  $ct['etc']['fields']['currency_code'] = 'EUR'; // valuta del carrello
88  $ct['etc']['fields']['image'] = 'http://www.paypal.com/it_IT/i/btn/x-click-but01.gif'; // bottone "paga adesso"
89  $ct['etc']['fields']['return'] = $cf['contents']['pages'][ $k['success'] ]['url'][ $l ]; // pagina di pagamento effettuato con successo
90  $ct['etc']['fields']['cancel_return'] = $cf['contents']['pages']['carrello']['url'][ $l ]; // pagina di annullamento del pagamento
91  $ct['etc']['fields']['image_url'] = NULL; // logo
92  $ct['etc']['fields']['notify_url'] = $cf['site']['url'] . $k['listener']; // pagina dell'API di ricezione conferma
93 
94  // contenuto del carrello
95  foreach( $c['carrelli_articoli'] as $i => $a ) {
96  }
97 
98  break;
99 
100  case 'comnpay':
101 
102  // NOTA
103  // https://docs.comnpay.com/homologation-en.html
104  // https://homologation.comnpay.com/comnpay-transactions.html
105  // https://docs.comnpay.com/psp.html
106 
107  // debug
108  // $ct['autosubmit'] = $k['autosubmit'];
109 
110  // verifico se si tratta di una forma di pagamento ibrida
111  $ibrida = mysqlSelectValue( $cf['mysql']['connection'], 'SELECT se_contanti FROM modalita_pagamento WHERE id = ?', array( array( 's' => $_SESSION['ecommerce']['carrello']['id_modalita_pagamento'] ) ) );
112 
113  // se la forma di pagamento è ibrida, detraggo dall'importo pagato online il valore dei contanti
114  if( $ibrida == 1 ) {
115  $totalePagareOnline = $c['prezzo_lordo_complessivo'] - 999;
116  } else {
117  $totalePagareOnline = $c['prezzo_lordo_complessivo'];
118  }
119 
120  // dati per la costruzione del modulo
121  $ct['etc']['meta']['method'] = $k['method']; // metodo di chiamata al server
122  $ct['etc']['meta']['action'] = $k['action']; // server da chiamare
123 
124  // dati del modulo
125  $ct['etc']['fields']['idTransaction'] = $c['id']; // id del carrello
126  $ct['etc']['fields']['montant'] = sprintf( '%01.2f', $totalePagareOnline ); // totale a pagare
127  $ct['etc']['fields']['idTPE'] = $k['terminale']; // ID del terminale
128  $ct['etc']['fields']['devise'] = 'EUR'; // valuta del carrello
129  $ct['etc']['fields']['lang'] = 'it'; // codice della lingua
130  $ct['etc']['fields']['urlRetourOk'] = $cf['contents']['pages'][ $k['success'] ]['url'][ $l ]; // pagina di pagamento effettuato con successo
131  $ct['etc']['fields']['urlRetourNOK'] = $cf['contents']['pages'][ $k['error'] ]['url'][ $l ]; // pagina di problemi con il pagamento
132  $ct['etc']['fields']['urlIPN'] = $cf['site']['url'] . $k['listener']; // pagina dell'API di ricezione conferma
133  $ct['etc']['fields']['typeTr'] = 'P3F'; // D -> debito, PA -> preautorizzazione, P3F -> rate
134 
135  // calcolo del sec
136  $ct['etc']['fields']['sec'] = hash(
137  'sha512',
138  base64_encode(
139  implode(
140  '|',
141  array_merge(
142  $ct['etc']['fields'],
143  array( 'key' => $k['key'] )
144  )
145  )
146  )
147  ); // valore restituito per controllo dal provider all'IPN listener
148 
149  break;
150 
151  case 'amazonpay':
152 
153  // debug
154  // $ct['autosubmit'] = $k['autosubmit'];
155 
156 
157  // inizializzazione
158  $amazonpay_config = array(
159  'public_key_id' => $cf['ecommerce']['provider']['amazonpay']['profile']['publicKey'],
160  'private_key' => DIRECTORY_BASE . 'etc/amazon/'.$cf['ecommerce']['provider']['amazonpay']['profile']['publicKey'].'.pem',
161  'sandbox' => $cf['ecommerce']['provider']['amazonpay']['profile']['sandbox'],
162  'region' => 'EU'
163  );
164 
165  $payload = array(
166  'webCheckoutDetails' => array(
167  'checkoutResultReturnUrl' => $cf['site']['url'] . $cf['ecommerce']['provider']['amazonpay']['profile']['listener']
168  ),
169  'paymentDetails' => array(
170  'paymentIntent' => 'AuthorizeWithCapture',
171  'canHandlePendingAuthorization' => false,
172  'chargeAmount' => array(
173  'amount' => str_replace( ',', '.', sprintf( '%01.2f', $c['prezzo_lordo_complessivo'] ) ),
174  'currencyCode' => 'EUR'
175  ),
176  ),
177  'merchantMetadata' => array(
178  'merchantReferenceId' => $c['id'],
179  'merchantStoreName' => $k['storeName'],
180  'noteToBuyer' => ''
181  )
182  );
183 
184  try {
185  $checkoutSessionId = $c['checkout_session'];
186  $client = new Amazon\Pay\API\Client($amazonpay_config);
187  $result = $client->updateCheckoutSession($checkoutSessionId, $payload);
188  if ($result['status'] === 200) {
189  $response = json_decode($result['response'], true);
190  $amazonPayRedirectUrl = $response['webCheckoutDetail']['amazonPayRedirectUrl'];
191 # echo "amazonPayRedirectUrl=$amazonPayRedirectUrl\n";
192 
193  // dati per la costruzione del modulo
194 # $ct['etc']['meta']['method'] = $k['method']; // metodo di chiamata al server
195 # $ct['etc']['meta']['action'] = $amazonPayRedirectUrl; // server da chiamare
196  $ct['page']['headers'][] = 'location: '.$amazonPayRedirectUrl;
197 
198 
199  } else {
200  // check the error
201  echo 'status=' . $result['status'] . '; response=' . $result['response'] . "\n";
202  }
203  } catch (\Exception $e) {
204  // handle the exception
205  echo $e . "\n";
206  }
207 
208 
209 
210 
211 
212 
213  break;
214 
215  case 'contanti':
216 
217  // dati per la costruzione del modulo
218  $ct['etc']['meta']['method'] = $k['method']; // metodo di chiamata al server
219  $ct['etc']['meta']['action'] = $cf['contents']['pages'][ $k['action'] ]['url'][ $l ]; // server da chiamare
220 
221  // dati del modulo
222  $ct['etc']['fields']['id'] = $c['id']; // id del carrello
223 
224  break;
225 
226  }
227 
228  // debug
229  // echo $_SESSION['carrello']['provider_pagamento'].PHP_EOL;
230  // print_r( $ct['etc'] );
231  // print_r( $cf['ecommerce']['provider'] );
232 
233 ?>
$ct['autosubmit']
$amazonpay_config
$cf['ricerca']['template']
Definition: _030.common.php:7
$a
Definition: _slack.php:21
mysqlSelectValue( $c, $q, $p=false, &$e=array())
$e
Definition: _slack.php:121
const DIRECTORY_BASE
Definition: _osm.php:3
if(isset( $_REQUEST['amazonCheckoutSessionId'])) $_SESSION['carrello']