Integration/CorrectAddressIntegration.php
protected function callCorrectA($addressData)
    {
        $return   = false;
        $settings = $this->getIntegrationSettings()->getFeatureSettings();

        if (!file_exists($settings[self::CA_CORRECTA_CMD])) {
            $this->getLogger()->error(
                'Correct Address: Could not find executable '.$settings[self::CA_CORRECTA_CMD]
            );
        } else {
            $pipes   = [];
            $process = proc_open(
                $settings[self::CA_CORRECTA_CMD],
                [
                    ['pipe', 'r'], // stdin
                    ['pipe', 'w'], // stdout
                    ['pipe', 'w'], // stderr
                ],
                $pipes,
                dirname($settings[self::CA_CORRECTA_CMD]),
                ['CA_DATA' => $settings[self::CA_CORRECTA_DATA]]
            );

            if (is_resource($process)) {
                // Send input to CallCorrectA and close its stdin
                fwrite($pipes[0], $addressData) && fclose($pipes[0]);

                // Log issues and cleanup
                if ($err = stream_get_contents($pipes[2])) {
                    $this->getLogger()->error(
                        'Correct Address: Error from executable '.$err
                    );
                } else {
                    $return = fgets($pipes[1]);
                }

                fclose($pipes[1]) && fclose($pipes[2]) && proc_close($process);
            } else {
                $this->getLogger()->error(
                    'Correct Address: Could not open executable '.$settings[self::CA_CORRECTA_CMD]
                );
            }
        }

        return $return;
    }
protected function callCorrectA($addressData)
    {
        $return   = false;
        $settings = $this->getIntegrationSettings()->getFeatureSettings();

        if (!file_exists($settings[self::CA_CORRECTA_CMD])) {
            $this->getLogger()->error(
                'Correct Address: Could not find executable '.$settings[self::CA_CORRECTA_CMD]
            );
        } else {
            $pipes   = [];
            $process = proc_open(
                $settings[self::CA_CORRECTA_CMD],
                [
                    ['pipe', 'r'], // stdin
                    ['pipe', 'w'], // stdout
                    ['pipe', 'w'], // stderr
                ],
                $pipes,
                dirname($settings[self::CA_CORRECTA_CMD]),
                ['CA_DATA' => $settings[self::CA_CORRECTA_DATA]]
            );

            if (is_resource($process)) {
                // Send input to CallCorrectA and close its stdin
                fwrite($pipes[0], $addressData) && fclose($pipes[0]);

                // Log issues and cleanup
                if ($err = stream_get_contents($pipes[2])) {
                    $this->getLogger()->error(
                        'Correct Address: Error from executable '.$err
                    );
                } else {
                    $return = fgets($pipes[1]);
                }

                fclose($pipes[1]) && fclose($pipes[2]) && proc_close($process);
            } else {
                $this->getLogger()->error(
                    'Correct Address: Could not open executable '.$settings[self::CA_CORRECTA_CMD]
                );
            }
        }

        return $return;
    }
@param $addressData

@return bool|string