Version: 1.0
Type: Class
Category: Money
License: GNU General Public License
Description: The new ECHO-PHP Class is now available. ECHO-PHP Class drives all types of real-time credit card and check transactions using ECHO merchant processings free secure payment gateway and open-source real-time software. Supports system check, address verification, authorization and deposit, deposit, credit, commercial card, electronic check debit, and more. The new ECHO-PHP Class makes it easier than ever to connect to ECHO using this popular server-side, cross-platform, HTML embedded scripting language. Ideal for all commerce applications. Perfect for ISP/IPPs to use for billing their clients, since this supports electronic checks as well.
<?php /*==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-*/ // // // Name: ECHOPHP v1.4 // // Description: PHP Class used to interface with // // ECHO (http://www.echo-inc.com). // // Requirements: cURL - http://curl.haxx.se/ // // OpenSSL - http://www.openssl.org // // Refer to ECHO's documentation for more info // // https://wwws.echo-inc.com // // // /*==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-*/ class EchoPHP { var $order_type; var $transaction_type; var $merchant_echo_id; var $merchant_pin; var $isp_echo_id; var $isp_pin; var $authorization; var $billing_ip_address; var $billing_prefix; var $billing_name; var $billing_address1; var $billing_address2; var $billing_city; var $billing_state; var $billing_zip; var $billing_country; var $billing_phone; var $billing_fax; var $billing_email; var $cc_number; var $ccexp_month; var $ccexp_year; var $counter; var $debug; var $ec_account; var $ec_address1; var $ec_address2; var $ec_bank_name; var $ec_business_acct; var $ec_city; var $ec_email; var $ec_first_name; var $ec_id_country; var $ec_id_exp_mm; var $ec_id_exp_dd; var $ec_id_exp_yy; var $ec_id_number; var $ec_id_state; var $ec_id_type; var $ec_last_name; var $ec_license_number; var $ec_license_state; var $ec_merchant_ref; var $ec_nbds_code; var $ec_other_name; var $ec_payee; var $ec_rt; var $ec_serial_number; var $ec_state; var $ec_zip; var $grand_total; var $merchant_email; var $merchant_trace_nbr; var $original_amount; var $original_trandate_mm; var $original_trandate_dd; var $original_trandate_yyyy; var $original_reference; var $order_number; var $shipping_flag; var $status; var $shipping_prefix; var $shipping_name; var $shipping_address1; var $shipping_address2; var $shipping_city; var $shipping_state; var $shipping_zip; var $shipping_comments; var $shipping_country; var $shipping_phone; var $shipping_fax; var $shipper; var $shipper_tracking_nbr; var $track1; var $track2; var $EchoResponse; var $echotype1; var $echotype2; var $echotype3; var $openecho; var $athorization; var $reference; var $order_number; var $EchoSuccess; function Submit() { if ($this->EchoServer) { $URL = $this->EchoServer; } else { $URL = "https://wwws.echo-inc.com/scripts/INR200.EXE"; } $data = $this->getURLData(); exec("/usr/bin/curl -d "$data" $URL", $return_message_array); $this->EchoResponse = ""; // clear this for ($i = 0; $i < count($return_message_array); $i++) { $this->EchoResponse = $this->EchoResponse.$return_message_array[$i]; } $startpos = strpos($this->EchoResponse, "<ECHOTYPE1>") + 11; $endpos = strpos($this->EchoResponse, "</ECHOTYPE1>"); $this->echotype1 = substr($this->EchoResponse, $startpos, $endpos - $startpos); $startpos = strpos($this->EchoResponse, "<ECHOTYPE2>") + 11; $endpos = strpos($this->EchoResponse, "</ECHOTYPE2>"); $this->echotype2 = substr($this->EchoResponse, $startpos, $endpos - $startpos); $startpos = strpos($this->EchoResponse, "<ECHOTYPE3>") + 11; $endpos = strpos($this->EchoResponse, "</ECHOTYPE3>"); $this->echotype3 = substr($this->EchoResponse, $startpos, $endpos - $startpos); if (strpos($this->EchoResponse, "<OPENECHO>")) { $startpos = strpos($this->EchoResponse, "<OPENECHO>") + 10; $endpos = strpos($this->EchoResponse, "</OPENECHO>"); $this->openecho = substr($this->EchoResponse, $startpos, $endpos - $startpos); } // Get all the metadata. $this->GetAuthFromEcho(); $this->GetOrderNumberFromEcho(); $this->GetReferenceFromEcho(); $this->status = $this->GetEchoProp($this->echotype3, "status"); $this->EchoSuccess = !($this->status == "D"); //$this->EchoSuccess = !((stristr($this->echotype1, "DECLINED")) || (stristr($this->echotype1, "INVALID"))); // make sure we assign an integer to EchoSuccess ($this->EchoSuccess == 1) ? ($this->EchoSuccess = 1) : ($this->EchoSuccess = 0); return $this->EchoSuccess; } // function submit function getURLData() { $s .= "order_type=" . $this->order_type . "&transaction_type=" . $this->transaction_type . "&merchant_echo_id=" . $this->merchant_echo_id . "&merchant_pin=" . $this->merchant_pin . "&isp_echo_id=" . $this->isp_echo_id . "&isp_pin=" . $this->isp_pin . "&authorization=" . $this->authorization . "&billing_ip_address=" . $this->billing_ip_address . "&billing_prefix=" . $this->billing_prefix . "&billing_name=" . $this->billing_name . "&billing_address1=" . $this->billing_address1 . "&billing_address2=" . $this->billing_address2 . "&billing_city=" . $this->billing_city . "&billing_state=" . $this->billing_state . "&billing_zip=" . $this->billing_zip . "&billing_country=" . $this->billing_country . "&billing_phone=" . $this->billing_phone . "&billing_fax=" . $this->billing_fax . "&billing_email=" . $this->billing_email . "&cc_number=" . $this->cc_number . "&ccexp_month=" . $this->ccexp_month . "&ccexp_year=" . $this->ccexp_year . "&counter=" . $this->counter . "&debug=" . $this->debug . "&transaction_type=" . $this->transaction_type; if (($this->transaction_type == "DD") || ($this->transaction_type == "DC")) { $s .= "&ec_account=" . $this->ec_account . "&ec_address1=" . $this->ec_address1 . "&ec_address2=" . $this->ec_address2 . "&ec_bank_name=" . $this->ec_bank_name . "&ec_business_acct=" . $this->ec_business_acct . "&ec_city=" . $this->ec_city . "&ec_email=" . $this->ec_email . "&ec_first_name=" . $this->ec_first_name . "&ec_id_country=" . $this->ec_id_country . "&ec_id_exp_mm=" . $this->ec_id_exp_mm . "&ec_id_exp_dd=" . $this->ec_id_exp_dd . "&ec_id_exp_yy=" . $this->ec_id_exp_yy . "&ec_id_number=" . $this->ec_id_number . "&ec_id_state=" . $this->ec_id_state . "&ec_id_type=" . $this->ec_id_type . "&ec_last_name=" . $this->ec_last_name . "&ec_license_number=" . $this->ec_license_number . "&ec_license_state=" . $this->ec_license_state . "&ec_merchant_ref=" . $this->ec_merchant_ref . "&ec_nbds_code=" . $this->ec_nbds_code . "&ec_other_name=" . $this->ec_other_name . "&ec_payee=" . $this->ec_payee . "&ec_rt=" . $this->ec_rt . "&ec_serial_number=" . $this->ec_serial_number . "&ec_state=" . $this->ec_state . "&ec_zip=" . $this->ec_zip; } $s .= "&grand_total=" . $this->grand_total . "&merchant_email=" . $this->merchant_email . "&merchant_trace_nbr=" . $this->merchant_trace_nbr . "&original_amount=" . $this->original_amount . "&original_trandate_mm=" . $this->original_trandate_mm . "&original_trandate_dd=" . $this->original_trandate_dd . "&original_trandate_yyyy=" . $this->original_trandate_yyyy . "&original_reference=" . $this->original_reference . "&order_number=" . $this->order_number . "&shipping_flag=" . $this->shipping_flag . "&shipping_prefix=" . $this->shipping_prefix . "&shipping_name=" . $this->shipping_name . "&shipping_address1=" . $this->shipping_address1 . "&shipping_address2=" . $this->shipping_address2 . "&shipping_city=" . $this->shipping_city . "&shipping_state=" . $this->shipping_state . "&shipping_zip=" . $this->shipping_zip . "&shipping_comments=" . $this->shipping_comments . "&shipping_country=" . $this->shipping_country . "&shipping_phone=" . $this->shipping_phone . "&shipping_fax=" . $this->shipping_fax . "&shipper=" . $this->shipper . "&shipper_tracking_nbr=" . $this->shipper_tracking_nbr . "&track1=" . $this->track1 . "&track2=" . $this->track2; return $s; } // end getURLData /********************************************** All the get/set methods for the echo properties ***********************************************/ function set_order_type($value) { $this->order_type = $value; } function get_order_type() { return $this->order_type; } function set_transaction_type($value) { $this->transaction_type = $value; } function get_transaction_type() { return $this->transaction_type; } function set_merchant_echo_id($value) { $this->merchant_echo_id = urlencode($value); } function get_merchant_echo_id() { return $this->merchant_echo_id; } function set_merchant_pin($value) { $this->merchant_pin = urlencode($value); } function get_merchant_pin() { return $this->merchant_pin; } function set_isp_echo_id($value) { $this->isp_echo_id = urlencode($value); } function get_isp_echo_id() { return $this->isp_echo_id; } function set_isp_pin($value) { $this->isp_pin = urlencode($value); } function get_isp_pin() { return $this->isp_pin; } function set_authorization($value) { $this->authorization = $value; } function get_authorization() { return $this->authorization; } function set_billing_ip_address($value) { $this->billing_ip_address = $value; } function get_billing_ip_address() { return $this->billing_ip_address; } function set_billing_prefix($value) { $this->billing_prefix = urlencode($value); } function get_billing_prefix() { return $this->billing_prefix; } function set_billing_name($value) { $this->billing_name = urlencode($value); } function get_billing_name() { return $this->billing_name; } function set_billing_address1($value) { $this->billing_address1 = urlencode($value); } function get_billing_address1() { return $this->billing_address1; } function set_billing_address2($value) { $this->billing_address2 = urlencode($value); } function get_billing_address2() { return $this->billing_address2; } function set_billing_city($value) { $this->billing_city = urlencode($value); } function get_billing_city() { return $this->billing_city; } function set_billing_state($value) { $this->billing_state = urlencode($value); } function get_billing_state() { return $this->billing_state; } function set_billing_zip($value) { $this->billing_zip = urlencode($value); } function get_billing_zip() { return $this->billing_zip; } function set_billing_country($value) { $this->billing_country = urlencode($value); } function get_billing_country() { return $this->billing_country; } function set_billing_phone($value) { $this->billing_phone = urlencode($value); } function get_billing_phone() { return $this->billing_phone; } function set_billing_fax($value) { $this->billing_fax = urlencode($value); } function get_billing_fax() { return $this->billing_fax; } function set_billing_email($value) { $this->billing_email = urlencode($value); } function get_billing_email() { return $this->billing_email; } function set_cc_number($value) { $this->cc_number = urlencode($value); } function get_cc_number() { return $this->cc_number; } function set_ccexp_month($value) { $this->ccexp_month = $value; } function get_ccexp_month() { return $this->ccexp_month; } function set_ccexp_year($value) { $this->ccexp_year = $value; } function get_ccexp_year() { return $this->ccexp_year; } function set_counter($value) { $this->counter = $value; } function get_counter() { return $this->counter; } function set_debug($value) { $this->debug = $value; } function get_debug() { return $this->debug; } function set_ec_account($value) { $this->ec_account = urlencode($value); } function get_ec_account() { return $this->ec_account; } function set_ec_address1($value) { $this->ec_address1 = urlencode($value); } function get_ec_address1() { return $this->ec_address1; } function set_ec_address2($value) { $this->ec_address2 = urlencode($value); } function get_ec_address2() { return $this->ec_address2; } function set_ec_bank_name($value) { $this->ec_bank_name = urlencode($value); } function get_ec_bank_name() { return $this->ec_bank_name; } function set_ec_business_acct($value) { $this->ec_business_acct = urlencode($value); } function get_ec_business_acct() { return $this->ec_business_acct; } function set_ec_city($value) { $this->ec_city = $value; } function get_ec_city() { return $this->ec_city; } function set_ec_email($value) { $this->ec_email = urlencode($value); } function get_ec_email() { return $this->ec_email; } function set_ec_first_name($value) { $this->ec_first_name = urlencode($value); } function get_ec_first_name() { return $this->ec_first_name; } function set_ec_id_country($value) { $this->ec_id_country = urlencode($value); } function get_ec_id_country() { return $this->ec_id_country; } function set_ec_id_exp_mm($value) { $this->ec_id_exp_mm = $value; } function get_ec_id_exp_mm() { return $this->ec_id_exp_mm; } function set_ec_id_exp_dd($value) { $this->ec_id_exp_dd = $value; } function get_ec_id_exp_dd() { return $this->ec_id_exp_dd; } function set_ec_id_exp_yy($value) { $this->ec_id_exp_yy = $value; } function get_ec_id_exp_yy() { return $this->ec_id_exp_yy; } function set_ec_id_number($value) { $this->ec_id_number = urlencode($value); } function get_ec_id_number() { return $this->ec_id_number; } function set_ec_id_state($value) { $this->ec_id_state = urlencode($value); } function get_ec_id_state() { return $this->ec_id_state; } function set_ec_id_type($value) { $this->ec_id_type = $value; } function get_ec_id_type() { return $this->ec_id_type; } function set_ec_last_name($value) { $this->ec_last_name = urlencode($value); } function get_ec_last_name() { return $this->ec_last_name; } function set_ec_license_number($value) { $this->ec_license_number = $value; } function get_ec_license_number() { return $this->ec_license_number; } function set_ec_license_state($value) { $this->ec_license_state = $value; } function get_ec_license_state() { return $this->ec_license_state; } function set_ec_merchant_ref($value) { $this->ec_merchant_ref = $value; } function get_ec_merchant_ref() { return $this->ec_merchant_ref; } function set_ec_nbds_code($value) { $this->ec_nbds_code = $value; } function get_ec_nbds_code() { return $this->ec_nbds_code; } function set_ec_other_name($value) { $this->ec_other_name = urlencode($value); } function get_ec_other_name() { return $this->ec_other_name; } function set_ec_payee($value) { $this->ec_payee = urlencode($value); } function get_ec_payee() { return $this->ec_payee; } function set_ec_rt($value) { $this->ec_rt = urlencode($value); } function get_ec_rt() { return $this->ec_rt; } function set_ec_serial_number($value) { $this->ec_serial_number = urlencode($value); } function get_ec_serial_number() { return $this->ec_serial_number; } function set_ec_state($value) { $this->ec_state = urlencode($value); } function get_ec_state() { return $this->ec_state; } function set_ec_zip($value) { $this->ec_zip = urlencode($value); } function get_ec_zip() { return $this->ec_zip; } function set_grand_total($value) { $this->grand_total = sprintf("%01.2f", $value); } function get_grand_total() { return $this->grand_total; } function set_merchant_email($value) { $this->merchant_email = urlencode($value); } function get_merchant_email() { return $this->merchant_email; } function set_merchant_trace_nbr($value) { $this->merchant_trace_nbr = $value; } function get_merchant_trace_nbr() { return $this->merchant_trace_nbr; } function set_original_amount($value) { $this->original_amount = sprintf("%01.2f", $value); } function get_original_amount() { return $this->original_amount; } function set_original_trandate_mm($value) { $this->original_trandate_mm = $value; } function get_original_trandate_mm() { return $this->original_trandate_mm; } function set_original_trandate_dd($value) { $this->original_trandate_dd = $value; } function get_original_trandate_dd() { return $this->original_trandate_dd; } function set_original_trandate_yyyy($value) { $this->original_trandate_yyyy = $value; } function get_original_trandate_yyyy() { return $this->original_trandate_yyyy; } function set_original_reference($value) { $this->original_reference = $value; } function get_original_reference() { return $this->original_reference; } function set_order_number($value) { $this->order_number = $value; } function get_order_number() { return $this->order_number; } function set_shipping_flag($value) { $this->shipping_flag = $value; } function get_shipping_flag() { return $this->shipping_flag; } function set_shipping_prefix($value) { $this->shipping_prefix = urlencode($value); } function get_shipping_prefix() { return $this->shipping_prefix; } function set_shipping_name($value) { $this->shipping_name = urlencode($value); } function get_shipping_name() { return $this->shipping_name; } function set_shipping_address1($value) { $this->shipping_address1 = urlencode($value); } function get_shipping_address1() { return $this->shipping_address1; } function set_shipping_address2($value) { $this->shipping_address2 = urlencode($value); } function get_shipping_address2() { return $this->shipping_address2; } function set_shipping_city($value) { $this->shipping_city = urlencode($value); } function get_shipping_city() { return $this->shipping_city; } function set_shipping_state($value) { $this->shipping_state = urlencode($value); } function get_shipping_state() { return $this->shipping_state; } function set_shipping_zip($value) { $this->shipping_zip = urlencode($value); } function get_shipping_zip() { return $this->shipping_zip; } function set_shipping_comments($value) { $this->shipping_comments = urlencode($value); } function get_shipping_comments() { return $this->shipping_comments; } function set_shipping_country($value) { $this->shipping_country = urlencode($value); } function get_shipping_country() { return $this->shipping_country; } function set_shipping_phone($value) { $this->shipping_phone = urlencode($value); } function get_shipping_phone() { return $this->shipping_phone; } function set_shipping_fax($value) { $this->shipping_fax = urlencode($value); } function get_shipping_fax() { return $this->shipping_fax; } function set_shipper($value) { $this->shipper = urlencode($value); } function get_shipper() { return $this->shipper; } function set_shipper_tracking_nbr($value) { $this->shipper_tracking_nbr = $value; } function get_shipper_tracking_nbr() { return $this->shipper_tracking_nbr; } function set_track1($value) { $this->track1 = urlencode($value); } function get_track1() { return $this->track1; } function set_track2($value) { $this->track2 = urlencode($value); } function get_track2() { return $this->track2; } /************************************************ Helper functions ************************************************/ function getRandomCounter() { mt_srand ((double) microtime() * 1000000); Return mt_rand(); } function get_EchoResponse() { return $this->EchoResponse; } function get_echotype1() { return $this->echotype1; } function get_echotype2() { return $this->echotype2; } function get_echotype3() { return $this->echotype3; } function get_openecho() { return $this->openecho; } function set_EchoServer($value) { $this->EchoServer = $value; } function get_authorization() { return $this->authorization; } function get_reference() { return $this->reference; } function get_order_number() { return $this->order_number; } function get_EchoSuccess() { return $this->EchoSuccess; } function get_status() { return $this->status; } function GetEchoProp($Haystack, $Prop) { // prepend garbage in case the property // starts at position 0 $Haystack = "garbage" . $Haystack; if ($StartPos = strpos($Haystack, "<$Prop>")) { $StartPos = strpos($Haystack, "<$Prop>") + strlen("<$Prop>"); $EndPos = strpos($Haystack, "</$Prop"); return substr($Haystack, $StartPos, $EndPos - $StartPos); } else { return ""; } } function GetAuthFromEcho() { if ($startpos = strpos($this->echotype3, "<auth_code>")) { $startpos = strpos($this->echotype3, "<auth_code>") + 11; $endpos = strpos($this->echotype3, "</auth_code>"); $this->authorization = substr($this->echotype3, $startpos, $endpos - $startpos); } } function GetOrderNumberFromEcho() { if ($startpos = strpos($this->echotype3, "<order_number>")) { $startpos = strpos($this->echotype3, "<order_number>") + 14; $endpos = strpos($this->echotype3, "</order_number>"); $this->order_number = substr($this->echotype3, $startpos, $endpos - $startpos); } } function GetReferenceFromEcho() { if ($startpos = strpos($this->echotype3, "<echo_reference>")) { $startpos = strpos($this->echotype3, "<echo_reference>") + 16; $endpos = strpos($this->echotype3, "</echo_reference>"); $this->reference = substr($this->echotype3, $startpos, $endpos - $startpos); } } } // end of class ?>