Exemplo n.º 1
0
function efsnet_payment($payment_id, $member_id)
{
    set_time_limit(600);
    ignore_user_abort(true);
    // first prepare all variables
    global $db, $config, $plugin_config;
    $this_config = $plugin_config['payment']['efsnet'];
    if (!$this_config['store_id']) {
        fatal_error("No site_id configured for EFSNET");
    }
    if (!$this_config['store_key']) {
        fatal_error("No transaction key configured for EFSNET");
    }
    $payment = $db->get_payment($payment_id);
    if (!$payment) {
        return array(sprintf(_PLUG_PAY_EFSNET_ERROR, $payment_id), -900);
    }
    if ($payment['completed']) {
        return array(sprintf(_PLUG_PAY_EFSNET_ERROR2, $payment_id), -901);
    }
    if ($payment['paysys_id'] != 'efsnet') {
        return array(sprintf(_PLUG_PAY_EFSNET_ERROR3, $payment[paysys_id], $payment_id), -902);
    }
    if ($payment['member_id'] != $member_id) {
        return array(sprintf(_PLUG_PAY_EFSNET_ERROR4, $payment_id), -903);
    }
    $member = $db->get_user($payment['member_id']);
    if (!$member) {
        return array(sprintf(_PLUG_PAY_EFSNET_ERROR5, $member_id), -904);
    }
    $cc_number = amember_decrypt($member['data']['cc-hidden']);
    $cc_expire = $member['data']['cc-expire'];
    ///// !!! run transaction
    $url_proc = $this_config['testing'] ? "https://testefsnet.concordebiz.com/efsnet.dll" : "https://efsnet.concordebiz.com/efsnet.dll";
    if (!$_SESSION['_amember_payment_try'] || $_SESSION['_amember_payment_try'] > 87) {
        $_SESSION['_amember_payment_try'] = 65;
    }
    $vars = array("Method" => "CreditCardCharge", "StoreID" => $this_config['store_id'], "StoreKey" => $this_config['store_key'], "ApplicationID" => 'AMember Pro v1.9.3', "ReferenceNumber" => '19300' . $payment_id, "TransactionAmount" => $payment['amount'], "AccountNumber" => $cc_number, "ExpirationMonth" => substr($cc_expire, 0, 2), "ExpirationYear" => substr($cc_expire, 2, 2), "BillingName" => $member['name_f'] . ' ' . $member['name_l'], "BillingAddress" => $member['data']['cc_street'], "BillingCity" => $member['data']['cc_city'], "BillingState" => $member['data']['cc_state'], "BillingPostalCode" => $member['data']['cc_zip'], "BillingCountry" => $member['data']['cc_country'], "BillingEmail" => $member['email']);
    if ($_SESSION['_amember_card_code']) {
        $vars["CardVerificationValue"] = $_SESSION['_amember_card_code'];
    }
    $_SESSION['_amember_card_code'] = '';
    unset($_SESSION['_amember_card_code']);
    foreach ($vars as $kk => $vv) {
        $v = urlencode($vv);
        $k = urlencode($kk);
        $vars1[] = "{$kk}={$vv}";
    }
    //    print_r($vars);
    $vars_cc = $vars;
    $vars_cc['AccountNumber'] = $member['data']['cc'];
    unset($vars_cc['CardVerificationValue']);
    $payment['data'][] = $vars_cc;
    $db->update_payment($payment_id, $payment);
    $buffer = get_url($url_proc, join('&', $vars1));
    parse_str($buffer, $return);
    ////////////// check transaction result   ////////////////////////////
    if (!isset($return['ResponseCode'])) {
        $db->log_error("Empty result, payment handling failed #{$payment_id}");
        return array(_PLUG_PAY_EFSNET_ERROR6, -1);
    } elseif ($return['ResponseCode'] == 0) {
        $db->finish_waiting_payment($payment_id, 'efsnet', $return['ApprovalNumber'], '', $return);
        return array('', $return['ResponseCode']);
    } else {
        $m = $db->get_user($member_id);
        $member['data']['cc-hidden'] = '';
        $member['data']['cc-expire'] = '';
        $member['data']['cc'] = '';
        $db->update_user($member_id, $m);
        $payment['data'][] = $return;
        $db->log_error($return['ResultMessage']);
        $db->update_payment($payment_id, $payment);
        return array("Payment processor error: " . ($return['ResultMessage'] ? $return['ResultMessage'] : $buffer), $return['ResponseCode']);
    }
    return array($return['ResultMessage'], $return['ResponseCode']);
    //dummy!
}
Exemplo n.º 2
0
function payready_payment($payment_id, $member_id)
{
    set_time_limit(600);
    ignore_user_abort(true);
    // first prepare all variables
    global $db, $config, $plugin_config;
    $this_config = $plugin_config['payment']['payready'];
    if (!$this_config['login']) {
        fatal_error("No username configured for PayReady");
    }
    $payment = $db->get_payment($payment_id);
    if (!$payment) {
        return array(sprintf(_PLUG_PAY_PAYRDY_ERROR10, $payment_id), 3);
    }
    if ($payment['completed']) {
        return array(sprintf(_PLUG_PAY_PAYRDY_ERROR11, $payment_id), 3);
    }
    if ($payment['paysys_id'] != 'payready') {
        return array(_PLUG_PAY_PAYRDY_ERROR12 . "'{$payment['paysys_id']}' (#{$payment_id})", 3);
    }
    //    if ($payment['member_id'] != $member_id)
    //        return array("Payment created for another member: #$payment_id ({$payment[member_id]},$member_id)", 3);
    if ($payment['amount'] <= 0) {
        // seems it is a trial subscription
        $db->finish_waiting_payment($payment_id, 'payready', 'free trial', '', $return);
        return array('', 1);
    }
    $member = $db->get_user($payment['member_id']);
    if (!$member) {
        return array("Member not found: #{$member_id}", -904);
    }
    $cc_number = amember_decrypt($member['data']['cc-hidden']);
    $cc_expire = $member['data']['cc-expire'];
    $cc_type = $member['data']['cc_type'];
    $product = $db->get_product($payment['product_id']);
    ///// !!! run transaction
    $url_proc = "https://www.payready.net/DMTransaction.asp";
    if (!$_SESSION['_amember_payment_try'] || $_SESSION['_amember_payment_try'] > 87) {
        $_SESSION['_amember_payment_try'] = 65;
    }
    $vars = array("txtPayReadyID" => urlencode($this_config['login']), "txtTotalAmount" => $payment['amount'], "txtOrderDescription" => urlencode($product['title']), "txtShowTranPage" => 0, "txtResponseURL" => "TextOnly", "txtCreditCardType" => $cc_type, "txtCreditCardNumber" => $cc_number, "txtCreditCardExpirationMonth" => substr($cc_expire, 0, 2), "txtCreditCardExpirationYear" => substr($cc_expire, 2, 2), "txtEmail" => urlencode($member['email']), "txtConsumerID" => $member_id, "txtInvoiceNumber" => urlencode($payment_id . ' ' . strtolower(chr($_SESSION['_amember_payment_try']++))), "txtConsumerFirstName" => urlencode($member['data']['cc_name_f']), "txtConsumerLastName" => urlencode($member['data']['cc_name_l']));
    //    if ($_SESSION['_amember_card_code'])
    //        $vars['txtCard_Code'] = $_SESSION['_amember_card_code'];
    //    $_SESSION['_amember_card_code'] = '';
    //    unset($_SESSION['_amember_card_code']);
    $vars = $vars + array("txtBillingStreet" => urlencode($member['data']['cc_street']), "txtBillingCity" => urlencode($member['data']['cc_city']), "txtBillingState" => urlencode($member['data']['cc_state']), "txtBillingZip" => urlencode($member['data']['cc_zip']), "txtBillingCountry" => urlencode($member['data']['cc_country']));
    $vars['txtPhone'] = urlencode($member['data']['cc_phone']);
    foreach ($vars as $kk => $vv) {
        $v = urlencode($vv);
        $k = urlencode($kk);
        $vars1[] = "{$kk}={$vv}";
    }
    $vars_cc = $vars;
    $vars_cc['txtCreditCardNumber'] = $member['data']['cc'];
    $payment['data'][] = $vars_cc;
    $db->update_payment($payment_id, $payment);
    $buffer = payready_get_url($url_proc, join('&', $vars1));
    $res = explode('&', $buffer);
    foreach ($res as $k => $v) {
        $res[$k] = urldecode($v);
    }
    $return = $res;
    $return['RESULT'] = $res[2];
    $return['RESPMSG'] = $res[45];
    $return['AVS'] = $res[5];
    $return['PNREF'] = $res[1];
    if ($return['RESULT'] == '0') {
        $return['RESULT'] = 1;
    } elseif ($return['RESULT'] == 1) {
        $return['RESULT'] = 2;
    } else {
        $return['RESULT'] = 3;
    }
    ////////////// check transaction result   ////////////////////////////
    if (!isset($return['RESULT'])) {
        $db->log_error("Empty result, payment handling failed #{$payment_id}");
        return array(_PLUG_PAY_PAYRDY_ERROR13, 3);
    } elseif ($return['RESULT'] == 1) {
        $db->finish_waiting_payment($payment_id, 'payready', $return['PNREF'], '', $return);
        return array('', $return['RESULT']);
    } elseif ($return['RESULT'] == 2) {
        $m = $db->get_user($member_id);
        $member['data']['cc-hidden'] = '';
        $member['data']['cc-expire'] = '';
        $member['data']['cc'] = '';
        $db->update_user($member_id, $m);
        $payment['data'][] = $return;
        $db->update_payment($payment_id, $payment);
        return array($return['RESPMSG'], $return['RESULT']);
    } else {
        //$return > 2 or unknown
        return array(_PLUG_PAY_PAYRDY_ERROR14 . ($return['RESPMSG'] ? $return['RESPMSG'] : $buffer), $return['RESULT']);
    }
    return array($return['RESPMSG'], $return['RESULT']);
    //dummy!
}
Exemplo n.º 3
0
function do_main()
{
    global $t, $db, $config, $vars;
    $cc_fields = array('street', 'city', 'state', 'zip', 'country');
    if ($config['cc_name']) {
        $cc_fields[] = 'name';
    }
    if ($config['cc_company']) {
        $cc_fields[] = 'company';
    }
    if ($config['cc_name_f']) {
        $cc_fields[] = 'name_f';
    }
    if ($config['cc_name_l']) {
        $cc_fields[] = 'name_l';
    }
    if ($config['cc_phone']) {
        $cc_fields[] = 'phone';
    }
    if ($vars['cc_code']) {
        $_SESSION['_amember_card_code'] = $vars['cc_code'];
    }
    $t->assign('renew_cc', $vars['renew_cc']);
    ///
    $member_id = intval($vars['member_id']);
    if (!$member_id) {
        $member_id = $_SESSION['_amember_id'];
    }
    if (!$member_id) {
        fatal_error(_PLUG_PAY_INETCOM_FERROR);
    }
    if ($vars['renew_cc']) {
        // cc info renewal, require auth, don't req. payment_id
        if ($member_id != $_SESSION['_amember_id']) {
            fatal_error(_PLUG_PAY_INETCOM_FERROR2, 0);
        }
    } else {
        //regular payment
        $payment_id = intval($vars['payment_id']);
        if (!$payment_id) {
            fatal_error(_PLUG_PAY_INETCOM_FERROR3);
        }
    }
    $db->log_error("member_id={$member_id},{$_SESSION[_amember_id]}");
    $member = $db->get_user($member_id);
    /// use old info if it's possible
    if (!$vars['renew_cc'] && !$vars['retry'] && $member['data']['cc-hidden'] && $member['data']['cc-expire'] > 0) {
        if ($vars['cc_number'] || $vars['cc_expire_Month'] || $vars['cc_expire_Year']) {
        } else {
            $vars['cc_number'] = amember_decrypt($member['data']['cc-hidden']);
            $vars['cc_expire_Month'] = intval(substr($member['data']['cc-expire'], 0, 2));
            $vars['cc_expire_Year'] = 2000 + intval(substr($member['data']['cc-expire'], 2, 2));
            foreach ($cc_fields as $f) {
                $vars['cc_' . $f] = $member['data']['cc_' . $f];
            }
            $vars['do_cc'] = 1;
        }
    }
    while ($vars['do_cc']) {
        // validate cc_vars
        $error = validate_cc_info($vars);
        if ($error) {
            break;
        }
        // get member
        $m = $db->get_user($member_id);
        if (!is_array($m)) {
            fatal_error(sprintf(_PLUG_PAY_INETCOM_FERROR4, $member_id, $payment_id));
        }
        $m['data']['cc-hidden'] = amember_crypt($vars['cc_number']);
        $m['data']['cc'] = get_visible_cc_number($vars['cc_number']);
        $m['data']['cc-expire'] = sprintf('%02d%02d', $vars['cc_expire_Month'], substr($vars['cc_expire_Year'], 2, 2));
        foreach ($cc_fields as $f) {
            $m['data']['cc_' . $f] = $vars['cc_' . $f];
        }
        $db->update_user($m['member_id'], $m);
        //        print_r($_POST);
        //        print_r($_GET);
        //        print_r($_SESSION);
        //        print_r($m);
        //        exit();
        ////// skip real payment if renew cc specified ///////////////
        if ($vars['renew_cc']) {
            header("Location: {$config['root_surl']}/member.php?cc_renew_done=1");
        } else {
            header("Location: {$config['root_surl']}/plugins/payment/theinternetcommerce/cc.php?" . "do_payment=1&payment_id={$payment_id}&member_id={$member_id}");
        }
        exit;
    }
    $t->assign('error', $error);
    if ($vars['payment_id']) {
        $payment = $db->get_payment($vars['payment_id']);
        $t->assign('payment', $payment);
    }
    /// handle address
    $cc_address = array();
    foreach ($cc_fields as $f) {
        $v = $vars['cc_' . $f];
        if (!isset($vars['cc_' . $f])) {
            if (!$v) {
                $v = $member['data']['cc_' . $f];
            }
            if (!$v) {
                $v = $member[$f];
            }
            if (!$v && $f == 'name') {
                $v = $member['name_f'] . ' ' . $member['name_l'];
            }
            if (!$v && $f == 'phone') {
                $v = $member['data']['phone'];
            }
            if (!$v && $f == 'company') {
                $v = $member['data']['company'];
            }
        }
        $cc_address['cc_' . $f] = $v;
    }
    $t->assign('cc_address', $cc_address);
    $t->display('cc/cc_info.html');
}
Exemplo n.º 4
0
function theinternetcommerce_payment($payment_id, $member_id)
{
    set_time_limit(600);
    ignore_user_abort(true);
    // first prepare all variables
    global $db, $config, $plugin_config;
    $this_config = $plugin_config['payment']['theinternetcommerce'];
    if (!$this_config['login']) {
        fatal_error("No username configured for TheInternetCommerce");
    }
    if (!$this_config['pass']) {
        fatal_error("No transaction key configured for TheInternetCommerce");
    }
    $payment = $db->get_payment($payment_id);
    if (!$payment) {
        return array(sprintf(_PLUG_PAY_INETCOM_ERROR10, $payment_id), -900);
    }
    if ($payment['completed']) {
        return array(sprintf(_PLUG_PAY_INETCOM_ERROR11, $payment_id), -901);
    }
    if ($payment['paysys_id'] != 'theinternetcommerce') {
        return array(sprintf(_PLUG_PAY_INETCOM_ERROR12, $payment[paysys_id], $payment_id), -902);
    }
    //    if ($payment['member_id'] != $member_id)
    //        return array("Payment created for another member: #$payment_id ({$payment[member_id]},$member_id)", -903);
    if ($payment['amount'] <= 0) {
        // seems it is a trial subscription
        $db->finish_waiting_payment($payment_id, 'theinternetcommerce', 'free trial', '', $return);
        return array('', 1);
    }
    $member = $db->get_user($payment['member_id']);
    if (!$member) {
        return array(sprintf(_PLUG_PAY_INETCOM_ERROR13, $member_id), -904);
    }
    $cc_number = amember_decrypt($member['data']['cc-hidden']);
    $cc_expire = $member['data']['cc-expire'];
    $product = $db->get_product($payment['product_id']);
    ///// !!! run transaction
    $MerchantID = $this_config['login'];
    $Password = $this_config['pass'];
    #############################################################
    $Amount = $payment['amount'];
    $MerchantDesc = $product['title'];
    $CustomerEmail = $member['email'];
    $Var1 = $member['data']['cc_name_f'] . " " . $member['data']['cc_name_l'];
    $Var2 = $member['email'];
    $Var3 = $product['title'];
    $Var4 = "{$member[cc_street]} {$member[cc_city]} {$member[cc_zip]} {$member[cc_country]}";
    $Var5 = "{$comments}";
    $Var6 = "{$keeplog}";
    $Var7 = "Server Time: {$timestamp}";
    $Var8 = "IP: {$REMOTE_ADDR}";
    $Var9 = "Host: {$REMOTE_HOST}";
    $CCN = $cc_number;
    $Expdate = $cc_expire;
    #$CVCCVV = "123";
    $CVCCVV = $_SESSION['_amember_card_code'];
    $InstallmentOffset = 0;
    $InstallmentPeriod = 0;
    include "inc_newtransaction.php";
    ////////////// check transaction result   ////////////////////////////
    if ($INCREDIBLE_CLEARANCE_STATUS == 0) {
        $db->finish_waiting_payment($payment_id, 'theinternetcommerce', $return['PNREF'], '', $return);
        return array('', 1);
    } else {
        return array("{$INCREDIBLE_CLEARANCE_STATUS}: {$INCREDIBLE_CLEARANCE_ERROR}", 2);
    }
    return array($return['RESPMSG'], $return['RESULT']);
    //dummy!
}
Exemplo n.º 5
0
function netbilling_payment($payment_id, $member_id)
{
    set_time_limit(600);
    ignore_user_abort(true);
    // first prepare all variables
    global $db, $config, $plugin_config;
    $this_config = $plugin_config['payment']['netbilling'];
    if (!$this_config['login']) {
        fatal_error(_PLUG_PAY_NETBILLING_FERROR5);
    }
    $payment = $db->get_payment($payment_id);
    if (!$payment) {
        return array(sprintf(_PLUG_PAY_NETBILLING_PNOTFOUND, $payment_id), -900);
    }
    if ($payment['completed']) {
        return array(sprintf(_PLUG_PAY_NETBILLING_PCOMPLETED, $payment_id), 3);
    }
    if ($payment['paysys_id'] != 'netbilling') {
        return array(_PLUG_PAY_NETBILLING_ANOTHERPSYS . " '{$payment['paysys_id']}' (#{$payment_id})", 3);
    }
    if ($payment['member_id'] != $member_id) {
        return array(sprintf(_PLUG_PAY_NETBILLING_ANOTHERMEMBER, $payment_id), 3);
    }
    $member = $db->get_user($payment['member_id']);
    if (!$member) {
        return array(sprintf(_PLUG_PAY_NETBILLING_MEMNOTFOUND, $member_id), -904);
    }
    $cc_number = amember_decrypt($member['data']['cc-hidden']);
    $cc_expire = $member['data']['cc-expire'];
    ///// !!! run transaction
    $url_proc = "https://secure.netbilling.com/gw/native/direct2.1";
    if (!$_SESSION['_amember_payment_try'] || $_SESSION['_amember_payment_try'] > 87) {
        $_SESSION['_amember_payment_try'] = 65;
    }
    $vars = array("GEN_ACCOUNT" => $this_config['login'], "GEN_AMOUNT" => $payment['amount'], "GEN_TRANS_TYPE" => "SALE", "GEN_PAYMENT_TYPE" => "C", "GEN_USER_DATA" => "payment#: {$payment_id}", "CARD_NUMBER" => $cc_number, "CARD_EXPIRE" => $cc_expire, "CUST_PHONE" => $member['data']['phone'], "CUST_EMAIL" => $member['email'], "CUST_NAME1" => $member['data']['cc_name_f'], "CUST_NAME2" => $member['data']['cc_name_l'], "CUST_ADDR_STREET" => $member['data']['cc_street'], "CUST_ADDR_CITY" => $member['data']['cc_city'], "CUST_ADDR_STATE" => $member['data']['cc_state'], "CUST_ADDR_ZIP" => $member['data']['cc_zip'], "CUST_ADDR_COUNTRY" => $member['data']['cc_country']);
    if ($_SESSION['_amember_card_code']) {
        $vars['CARD_CVV2'] = $_SESSION['_amember_card_code'];
    }
    $_SESSION['_amember_card_code'] = '';
    unset($_SESSION['_amember_card_code']);
    $vars = $vars + array();
    foreach ($vars as $kk => $vv) {
        $v = urlencode($vv);
        $k = urlencode($kk);
        $vars1[] = "{$kk}={$vv}";
    }
    $vars_cc = $vars;
    $vars_cc['CARD_NUMBER'] = $member['data']['cc'];
    unset($vars_cc['CARD_CVV2']);
    $payment['data'][] = $vars_cc;
    $db->update_payment($payment_id, $payment);
    $buffer = netbilling_get_url($url_proc, join('&', $vars1));
    parse_str($buffer, $res);
    $return = $res;
    $return['RESULT'] = $res['RET_STATUS'] == 1 ? 1 : 2;
    $return['RESPMSG'] = $res['RET_AUTH_MSG'];
    $return['AVS'] = $res['RET_AVS_CODE'];
    $return['PNREF'] = $res['RET_TRANS_ID'];
    $return['CVV_VALID'] = $res['RET_CVV2_CODE'];
    ////////////// check transaction result   ////////////////////////////
    if (!isset($return['RESULT'])) {
        $db->log_error("Empty result, payment handling failed #{$payment_id}");
        return array(_PLUG_PAY_NETBILLING_EMPTYRES, 3);
    } elseif ($return['RESULT'] == 1) {
        $db->finish_waiting_payment($payment_id, 'netbilling', $return['PNREF'], '', $return);
        return array('', $return['RESULT']);
    } elseif ($return['RESULT'] == 2) {
        if (0) {
            $m = $db->get_user($member_id);
            $member['data']['cc-hidden'] = '';
            $member['data']['cc-expire'] = '';
            $member['data']['cc'] = '';
            $db->update_user($member_id, $m);
        }
        $payment['data'][] = $return;
        $db->update_payment($payment_id, $payment);
        return array($return['RESPMSG'], $return['RESULT']);
    } else {
        //$return > 2 or unknown
        $payment['data'][] = $return;
        $db->log_error($return['RESPMSG']);
        $db->update_payment($payment_id, $payment);
        return array("Payment processor error: " . ($return['RESPMSG'] ? $return['RESPMSG'] : $buffer), $return['RESULT']);
    }
    return array($return['RESPMSG'], $return['RESULT']);
    //dummy!
}
Exemplo n.º 6
0
function cc_core_rebill($plugin, $dat = '', $running_from_cron = true, $repeat_declined = false)
{
    global $config, $db, $t;
    if (!$config['use_cron'] && $running_from_cron) {
        $db->log_error("{$plugin} rebill can be run only with external cron");
    }
    $amDb =& amDb();
    if ($dat == '') {
        $dat = date('Y-m-d');
    }
    $tomorrow = date('Y-m-d', strtotime($dat) + 3600 * 24);
    $pl =& instantiate_plugin('payment', $plugin);
    if (!method_exists($pl, 'cc_bill')) {
        fatal_error("This plugin ({$plugin}) is not handled by cc_core!");
    }
    // check if another rebilling process is active
    // last status_tm / added_tm in rebill_log is < 5 minutes ago
    // to avoiding starting new process while a PHP rebill script runned
    // less than 10 minutes ago is still running
    if ($running_from_cron) {
        if ($last_rebill_log_id = $amDb->selectCell("SELECT MAX(rebill_log_id) FROM ?_rebill_log")) {
            $last_tm_diff = $amDb->selectCell("SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(IFNULL(status_tm, added_tm)) \n\t\t\t\tFROM ?_rebill_log WHERE rebill_log_id=?", $last_rebill_log_id);
            if ($last_tm_diff < 5 * 60) {
                $db->log_error("[Notice] cc_core_rebill({$plugin}, {$dat}) skipped because previous rebilling process still working ({$last_tm_diff} seconds ago)");
                return;
            }
        }
        print ".\n";
        // to avoid Apache's timeout
    }
    $payments = $db->get_expired_payments($dat, $dat, $plugin);
    $renewed = array();
    $log = "{$plugin} Rebill\n";
    foreach ($payments as $p) {
        if ($p['data']['CANCELLED']) {
            continue;
        }
        $member_id = $p['member_id'];
        $member = $db->get_user($member_id);
        $product_id = $p['product_id'];
        if ($renewed[$member_id][$product_id]++) {
            continue;
        }
        $product =& get_product($product_id);
        if (!$product->config['is_recurring']) {
            continue;
        }
        if ($product->config['rebill_times'] && !cc_core_check_rebill_times($product->config['rebill_times'], $p)) {
            continue;
        }
        // check if we've already tried to rebill the customer today
        $check = $repeat_declined ? "SUM(status = 0)" : "MAX(status IS NOT NULL)";
        if ($amDb->selectCell("SELECT {$check} FROM ?_rebill_log\n\t\t\tWHERE payment_id = ? AND payment_date = ? ", $p['payment_id'], $dat)) {
            // retry on payment processor failure? todo, real tests needed
            continue;
        }
        $vars = array('RENEWAL_ORIG' => "RENEWAL_ORIG: {$p['payment_id']}");
        $pc =& new PriceCalculator();
        $pc->setTax(get_member_tax($member_id));
        $coupon_code = $p['data'][0]['COUPON_CODE'];
        if ($config['use_coupons'] && $coupon_code != '') {
            $coupon = $db->coupon_get($coupon_code, null, 1);
            if ($coupon['coupon_id'] && $coupon['is_recurring']) {
                $pc->setCouponDiscount($coupon['discount'], split(',', trim($coupon['product_id'])));
                $vars['COUPON_CODE'] = $coupon_code;
            }
        }
        $pc->addProduct($product_id);
        $terms =& $pc->calculate();
        $additional_values = array();
        $additional_values['COUPON_DISCOUNT'] = $terms->discount;
        $additional_values['TAX_AMOUNT'] = $terms->tax;
        $payment_id = $db->add_waiting_payment($member_id, $product_id, $plugin, $terms->total, $dat, $product->get_expire($dat), $vars, $additional_values);
        $rebill_log_id = $amDb->query("INSERT INTO ?_rebill_log \n\t\t(payment_id, added_tm, payment_date, amount, rebill_payment_id)\n\t\tVALUES\n\t\t(?d, ?, ?, ?f, ?d)", $p['payment_id'], date('Y-m-d H:i:s'), $dat, $terms->total, $payment_id);
        $payment = $db->get_payment($payment_id);
        $cc_info = $member['data'];
        $cc_info['cc_number'] = amember_decrypt($cc_info['cc-hidden']);
        $x = list($res, $err_msg, $receipt_id, $log) = $pl->cc_bill($cc_info, $member, $payment['amount'], $product->config[$payment['paysys_id'] . '_currency'], $product->config['title'], CC_CHARGE_TYPE_RECURRING, $payment['payment_id'], $payment);
        foreach ($log as $v) {
            $payment['data'][] = $v;
        }
        $db->update_payment($payment['payment_id'], $payment);
        $amDb->query("UPDATE ?_rebill_log \n        \tSET status = ?, status_tm = ?, status_msg = ? \n        \tWHERE rebill_payment_id = ?d", $res, date('Y-m-d H:i:s'), $err_msg, $payment_id);
        switch ($res) {
            case CC_RESULT_SUCCESS:
                $err = $db->finish_waiting_payment($payment['payment_id'], $payment['paysys_id'], $receipt_id, $payment['amount'], '', cc_core_get_payer_id($vars, $member));
                if ($err) {
                    $db->log_error($err . ": payment_id = {$payment['payment_id']} (rebilling)");
                }
                if ($config['cc_rebill_success']) {
                    mail_rebill_success_member($member, $payment_id, $product);
                }
                break;
            case CC_RESULT_INTERNAL_ERROR:
            case CC_RESULT_DECLINE_TEMP:
                if ($pl->config['reattempt'] != '') {
                    $new_expire = cc_core_prorate_subscription($p['payment_id'], $pl->config['reattempt'], $dat);
                }
                if ($config['cc_rebill_failed']) {
                    mail_rebill_failed_member($member, $payment_id, $product, "{$err_msg}", $new_expire);
                }
                if ($config['cc_rebill_failed_admin']) {
                    mail_rebill_failed_admin($member, $payment_id, $product, "{$err_msg}", $new_expire);
                }
                break;
            case CC_RESULT_DECLINE_PERM:
                if ($pl->config['reattempt'] != '') {
                    $new_expire = cc_core_prorate_subscription($p['payment_id'], $pl->config['reattempt'], $dat);
                }
                if ($config['cc_rebill_failed']) {
                    mail_rebill_failed_member($member, $payment_id, $product, "{$err_msg}", $new_expire);
                }
                if ($config['cc_rebill_failed_admin']) {
                    mail_rebill_failed_admin($member, $payment_id, $product, "{$err_msg}", $new_expire);
                }
                //            clean_cc_info($member);
                break;
            case CC_RESULT_IGNORE:
                break;
            default:
                $db->log_error("Unknown return from plugin_bill: {$res}");
        }
    }
}
Exemplo n.º 7
0
function do_main()
{
    global $t, $db, $config, $vars;
    if ($vars['cc_code']) {
        $_SESSION['_amember_card_code'] = $vars['cc_code'];
    }
    $t->assign('renew_cc', $vars['renew_cc']);
    ///
    $member_id = intval($vars['member_id']);
    if (!$member_id) {
        $member_id = $_SESSION['_amember_id'];
    }
    if (!$member_id) {
        fatal_error("Member ID isn't specified");
    }
    if ($vars['renew_cc']) {
        // cc info renewal, require auth, don't req. payment_id
        if ($member_id != $_SESSION['_amember_id']) {
            fatal_error("You must be autorized to do it", 0);
        }
    } else {
        //regular payment
        $payment_id = intval($vars['payment_id']);
        if (!$payment_id) {
            fatal_error("Payment ID isn't specified");
        }
    }
    $db->log_error("member_id={$member_id},{$_SESSION[_amember_id]}");
    $member = $db->get_user($member_id);
    /// use old info if it's possible
    if (!$vars['renew_cc'] && !$vars['retry'] && $member['data']['cc-hidden'] && $member['data']['cc-expire'] > 0) {
        if ($vars['cc_number'] || $vars['cc_expire_Month'] || $vars['cc_expire_Year']) {
        } else {
            $vars['cc_number'] = amember_decrypt($member['data']['cc-hidden']);
            $vars['cc_expire_Month'] = intval(substr($member['data']['cc-expire'], 0, 2));
            $vars['cc_expire_Year'] = 2000 + intval(substr($member['data']['cc-expire'], 2, 2));
            foreach (array('street', 'city', 'state', 'zip', 'country') as $f) {
                $vars['cc_' . $f] = $member['data']['cc_' . $f];
            }
            $vars['do_cc'] = 1;
        }
    }
    while ($vars['do_cc']) {
        // validate cc_vars
        $error = validate_cc_info($vars);
        if ($error) {
            break;
        }
        // get member
        $m = $db->get_user($member_id);
        if (!is_array($m)) {
            fatal_error("Can not load member record #{$member_id} ({$payment_id})");
        }
        $m['data']['cc-hidden'] = amember_crypt($vars['cc_number']);
        $m['data']['cc'] = get_visible_cc_number($vars['cc_number']);
        $m['data']['cc-expire'] = sprintf('%02d%02d', $vars['cc_expire_Month'], substr($vars['cc_expire_Year'], 2, 2));
        foreach (array('street', 'city', 'state', 'zip', 'country') as $f) {
            $m['data']['cc_' . $f] = $vars['cc_' . $f];
        }
        $db->update_user($m['member_id'], $m);
        ////// skip real payment if renew cc specified ///////////////
        if ($vars['renew_cc']) {
            header("Location: {$config['root_surl']}/member.php?cc_renew_done=1");
        } else {
            header("Location: {$config['root_surl']}/plugins/payment/efsnet/cc.php?" . "do_payment=1&payment_id={$payment_id}&member_id={$member_id}");
        }
        exit;
    }
    $t->assign('error', $error);
    if ($vars['payment_id']) {
        $payment = $db->get_payment($vars['payment_id']);
        $t->assign('payment', $payment);
    }
    /// handle address
    $cc_address = array();
    foreach (array('street', 'city', 'state', 'zip', 'country') as $f) {
        $v = $vars['cc_' . $f];
        if (!isset($vars['cc_' . $f])) {
            if (!$v) {
                $v = $member['data']['cc_' . $f];
            }
            if (!$v) {
                $v = $member[$f];
            }
        }
        $cc_address['cc_' . $f] = $v;
    }
    $t->assign('cc_address', $cc_address);
    $t->display('cc/cc_info.html');
}
Exemplo n.º 8
0
 function process_postback($vars)
 {
     global $db;
     $this->config['disable_postback_log'] = 1;
     $vars['PaRes'] = urlencode($vars['PaRes']);
     $vars['MD'] = urlencode($vars['MD']);
     $log = array();
     $log[] = $vars;
     $s = cc_core_get_url("https://www.beanstream.com/scripts/process_transaction_auth.asp" . "?PaRes={$vars['PaRes']}&MD={$vars['MD']}");
     parse_str($s, $ret);
     $log[] = $ret;
     if ($ret['trnApproved']) {
         $x = array(CC_RESULT_SUCCESS, "", $ret['trnId'], $log);
     } else {
         if ($ret['errorType'] == 'S') {
             $x = array(CC_RESULT_INTERNAL_ERROR, $ret['messageText'], "", $log);
         } else {
             $x = array(CC_RESULT_DECLINE_PERM, $ret['messageText'], "", $log);
         }
     }
     list($res, $err_msg, $receipt_id, $log) = $x;
     $payment = $db->get_payment($ret['trnOrderNumber']);
     $member = $db->get_user($payment['member_id']);
     foreach ($log as $v) {
         $payment['data'][] = $v;
     }
     $db->update_payment($payment['payment_id'], $payment);
     if ($res == CC_RESULT_SUCCESS) {
         $cc_info = array('cc_number' => amember_decrypt($member['cc-hidden']));
         $err = $db->finish_waiting_payment($payment['payment_id'], $payment['paysys_id'], $receipt_id, $payment['amount'], '', cc_core_get_payer_id($cc_info, $member));
         if ($err) {
             fatal_error($err . ": payment_id = {$payment['payment_id']}");
         }
         /// save cc info to db
         //            if ($charge_type != CC_CHARGE_TYPE_REGULAR){
         //                save_cc_info($cc_info, $member, $payment['paysys_id']);
         //            }
         /// display thanks page
         $product = $db->get_product($payment['product_id']);
         $t =& new_smarty();
         $t->assign('payment', $payment);
         if ($payment) {
             $t->assign('product', $db->get_product($payment['product_id']));
             $t->assign('member', $db->get_user($payment['member_id']));
         }
         if (!($prices = $payment['data'][0]['BASKET_PRICES'])) {
             $prices = array($payment['product_id'] => $payment['amount']);
         }
         $pr = array();
         $subtotal = 0;
         foreach ($prices as $product_id => $price) {
             $v = $db->get_product($product_id);
             //		        $v['price'] = $price;
             $subtotal += $v['price'];
             $pr[$product_id] = $v;
         }
         $t->assign('subtotal', $subtotal);
         $t->assign('total', array_sum($prices));
         $t->assign('products', $pr);
         $t->display("thanks.html");
     } else {
         $member = $db->get_user($payment['member_id']);
         $v = get_cc_info_hash($member, $action = "mfp");
         $_GET = $_POST = $vars = array('action' => 'mfp', 'payment_id' => $payment['payment_id'], 'paysys_id' => $payment['paysys_id'], 'member_id' => $member_id, 'v' => $v);
         global $t;
         $t = new_smarty();
         foreach ($vars as $k => $v) {
             $t->_smarty_vars['request'][$k] = $v;
         }
         ask_cc_info($member, $payment, $vars, 0, array(_PLUG_PAY_BEANSTREAM_PFAILED . $err_msg));
     }
 }