Reputation: 1744
I am working on a shopping cart with several payment options using different APIs.
The flow I want is that the user chooses which payment option to use and the according form shows.
On submit the form fields regarding address etc should be saved in my DB and the fields regarding payment is sent with POST to the payment handler api.
It is important that the user only have to click once so the save-in-db has to be squeezed in between the click on the submit button and when the data is sent to the payment server.
I have thought of a redirect where all data gets POSTED to and that save the data in DB and redirect to payment server BUT how do I redirect along with POST data (GET is not working unfortunately).
Upvotes: 3
Views: 1644
Reputation: 237
Try this
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query($_POST)
),
));
echo file_get_contents($url, false, $context);
Upvotes: -1
Reputation: 637
Easiest thing to do is have a form submit handler in JavaScript code that will make an AJAX POST request to save the customer-related info.
This also saves you because you can control what parameters to send to your server (the customer's credit card / CVV numbers should not be sent to your server unless you are certified to handle them).
Upvotes: 2
Reputation: 739
If you have the PECL http extension installed (it'll show up in phpinfo() as pecl_http) you can create an HTTP POST request and spit out the results after the following pattern:
// your DB code above here
$pay_request = new HttpRequest($remote_url, HTTP_METH_POST);
$pay_request->addPostFields($_POST);
$pay_request->send()->send();
Last line's not a typo - the request returns a response, and then the response gets dumped in the output buffer.
Upvotes: -1
Reputation: 28174
You can't send a traditional Location:
header to the HTTP client to do a redirect and include POST data. What you could do instead is:
Upvotes: 3