
Schiro
Ich habe einige Nachforschungen zu diesem Thema angestellt, und es gibt einige Experten, die gesagt haben, dass dies nicht möglich ist, daher möchte ich nach einer alternativen Lösung fragen.
Meine Situation:
Seite A: [checkout.php] Der Kunde gibt seine Rechnungsdaten ein.
Seite B: [process.php] Generieren Sie eine Rechnungsnummer und speichern Sie Kundendaten in der Datenbank.
Seite C: [thirdparty.com] Drittes Zahlungsgateway (NUR POST-DATEN AKZEPTIEREN).
Der Kunde gibt seine Daten ein und richtet seinen Warenkorb auf Seite A ein, dann POST auf Seite B. Speichern Sie in process.php die POST-Daten in der Datenbank und generieren Sie eine Rechnungsnummer. Senden Sie danach die Kundendaten und die Rechnungsnummer an das Zahlungsgateway von Thirdparty.com. Das Problem ist POST auf Seite B. cURL kann die Daten auf Seite C POSTen, aber das Problem ist, dass die Seite nicht auf Seite C umgeleitet wurde. Der Kunde muss Kreditkartendaten auf Seite C eingeben.
Das Drittanbieter-Zahlungsgateway hat uns das API-Muster gegeben, das Muster ist POST die Rechnungsnummer zusammen mit den Kundendetails. Wir möchten nicht, dass das System zu viele unerwünschte Rechnungsnummern generiert.
Gibt es dafür eine Lösung? Unsere aktuelle Lösung besteht darin, dass der Kunde Details auf Seite A ausfüllt, dann erstellen wir auf Seite B eine weitere Seite, die dort alle Kundendetails zeigt, wo der Benutzer auf eine BESTÄTIGEN-Schaltfläche klicken kann, um auf Seite C zu POSTEN.
Unser Ziel ist es, dass Kunden nur einmal klicken müssen.
Hoffe meine Frage ist klar 🙂

Peter
Generieren Sie ein Formular auf Seite B mit allen erforderlichen Daten und Aktionen auf Seite C und senden Sie es mit JavaScript beim Laden der Seite. Ihre Daten werden ohne großen Aufwand für den Benutzer an Seite C gesendet.
Dies ist der einzige Weg, dies zu tun. Eine Weiterleitung ist ein 303-HTTP-Header, den Sie nachlesen können http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlaber ich werde einige davon zitieren:
Die Antwort auf die Anfrage kann unter einem anderen URI gefunden werden und SOLLTE mit einer GET-Methode für diese Ressource abgerufen werden. Diese Methode dient hauptsächlich dazu, die Ausgabe eines POST-aktivierten Skripts zu ermöglichen, um den Benutzeragenten zu einer ausgewählten Ressource umzuleiten. Der neue URI ist kein Ersatzverweis für die ursprünglich angeforderte Ressource. Die 303-Antwort DARF NICHT zwischengespeichert werden, aber die Antwort auf die zweite (umgeleitete) Anfrage kann zwischengespeichert werden.
Die einzige Möglichkeit, das zu erreichen, was Sie tun, ist eine Zwischenseite, die den Benutzer zu Seite C weiterleitet. Hier ist ein kleiner/einfacher Ausschnitt, wie Sie das erreichen können:
<form id="myForm" action="Page_C.php" method="post">
<?php
foreach ($_POST as $a => $b) {
echo '<input type="hidden" name="'.htmlentities($a).'" value="'.htmlentities($b).'">';
}
?>
</form>
<script type="text/javascript">
document.getElementById('myForm').submit();
</script>
Sie sollten auch ein einfaches “Bestätigungs”-Formular in einem Noscript-Tag haben, um sicherzustellen, dass Benutzer ohne Javascript Ihren Dienst nutzen können.

Eduardo Cuomo
/**
* Redirect with POST data.
*
* @param string $url URL.
* @param array $post_data POST data. Example: ['foo' => 'var', 'id' => 123]
* @param array $headers Optional. Extra headers to send.
*/
public function redirect_post($url, array $data, array $headers = null) {
$params = [
'http' => [
'method' => 'POST',
'content' => http_build_query($data)
]
];
if (!is_null($headers)) {
$params['http']['header'] = '';
foreach ($headers as $k => $v) {
$params['http']['header'] .= "$k: $v\n";
}
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if ($fp) {
echo @stream_get_contents($fp);
die();
} else {
// Error
throw new Exception("Error loading '$url', $php_errormsg");
}
}

Robert Sinclair
$_SESSION ist Ihr Freund, wenn Sie sich nicht mit Javascript anlegen wollen
Angenommen, Sie versuchen, eine E-Mail weiterzuleiten:
Auf Seite A:
// Start the session
session_start();
// Set session variables
$_SESSION["email"] = "awesome@email.com";
header('Location: page_b.php');
Und auf Seite B:
// Start the session
session_start();
// Show me the session!
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
Um die Sitzung zu zerstören
unset($_SESSION['email']);
session_destroy();
Ich habe eine andere Lösung, die dies ermöglicht. Es erfordert, dass der Client Javascript ausführt (was meiner Meinung nach heutzutage eine faire Anforderung ist).
Verwenden Sie einfach eine AJAX-Anfrage auf Seite A, um Ihre Rechnungsnummer und Kundendaten im Hintergrund zu generieren (Ihre vorherige Seite B), und sobald die Anfrage erfolgreich mit den richtigen Informationen zurückgesendet wurde, füllen Sie einfach die Formularübermittlung an Ihr Zahlungsgateway aus (Seite C).
Dadurch wird erreicht, dass der Benutzer nur auf eine Schaltfläche klickt und zum Zahlungsgateway weitergeht. Unten ist etwas Pseudocode
HTML:
<form id="paymentForm" method="post" action="https://example.com">
<input type="hidden" id="customInvoiceId" .... />
<input type="hidden" .... />
<input type="submit" id="submitButton" />
</form>
JS (mit jQuery zur Bequemlichkeit, aber trivial, um reines Javascript zu erstellen):
$('#submitButton').click(function(e) {
e.preventDefault(); //This will prevent form from submitting
//Do some stuff like build a list of things being purchased and customer details
$.getJSON('setupOrder.php', {listOfProducts: products, customerDetails: details }, function(data) {
if (!data.error) {
$('#paymentForm #customInvoiceID').val(data.id);
$('#paymentForm').submit(); //Send client to the payment processor
}
});
Ich weiß, dass dies eine alte Frage ist, aber ich habe noch eine andere alternative Lösung mit jQuery:
var actionForm = $('<form>', {'action': 'nextpage.php', 'method': 'post'}).append($('<input>', {'name': 'action', 'value': 'delete', 'type': 'hidden'}), $('<input>', {'name': 'id', 'value': 'some_id', 'type': 'hidden'}));
actionForm.submit();
Der obige Code verwendet jQuery, um ein Formular-Tag zu erstellen, versteckte Felder als Post-Felder anzuhängen und es schließlich zu übermitteln. Die Seite wird mit den angehängten POST-Daten zur Zielseite des Formulars weitergeleitet.
ps JavaScript & jQuery sind für diesen Fall erforderlich. Wie aus den Kommentaren der anderen Antworten hervorgeht, können Sie davon Gebrauch machen <noscript>
-Tag, um ein Standard-HTML-Formular zu erstellen, falls JS deaktiviert ist.
Ich bin mir bewusst, die Frage ist php
orientiert, aber der beste Weg, um a POST
Anfrage verwendet wahrscheinlich .htaccess
dh:
RewriteEngine on
RewriteCond %{REQUEST_URI} string_to_match_in_url
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^(.*)$ https://domain.tld/$1 [L,R=307]
Erläuterung:
Wenn Sie eine Anfrage mit POST-Daten umleiten möchten, leitet der Browser sie standardmäßig über GET mit um 302 redirect
. Dadurch werden auch alle mit der Anfrage verbundenen POST-Daten gelöscht. Der Browser tut dies als Vorsichtsmaßnahme, um eine unbeabsichtigte erneute Übermittlung der POST-Transaktion zu verhindern.
Aber was ist, wenn Sie die POST-Anfrage mit ihren Daten trotzdem umleiten möchten? In HTTP 1.1 gibt es dafür einen Statuscode. Statuscode 307
gibt an, dass die Anfrage wiederholt werden soll mit der gleichen HTTP-Methode und den gleichen Daten. Daher wird Ihre POST-Anforderung zusammen mit ihren Daten wiederholt, wenn Sie diesen Statuscode verwenden.
SRC

Nanne
Sie können PHP einen POST durchführen lassen, aber dann wird Ihr PHP die Rückgabe erhalten, mit allen möglichen Komplikationen. Ich denke, das einfachste wäre, den Benutzer den POST tatsächlich machen zu lassen.
Also, so wie Sie es vorgeschlagen haben, erhalten Sie tatsächlich diesen Teil:
Kundendetails auf Seite A ausfüllen, dann erstellen wir auf Seite B eine weitere Seite, die dort alle Kundendetails zeigt, auf eine BESTÄTIGEN-Schaltfläche klicken und dann auf Seite C POSTEN.
Aber Sie können tatsächlich eine Javascript-Übermittlung auf Seite B durchführen, sodass kein Klick erforderlich ist. Machen Sie daraus eine “umleitende” Seite mit einer Ladeanimation, und schon sind Sie fertig.
9861800cookie-checkPHP Redirect mit POST-Datenyes
Ich glaube nicht, dass dies doppelt ist, weil mein Ziel innerhalb einer PHP-Seite ist, die POST-Daten weitergibt und sie umleitet. cURL Ich glaube nicht, dass es möglich ist, dies zu tun. Suchen Sie einfach nach Experten, die eine Alternative dafür haben
– Schiro
7. April 2011 um 9:40 Uhr
ʜᴛᴛᴘ 308 Umleitungscode ?
– Benutzer2284570
22. Februar 2019 um 11:05 Uhr