Example #1
0
function respond_financial_request()
{
    $response = new JAK8583();
    global $data_element;
    $bal_txn = 0;
    $account = sprintf('%.0f', $data_element[2]);
    $processing_code = $data_element[3];
    $amount = sprintf('%.0f', $data_element[4]);
    $amount = $amount / 100;
    $terminalNumber = $data_element[41];
    $encr_pin = $data_element[52];
    $transaction_code = substr($processing_code, 0, 2);
    $account_type = substr($processing_code, 2, 2);
    $client = new Client();
    $client->principal_type = "USER";
    $client->principal = substr(preg_replace("/^23450/", "", $account), 0, strlen(preg_replace("/^23450/", "", $account)) - 1);
    //Decrypt pin
    $pin = file_get_contents("http://154.0.130.42/decrypt.php?account={$account}&pin={$encr_pin}");
    $client->pin = $pin;
    //should decrypt first
    $data = $client->getMember();
    $data1 = $client->checkCredentials();
    if (isset($data->return->id)) {
        $bal_inquiry = $client->getAccountStatus();
        var_dump($bal_inquiry);
        if ($transaction_code == '31') {
            // Balance enquiry
            $balance = round($bal_inquiry->balance) * 100;
            $bal_txn = 1;
            $response_code = "00";
        } else {
            if (!isset($data->return->id)) {
                $response_code = "14";
            } elseif ($data1->return != "VALID") {
                if ($data1->return == "INVALID") {
                    $response_code = "55";
                    //Incorrect personal identification number
                } elseif ($data1->return == "BLOCKED") {
                    $response_code = "38";
                    //Allowable PIN tries exceeded, capture
                }
            } elseif ($amount > round($bal_inquiry->balance)) {
                $response_code = "13";
            } else {
                //do the transaction here
                if ($transaction_code == "01") {
                    //cash withdrawal
                    $stan = $data_element[11];
                    $link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
                    mysql_select_db(DB_NAME, $link) or die(mysql_error());
                    $records = mysql_query("SELECT * FROM interswitch_status WHERE stan='{$stan}' AND account='{$account}' AND date > DATE_SUB(NOW(), INTERVAL 24 HOUR)\n  AND date <= NOW()");
                    //check if we have a transaction with the same account and stan within 24hrs
                    if (mysql_num_rows($records) == 0) {
                        $payment = new Payment();
                        $payment->fromMemberPrincipalType = "USER";
                        $payment->fromMember = substr(preg_replace("/^23450/", "", $account), 0, strlen(preg_replace("/^23450/", "", $account)) - 1);
                        $payment->toMemberPrincipalType = "USER";
                        $payment->toMember = "interswitch";
                        $payment->amount = $amount;
                        $payment->description = "ATM Withdrawal";
                        $payment->transferTypeId = 33;
                        $payment->setTerminal($terminalNumber);
                        $payment_data = $payment->doPayment();
                        if (isset($payment_data->return)) {
                            if ($payment_data->return->status == "PROCESSED") {
                                $response_code = "00";
                                $transfer_id = $payment_data->return->transfer->id;
                                //lets add this to the db incase we have to chargeback  later
                                //status codes(00:ok, 01:charged_back,02:chargeback failed)
                                $query = mysql_query("INSERT INTO interswitch_status (stan, transfer_id, status_code,account) VALUES('{$stan}','{$transfer_id}','00',{$account})") or die(mysql_error());
                            } else {
                                //the transfer failed. send back appropriate response
                                $response_code = "06";
                            }
                        }
                    } else {
                        $response_code = "94";
                        //duplicate transmission
                    }
                }
            }
        }
    }
    $response->addMTI("0210");
    $response->addData(2, $account);
    $response->addData(3, $data_element[3]);
    $response->addData(4, $data_element[4]);
    if (!empty($data_element[5])) {
        $response->addData(5, $data_element[5]);
    }
    $response->addData(7, $data_element[7]);
    if (!empty($data_element[9])) {
        $response->addData(9, $data_element[9]);
    }
    $response->addData(11, $data_element[11]);
    $response->addData(12, $data_element[12]);
    $response->addData(13, $data_element[13]);
    if (!empty($data_element[14])) {
        $response->addData(14, $data_element[14]);
    }
    if (!empty($data_element[15])) {
        $response->addData(15, $data_element[15]);
    }
    if (!empty($data_element[18])) {
        $response->addData(18, $data_element[18]);
    }
    if (!empty($data_element[28])) {
        $response->addData(28, $data_element[28]);
    }
    $response->addData(32, $data_element[32]);
    $response->addData(37, $data_element[37]);
    $response->addData(39, $response_code);
    if (!empty($data_element[41])) {
        $response->addData(41, $data_element[41]);
    }
    $response->addData(49, $data_element[49]);
    if (!empty($data_element[50])) {
        $response->addData(50, $data_element[50]);
    }
    if ($bal_txn == 1) {
        $balance_text = sprintf("2001800C%012.0f2002800C%012.0f", $balance, $balance);
        $response->addData(54, $balance_text);
    }
    if (!empty($data_element[102])) {
        $response->addData(102, $data_element[102]);
    }
    print "Response is: ";
    print_r($response->getData());
    return $response->getISO();
}