Ejemplo n.º 1
0
function wha_check_offer_dist($id_abonnement)
{
    $res = spip_query('SELECT * FROM spip_abonnements WHERE id_abonnement=' . intval($id_abonnement));
    if (!($row = spip_fetch_array($res))) {
        return false;
    }
    if ($row['mode_paiement'] != 'wha' or !($uoid = $row['abonne_uid'])) {
        spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas ete souscrit avec wha (ou pas d'uoid)", 'wha_abo_check');
        return false;
    }
    if (!($confirm = $row['confirm']) or !($confirm = unserialize($confirm))) {
        spip_log("wha_check_offer :Erreur : abonnement {$id_abonnement} n'a pas d'url node enregistree", 'wha_abo_check');
        return false;
    }
    $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']);
    $url_check = wha_url_check_abo($uoid, 'love', $config);
    include_spip('inc/distant');
    $ack = @recuperer_page($url_check);
    spip_log($t = "wha_check_offer : reponse a {$url_check} : {$ack}", 'wha_abo_check');
    if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign)))) {
        spip_log($t = "wha_check_offer : pas de reponse valide {$url_check} : {$ack}", 'wha_abo_check');
        return null;
    }
    if (isset($args['c']) and $args['c'] == 'ack') {
        return true;
    }
    if (isset($args['e']) and in_array($args['e'], array(0, 1, 14, 15))) {
        return false;
    }
    return null;
}
Ejemplo n.º 2
0
/**
 * @param array $config
 * @return array
 */
function presta_internetplus_inc_traiter_reponse_dist($config)
{
    $mode = 'wha';
    // historique...
    if ($config['type'] == 'abo') {
        $mode = 'wha_abo';
    }
    $config_id = bank_config_id($config);
    $id_transaction = 0;
    if (!($m = _request('m'))) {
        return array($id_transaction, false, false);
    }
    $m = urldecode($m);
    $mp = false;
    if (!($decode = wha_unsign($m))) {
        include_spip('inc/bank');
        bank_transaction_invalide($id_transaction, array('mode' => $mode, 'erreur' => "signature invalide", 'log' => $m));
        return array($id_transaction, false, false);
    }
    list($unsign, $partnerId, $keyId) = $decode;
    #var_dump($unsign);
    $args = wha_extract_args($unsign);
    $mp = $args['v']['mp'];
    #var_dump($args);
    // recuperer le code de resultat
    $c = isset($args['c']) ? $args['c'] : "";
    // annulation de l'internaute
    if (preg_match(",^(OfferAuthorization|Authorize)Cancel\$,i", $c)) {
        spip_log($t = "wha_traiter_reponse : annulation de la transaction : {$m}", $mode);
        if (isset($args['v']) and is_array($mp = $v = $args['v']) and $id_transaction = intval($v['id_transaction'])) {
            $row = sql_fetsel("*", "spip_transactions", "id_transaction=" . intval($id_transaction));
            if ($row['reglee'] == 'oui') {
                return array($id_transaction, true, $mp);
            }
            // sinon enregistrer echec transaction
            $date_paiement = date('Y-m-d H:i:s');
            include_spip('inc/bank');
            bank_transaction_echec($id_transaction, array('mode' => $mode, 'config_id' => $config_id, 'date_paiement' => $date_paiement, 'code_erreur' => "", 'erreur' => "Annulation", 'log' => var_export($args, true)));
        } else {
            include_spip('inc/bank');
            bank_transaction_invalide($id_transaction, array('mode' => $mode, 'erreur' => "id_transaction inconnu dans args[v] lors de l'annulation, traitement impossible", 'log' => $m));
        }
        return array($id_transaction, false, $mp);
    }
    // Code inconnu : on ne fait rien ?
    if (!preg_match(",^(OfferAuthorization|Authorize)Success\$,i", $c)) {
        include_spip('inc/bank');
        bank_transaction_invalide($id_transaction, array('mode' => $mode, 'erreur' => "code reponse c inconnu, traitement impossible", 'log' => $m));
        return array($id_transaction, false, $mp);
    }
    // Verifier le numero de transaction, dans mp
    if (!isset($args['v']) or !is_array($v = $args['v']) or !isset($v['mp']) or !is_array($mp = $v['mp'])) {
        include_spip('inc/bank');
        bank_transaction_invalide($id_transaction, array('mode' => $mode, 'erreur' => "mp inconnu, traitement impossible", 'log' => $m));
        return array($id_transaction, false, $mp);
    }
    // OK
    $traiter_reponse = charger_fonction("traiter_reponse_{$mode}", 'presta/internetplus/inc');
    return $traiter_reponse($config, $m, $args, $partnerId, $keyId);
}
Ejemplo n.º 3
0
function presta_internetplus_inc_traiter_reponse_wha_dist($config, $m, $args, $partnerId, $keyId)
{
    $mode = 'wha';
    // historique...
    $config_id = bank_config_id($config);
    $v = $args['v'];
    $mp = $v['mp'];
    if (!isset($mp['id_transaction']) or !($id_transaction = $mp['id_transaction'])) {
        bank_transaction_invalide(0, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de id_transaction en retour", 'log' => $m));
        return array(0, false, $mp);
    }
    // verifier que la transaction est connue
    $res = sql_select("*", "spip_transactions", "id_transaction=" . intval($id_transaction));
    if (!($row = sql_fetch($res))) {
        bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "transaction inconnue", 'log' => $m));
        return array($id_transaction, false, $mp);
    }
    if (!$row['id_auteur']) {
        if (!isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur']) {
            $_SESSION['wha_traiter_reponse_wha'] = array('m' => $m, 'args' => $args, 'partnerId' => $partnerId, 'keyId' => $keyId);
            return array($id_transaction, 'delayed', $mp);
        } else {
            sql_updateq("spip_transactions", array("id_auteur" => $row['id_auteur'] = $GLOBALS['visiteur_session']['id_auteur']), "id_transaction=" . intval($id_transaction));
        }
    }
    if ($row['statut'] !== 'ok') {
        // ok, on traite le reglement
        $montant_regle = $row['montant'];
        // on verifie que le montant est bon !
        /*$montant_regle = isset($v['amt'])?$v['amt']:0;
        		if ($montant_regle!=$row['montant']){
        			spip_log($t = "wha_traiter_reponse : id_transaction $id_transaction, montant regle $montant_regle!=".$row['montant'].":".$m,'internetplus'._LOG_ERREUR);
        			// on log ca dans un journal dedie
        			spip_log($t,'internetplus_partiels'._LOG_ERREUR);
        			// on est sympa avec le client, dans le doute on livre le produit
        		}*/
        $authorisation_id = $v['tId'];
        // declencher l'url de confirmation de reglement
        $node_response = $v['rt'];
        $config = array('MERCHANT_ID' => $partnerId, 'KEY_ID' => $keyId, 'node' => $node_response);
        $url = wha_url_confirm($authorisation_id, $row['montant'], $config);
        include_spip('inc/distant');
        $ack = @recuperer_page($url);
        if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') {
            bank_transaction_invalide($id_transaction, array('where' => 'wha_traiter_reponse', 'mode' => $mode, 'erreur' => "pas de confirmation de debit / {$url} : {$ack}", 'update' => true, 'log' => $m));
            return array($id_transaction, false, $mp);
        }
        sql_updateq("spip_transactions", array("autorisation_id" => $authorisation_id, "mode" => "wha/{$config_id}", "montant_regle" => $montant_regle, "date_paiement" => date('Y-m-d H:i:s'), "statut" => 'ok', "reglee" => 'oui'), "id_transaction=" . intval($id_transaction));
        spip_log("wha_traiter_reponse : id_transaction {$id_transaction}, reglee", $mode . _LOG_INFO_IMPORTANTE);
        spip_log("{$m}", $mode . '_autorisations' . _LOG_INFO_IMPORTANTE);
    }
    $regler_transaction = charger_fonction('regler_transaction', 'bank');
    $regler_transaction($id_transaction, array('row_prec' => $row));
    return array($id_transaction, true, $mp);
}
Ejemplo n.º 4
0
function presta_internetplus_inc_confirm_offer_dist($id_transaction, $uoid, $confirm)
{
    $config = array('MERCHANT_ID' => $confirm['partner'], 'KEY_ID' => $confirm['key'], 'node' => $confirm['node']);
    $url_confirm = wha_url_confirm_abo($uoid, $config);
    include_spip('inc/distant');
    $ack = @recuperer_page($url_confirm);
    if (!$ack or !($unsign = wha_unsign($ack)) or !($args = wha_extract_args(reset($unsign))) or !isset($args['c']) or !$args['c'] == 'ack') {
        spip_log($t = "wha_confirm_offer : transaction {$id_transaction}, echec confirmation de debit {$uoid} / {$url_confirm} : {$ack}", 'internetplus_abo' . _LOG_ERREUR);
        spip_log($t, 'internetplus_abo_hs' . _LOG_ERREUR);
        return false;
    }
    return true;
}
Ejemplo n.º 5
0
/**
 * @param array $config
 * @return array
 */
function wha_responder_dist($config)
{
    $mode = 'wha';
    // historique...
    if ($config['type'] == 'abo') {
        $mode = 'wha_abo';
    }
    $uoid = 0;
    if (!($m = _request('m'))) {
        return array($uoid, false);
    }
    $m = urldecode($m);
    if (!($decode = wha_unsign($m))) {
        spip_log($t = "wha_responder : signature invalide : {$m}", $mode);
        // on log ca dans un journal dedie
        spip_log($t, 'wha_douteux');
        return array($uoid, false);
    }
    list($unsign, $partnerId, $keyId) = $decode;
    #var_dump($unsign);
    $args = wha_extract_args($unsign);
    #var_dump($args);
    // recuperer le code de resultat
    $c = isset($args['c']) ? $args['c'] : "";
    // annulation de l'internaute
    if (!preg_match(",^(NMPOC_NEW)\$,i", $c)) {
        spip_log($t = "wha_responder : c invalide : {$m}", $mode);
        return array($uoid, false);
    }
    // OK
    if (!isset($args['v']) or !is_array($v = $args['v']) or !isset($v['r']) or !isset($v['uo'])) {
        spip_log($t = "wha_responder : traitement impossible : {$m}", $mode);
        return array($uoid, false);
    }
    $uoid = $v['uo'];
    // envoyer l'acquitement
    echo wha_message("ack", false, $partnerId, $keyId);
    // (id_abonnement, (immediat,commentaire))
    return array($uoid, array($v['r'] != 200, $v['r'] . ':' . $v['c']));
}