/** * Verifier le statut d'une transaction lors du retour de l'internaute * * @param array $config * @param null|array $response * @return array */ function presta_paybox_call_response_dist($config, $response = null) { include_spip('inc/bank'); $mode = $config['presta']; if (!$response) { // recuperer la reponse en post et la decoder $response = paybox_response(); } if (!$response) { return array(0, false); } if ($response['ETAT_PBX'] === 'PBX_RECONDUCTION_ABT') { // c'est un revouvellement initie par paybox // verifier qu'on a pas deja traite cette recurrence ! if ($t2 = sql_fetsel("*", "spip_transactions", "autorisation_id=" . sql_quote($response['trans'] . "/" . $response['auth']))) { $response['id_transaction'] = $t2['id_transaction']; } elseif ($preparer_echeance = charger_fonction('preparer_echeance', 'abos', true)) { // on reinjecte le bon id de transaction ici si fourni if ($id_transaction = $preparer_echeance("uid:" . $response['abo'])) { $response['id_transaction'] = $id_transaction; } else { return bank_transaction_invalide(intval($response['id_transaction']) . 'PBX_RECONDUCTION_ABT', array('mode' => $mode, 'sujet' => 'Echec creation transaction echeance', 'erreur' => "uid:" . $response['abo'] . ' inconnu de $preparer_echeance', 'log' => bank_shell_args($response), 'update' => false, 'send_mail' => true)); } } } // depouillement de la transaction list($id_transaction, $success) = paybox_traite_reponse_transaction($config, $response); if ($response['abo'] and $id_transaction) { // c'est un premier paiement d'abonnement, l'activer if ($response['ETAT_PBX'] !== 'PBX_RECONDUCTION_ABT' and $success) { // date de fin de mois de validite de la carte $date_fin = bank_date_fin_mois(2000 + intval(substr($response['valid'], 0, 2)), substr($response['valid'], 2, 2)); #spip_log('response:'.var_export($response,true),$mode.'db'); #spip_log('date_fin:'.$date_fin,$mode.'db'); // id_transaction contient toute la trame IDB_xx deriere le numero // on ne retient que la valeur entiere $id_transaction = intval($id_transaction); if ($activer_abonnement = charger_fonction('activer_abonnement', 'abos', true)) { $activer_abonnement($id_transaction, $response['abo'], $mode, $date_fin); } } // c'est un renouvellement reussi, il faut repercuter sur l'abonnement if ($response['ETAT_PBX'] === 'PBX_RECONDUCTION_ABT' and $success) { if ($renouveler_abonnement = charger_fonction('renouveler_abonnement', 'abos', true)) { $renouveler_abonnement($id_transaction, $response['abo'], $mode); } } // c'est un renouvellement en echec, il faut le resilier if ($response['ETAT_PBX'] === 'PBX_RECONDUCTION_ABT' and !$success) { if ($resilier = charger_fonction('resilier', 'abos', true)) { $options = array('notify_bank' => false, 'immediat' => true, 'message' => "[bank] Transaction #{$id_transaction} refusee"); $resilier("uid:" . $response['abo'], $options); } } } return array($id_transaction, $success); }
function presta_paybox_call_response_dist($response = null) { if (!$response) { // recuperer la reponse en post et la decoder $response = paybox_response(); } if (!$response) { return array(0, false); } if ($response['ETAT_PBX'] == 'PBX_RECONDUCTION') { // c'est un revouvellement initie par paybox : creer la transaction maintenant ! if ($row = sql_fetsel("id_abonnement", "spip_abonnements", "abonne_uid=" . sql_quote($response['abo']))) { $id_abonnement = $row['id_abonnement']; } if ($id_abonnement) { $renouveler = charger_fonction('renouveler', 'abos'); // on reinjecte le bon id de transaction ici $response['id_transaction'] = $renouveler($id_abonnement); } } // depouillement de la transaction list($id_transaction, $success) = paybox_traite_reponse_transaction($response); if ($response['abo'] and $id_transaction and $success) { // recuperer la date de validite de la carte // ne sert pas ici, car on fixe la fin de l'abo a echeance+1jour // ce qui le resiliera automatiquement en cas de non reconduction $date_fin = mktime(0, 0, 0, substr($response['valid'], 2, 2), 27, 2000 + substr($response['valid'], 0, 2)) + 5 * 24 * 3600; $date_fin = mktime(0, 0, 0, date('m', $date_fin), date('d'), date('Y', $date_fin)); $date_fin = date('Y-m-d H:i:s', $date_fin); spip_log('response:' . var_export($response, true), 'payboxdb'); spip_log('date_fin:' . $date_fin, 'payboxdb'); // id_transaction contient toute la trame IDB_xx deriere le numero // on ne retient que la valeur entiere $id_transaction = intval($id_transaction); $activer_abonement = charger_fonction('activer_abonnement', 'abos'); $activer_abonement($id_transaction, $response['abo'], 'paybox', $date_fin); } return array($id_transaction, $success); }