Phil
Phil

Reputation: 420

Redirect not working after curl

I have a codeigniter application that has a checkout system through authorize.net. The authorize.net library that I uses preforms a curl to make the payment, but after it is done I cannot redirect because

headers already sent by (output started at /Users/phil/Sites/Medbridge/httpdocs/application/libraries/AuthorizeCimLib.php:1

That is what the log says. If I comment out the payment thing it will redirect fine. I don't know if I am not understand a curl and that is why it is doing something or if I need to change some curl settings.
Thank you

EDIT
Here is the link to the library I am using, it is big and didn't want to repost the whole code
http://www.communitymx.com/content/article.cfm?page=4&cid=FDB14

Here is the curl part and maybe someone could see if this is doing the output to the header

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLINFO_HEADER_OUT, FALSE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $this->_xml);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $this->_response = curl_exec($ch);

Thank you

Upvotes: 1

Views: 1311

Answers (2)

Robin Castlin
Robin Castlin

Reputation: 10996

This is because the server has output something to your browser, and can't redirect through php after that.

As mentioned in the comments, you're most likely including some whitespace somewhere in your code. For practice and less troubleshooting, you don't need to include the ending ?> at the bottom of your php files. This is simply not required and sometimes there might end up a space after that ?> which causes an echo during the execution of your code.

Are you includeing any file in your code with might have a at the end of the file?

Another "solution" if you may, is to echo

<script type="text/javascript">
    top.location = '<?=$str_redirect_url?>';
</script>

EDIT:

If you're using Codeigniter, you should check your model, helper and library files for whitespaces.

Upvotes: 1

marknatividad
marknatividad

Reputation: 630

Perhaps you can use AJAX to issue the payment call, get the response and redirect using Javascript?

Upvotes: 0

Related Questions