/**
  * Builds a PushNotification object from the given JSON object
  * @param type $vo_json the JSON representation of the PushNotification
  * @return PushNotification a push notification object
  * @author Rob Kurst <*****@*****.**>
  */
 public static function buildFromJSON($vo_json)
 {
     $o_return = new PushNotification();
     if (array_key_exists("push_notification_type", $vo_json) && $vo_json["push_notification_type"] == "PING") {
         $o_return->setPING();
     }
     if (array_key_exists("push_notification_settlement_batch", $vo_json)) {
         $o_return->setSettlementBatch(SettlementBatch::buildFromJSON($vo_json["push_notification_settlement_batch"]));
     }
     if (array_key_exists("push_notification_bank_account_transaction", $vo_json)) {
         $o_return->setBankAccountTransaction(BankAccountTransaction::buildFromJSON($vo_json["push_notification_bank_account_transaction"]));
     }
     return $o_return;
 }
 /**
  * 
  * Processes the transaction using the specified BankAccountTransaction.
  * Returns an updated BankAccountTransaction containing the response information.
  * 
  * @param vo_bct    the bank account transaction
  * @return  the updated bank account transaction
  * @throws BaseCommerceClientException if invalid credentials were given or if there was an internal server error. Please contact tech support if there is an internal server error.
  * @author Rob Kurst <*****@*****.**>
  */
 public function processBankAccountTransaction(BankAccountTransaction $vo_bat)
 {
     $triple_des = new TripleDESService($this->is_key);
     $o_query = array();
     $o_query['gateway_username'] = $this->is_gateway_username;
     $o_query['gateway_password'] = $this->is_gateway_password;
     $o_query['payload'] = $triple_des->encrypt($vo_bat->getJSON());
     $s_query = json_encode($o_query);
     $response = $this->do_post_request('/pcms/?f=API_processBankAccountTransactionV4', $s_query, $triple_des, 0);
     $vo_bat = BankAccountTransaction::buildFromJSON($response["bank_account_transaction"]);
     if (array_key_exists("exception", $response) && !is_null($response['exception'])) {
         foreach ($response['exception'] as $s_key => $s_error) {
             $vo_bat->addMessage($s_error);
         }
     }
     return $vo_bat;
 }
 static function buildFromJSON($vo_json)
 {
     $o_bat = new BankAccountTransaction();
     if (array_key_exists("bank_account_transaction_id", $vo_json)) {
         $o_bat->setBankAccountTransactionId($vo_json["bank_account_transaction_id"]);
     }
     if (array_key_exists('bank_account_transaction_type', $vo_json)) {
         if (gettype($vo_json['bank_account_transaction_type']) === "array") {
             $o_type = (array) $vo_json['bank_account_transaction_type'];
             if (array_key_exists('bank_account_transaction_type_name', $o_type)) {
                 $o_bat->setType($o_type['bank_account_transaction_type_name']);
             }
         } else {
             $o_bat->setType($vo_json['bank_account_transaction_type']);
         }
     }
     if (array_key_exists('bank_account_transaction_method', $vo_json)) {
         if (gettype($vo_json['bank_account_transaction_method']) === "array") {
             $o_method = (array) $vo_json['bank_account_transaction_method'];
             if (array_key_exists('bank_account_transaction_method_name', $o_method)) {
                 $o_bat->setMethod($o_method['bank_account_transaction_method_name']);
             }
         } else {
             $o_bat->setMethod($vo_json['bank_account_transaction_method']);
         }
     }
     if (array_key_exists('bank_account_transaction_recurring_indicator', $vo_json)) {
         $o_bat->setRecurringIndicator($vo_json["bank_account_transaction_recurring_indicator"]);
     }
     if (array_key_exists('bank_account_transaction_routing_number', $vo_json)) {
         $o_bat->setRoutingNumber($vo_json["bank_account_transaction_routing_number"]);
     }
     if (array_key_exists('bank_account_transaction_account_number', $vo_json)) {
         $o_bat->setAccountNumber($vo_json["bank_account_transaction_account_number"]);
     }
     if (array_key_exists('bank_account_transaction_effective_date', $vo_json)) {
         $o_bat->setEffectiveDate(date("m/d/Y H:i:s", strtotime($vo_json["bank_account_transaction_effective_date"])));
     }
     if (array_key_exists('bank_account_transaction_settlement_date', $vo_json)) {
         $o_bat->setSettlementDate(date("m/d/Y H:i:s", strtotime($vo_json["bank_account_transaction_settlement_date"])));
     }
     if (array_key_exists('bank_account_transaction_return_date', $vo_json)) {
         $o_bat->setReturnDate(date("m/d/Y H:i:s", strtotime($vo_json["bank_account_transaction_return_date"])));
     }
     if (array_key_exists('bank_account_transaction_account_name', $vo_json)) {
         $o_bat->setAccountName($vo_json["bank_account_transaction_account_name"]);
     }
     if (array_key_exists('bank_account_transaction_status', $vo_json)) {
         if (gettype($vo_json['bank_account_transaction_status']) === "array") {
             $o_status = (array) $vo_json['bank_account_transaction_status'];
             if (array_key_exists('bank_account_transaction_status_name', $o_status)) {
                 $o_bat->setStatus($o_status['bank_account_transaction_status_name']);
             }
         } else {
             $o_bat->setStatus($vo_json['bank_account_transaction_status']);
         }
     }
     if (array_key_exists('bank_account_transaction_return_code', $vo_json)) {
         $o_bat->setReturnCode($vo_json["bank_account_transaction_return_code"]);
     }
     if (array_key_exists('bank_account_transaction_merchant_transaction_id', $vo_json)) {
         $o_bat->setMerchantTransactionID($vo_json["bank_account_transaction_merchant_transaction_id"]);
     }
     if (array_key_exists('bank_account_transaction_trace', $vo_json)) {
         $o_bat->setTrace($vo_json["bank_account_transaction_trace"]);
     }
     if (array_key_exists('bank_account_transaction_account_type', $vo_json)) {
         if (gettype($vo_json['bank_account_transaction_account_type']) === "array") {
             $o_account_type = (array) $vo_json['bank_account_transaction_account_type'];
             if (array_key_exists('bank_account_transaction_account_type_name', $o_account_type)) {
                 $o_bat->setAccountType($o_account_type['bank_account_transaction_account_type_name']);
             }
         } else {
             $o_bat->setAccountType($vo_json['bank_account_transaction_account_type']);
         }
     }
     // Added to allow intercommunication between CLIENT objects during unit testing//
     if (array_key_exists('messages', $vo_json) && !is_null($vo_json['messages'])) {
         foreach ($vo_json['messages'] as $s_key => $s_msg) {
             $o_bat->addMessage($s_msg);
         }
     }
     if (array_key_exists('bank_account_transaction_amount', $vo_json)) {
         $o_bat->setAmount($vo_json["bank_account_transaction_amount"]);
     }
     if (array_key_exists("bank_account_token", $vo_json)) {
         $o_bat->setToken($vo_json["bank_account_token"]);
     }
     if (array_key_exists("bank_account_transaction_micr_data", $vo_json)) {
         $o_bat->setMICRData($vo_json["bank_account_transaction_micr_data"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field1", $vo_json)) {
         $o_bat->setCustomField1($vo_json["bank_account_transaction_custom_field1"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field2", $vo_json)) {
         $o_bat->setCustomField2($vo_json["bank_account_transaction_custom_field2"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field3", $vo_json)) {
         $o_bat->setCustomField3($vo_json["bank_account_transaction_custom_field3"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field4", $vo_json)) {
         $o_bat->setCustomField4($vo_json["bank_account_transaction_custom_field4"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field5", $vo_json)) {
         $o_bat->setCustomField5($vo_json["bank_account_transaction_custom_field5"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field6", $vo_json)) {
         $o_bat->setCustomField6($vo_json["bank_account_transaction_custom_field6"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field7", $vo_json)) {
         $o_bat->setCustomField7($vo_json["bank_account_transaction_custom_field7"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field8", $vo_json)) {
         $o_bat->setCustomField8($vo_json["bank_account_transaction_custom_field8"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field9", $vo_json)) {
         $o_bat->setCustomField9($vo_json["bank_account_transaction_custom_field9"]);
     }
     if (array_key_exists("bank_account_transaction_custom_field10", $vo_json)) {
         $o_bat->setCustomField10($vo_json["bank_account_transaction_custom_field10"]);
     }
     if (array_key_exists("bank_account_transaction_check_number", $vo_json)) {
         $o_bat->setCheckNumber($vo_json["bank_account_transaction_check_number"]);
     }
     if (array_key_exists("bank_account_transaction_individual_identification_number", $vo_json)) {
         $o_bat->setIndividualIdentificationNumber($vo_json["bank_account_transaction_individual_identification_number"]);
     }
     if (array_key_exists('bank_account_transaction_billing_address', $vo_json)) {
         $o_bat->setBillingAddress(Address::buildFromJSON($vo_json['bank_account_transaction_billing_address']));
     }
     if (array_key_exists("bank_account_transaction_cipher_pay_uuid", $vo_json)) {
         $o_bat->setCipherPayUUID($vo_json["bank_account_transaction_cipher_pay_uuid"]);
     }
     return $o_bat;
 }
 /**
  * Builds a PushNotification object from the given JSON object
  * @param type $vo_json the JSON representation of the PushNotification
  * @return PushNotification a push notification object
  * @author Rob Kurst <*****@*****.**>
  */
 public static function buildFromJSON($vo_json)
 {
     $o_return = new PushNotification();
     if (array_key_exists("push_notification_type", $vo_json) && $vo_json["push_notification_type"] == "PING") {
         $o_return->setPING();
     }
     if (array_key_exists("push_notification_type", $vo_json) && $vo_json["push_notification_type"] == "INCOMING CHARGEBACK") {
         if (array_key_exists("push_notification_chargeback", $vo_json)) {
             $o_return->setIncomingChargeback(Chargeback::buildFromJSON($vo_json["push_notification_chargeback"]));
         }
     }
     if (array_key_exists("push_notification_settlement_batch", $vo_json)) {
         $o_return->setSettlementBatch(SettlementBatch::buildFromJSON($vo_json["push_notification_settlement_batch"]));
     }
     if (array_key_exists("push_notification_bank_account_transaction", $vo_json)) {
         $o_return->setBankAccountTransaction(BankAccountTransaction::buildFromJSON($vo_json["push_notification_bank_account_transaction"]));
     }
     if (array_key_exists("push_notification_id", $vo_json)) {
         $o_return->setID($vo_json["push_notification_id"]);
     }
     return $o_return;
 }
 protected function processBankAccountTransaction($data, $as_partner = 0)
 {
     $o_bat = new BankAccountTransaction();
     $o_bat->setType(BankAccountTransaction::$XS_BAT_TYPE_DEBIT);
     $o_bat->setMethod(BankAccountTransaction::$XS_BAT_METHOD_CCD);
     $o_bat->setEffectiveDate(date('m-d-Y H:i:s'));
     $o_bat->setToken($data['payer_vault_id']);
     $o_bat->setAmount($data['total_amt']);
     if (isset($data['fee_amt']) && !empty($data['fee_amt']) && isset($data['rsq_vault_id']) && !empty($data['rsq_vault_id'])) {
         $cf10val = $data['rsq_vault_id'] . "," . $data['fee_amt'];
         $o_bat->setCustomField10($cf10val);
     }
     if ($as_partner == 0) {
         $o_bcpc = new BaseCommerceClient(RENTSQUARE_MERCH_USER, RENTSQUARE_MERCH_PASS, RENTSQUARE_MERCH_KEY);
     } else {
         $o_bcpc = new BaseCommerceClient(RENTSQUARE_PARTNER_USER, RENTSQUARE_PARTNER_PASS, RENTSQUARE_PARTNER_KEY);
     }
     $o_bcpc->setSandbox(BC_SANDBOXVALUE);
     $o_bat = $o_bcpc->processBankAccountTransaction($o_bat);
     if ($o_bat->isStatus(BankAccountTransaction::$XS_BAT_STATUS_FAILED)) {
         //Transaction Failed
         return array('status' => '0', 'info' => $o_bat->getMessages());
     } else {
         if ($o_bat->isStatus(BankAccountTransaction::$XS_BAT_STATUS_CREATED)) {
             //Transaction went through successfully
             return array('status' => '1', 'info' => $o_bat->getBankAccountTransactionId());
         }
     }
 }