コード例 #1
0
ファイル: response.php プロジェクト: nursit/bank
/**
 * 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);
}
コード例 #2
0
ファイル: response.php プロジェクト: rougerose/bank
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);
}