Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]odsyłanie danych w odpowiedzi na request - jak ?
phpamator
post 4.11.2016, 15:40:46
Post #1





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


Hello ludziki ....... zielone(początkujący).

smile.gif

Podpowiedzcie, jak z poziomu php to zrobić ..... otóż ze strony wysyłam POST'em pewne dane, odbieram je i robię odpowiednie operacje (zapisuje do bazy, generuję odpowiedz) następnie chciałbym odpowiednio spreparowane dane odesłać celem dalszego przetworzenia wink.gif
Ależ zagadkowo piszę ..... smile.gif generalnie chodzi o to, że buduję sobie płatność paypal'em (wiem że są gotowe rozwiązania ale ja chciałbym sam!) i te przygotowane dane muszę odesłać spowrotem do sklepu. Znalazłem trochę na ten temat i skomponowałem coś takiego ale za "chube" nie chce mi to wysyłac pod wskazany adres sad.gif
  1. $url = 'http://www.myshop.net/application/public/classes/paypal.php';
  2. $resp = respconn();
  3. echo 'Connecting ...<br/>';
  4. $user = "INSERT INTO paypal_responses.users (fname,lname,email,status_id,order_id) VALUES ('".$_POST['fname']."','".$_POST['lname']."','".$_POST['email']."','Completed','".$_POST['order_id']."')";
  5. echo '<br/>'.$user.'<br/>';
  6. //print_r($resp);
  7. if(mysqli_query($resp,$user)) {
  8. echo '<br/>Connected!<br/>';
  9. echo 'Query executed!<br/>';
  10. echo "User successfully registered!<br/>";
  11. mysqli_close();
  12. } else {
  13. echo "Problem with user registration!<br/>";
  14. }
  15.  
  16. $order = "SELECT * FROM paypal_responses.users WHERE email = '".$_POST['email']."' LIMIT 1";
  17. echo '<br/>==================== ORDER PROCESSING ====================<br/>';
  18. $data = mysqli_fetch_array(mysqli_query($resp,$order));
  19. echo $data;
  20. echo '<br/>'.$order.'<br/>';
  21. // do tego momentu działa .... dalej już nic się nie dzieje .....
  22. $options = array(
  23. 'http' => array(
  24. 'header' => "Content-type: application/x-www-form-urlencoded\r\n",
  25. 'method' => 'POST',
  26. 'content' => http_build_query($data)
  27. )
  28. );
  29. // $options daje array(1) { 'http' => array(3) { 'header' => string(49) "Content-type: application/x-www-form-urlencoded " 'method' => string(4) "POST" 'content' => string(106) "user_id=10&fname=Roma&lname=Atch&email=juliaking%40gmail.com&status_id=Completed&order_id=43953" } }
  30. // czyli to co chcę wysłać
  31. $context = stream_context_create($options);
  32. $result = file_get_contents($url, false, $context);
  33. if ($result === FALSE) {
  34. echo 'Can`t send data!<br/>';
  35. }
  36. var_dump($context);// NULL questionmark.gif
  37. var_dump($result);//NULL questionmark.gif


Co skopałem ?

  1. # a tu inny przykład
  2. $options = array('http' =>
  3. 'method' => 'POST',
  4. 'header' => 'Content-type: application/x-www-form-urlencoded',
  5. 'content' => $postString
  6. )
  7. );
  8. # tworzyny context
  9. $context = stream_context_create($options);
  10. $result = file_get_contents($url, false, $context);


i czym to się różni od mojej formy ?
Jak to zrobić ?

Ten post edytował PHPRexio 4.11.2016, 17:53:47
Go to the top of the page
+Quote Post
SmokAnalog
post 4.11.2016, 20:25:11
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Nie do końca rozumiem co chcesz zrobić smile.gif Możesz napisać krok po kroku? Najlepiej pokaż szczegółowo, co robisz. Pokaż formularzyk.
Go to the top of the page
+Quote Post
phpamator
post 5.11.2016, 20:45:32
Post #3





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


Hej smoku,

Co chcę osiągnąc ? Otóż po wypełnieniu formularza po stronie sklepu, wysyłam dane do PayPal'a. Otwiera się strona gdzie podaje się dane i dokonuje płatności, wtedy po dokonaniu transakcji PayPal odpowiada odsyłając dane na podstawie których po stronie sklepu zakańczana jest operacja sprzedaży, uaktualniane dane w bazie i czyszczony koszyk.
I to własnie usiłuję zrobić.
Oczywiście to ma być w pewnym sensie tylko emulator PayPal'a albo tego co ona tam robi smile.gif w calach testowych. Ma odpowiadać w podobny sposób, żebym mógł dopracować wszystko.
Go to the top of the page
+Quote Post
SmokAnalog
post 5.11.2016, 20:51:36
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jesteś pewien, że PayPal nie ma prawdziwego trybu testowego? Osobiście nie wiem, bo się nie bawiłem API PayPala.

Ale jeśli chciałbyś coś takiego totalnie zasymulować, to powinno to działać tak:

  1. Wysyłasz formularz lub robisz Ajaxowy request do "zewnętrznego" API, które możesz trzymać równie dobrze u siebie. Te zewnętrzne API wiedzą gdzie przekierować po całej akcji. Wiedzą to albo po tokenie, albo podajesz im bezpośrednio Redirect URL na który ma przejść po całej akcji.
  2. API robi swoje, przyjmuje płatność i przekierowuje na wspomniany przed chwilą Redirect URL, wysyłając Ci przy okazji jakieś dane.
  3. Jesteś znowu "u siebie", ale z dodatkowymi danymi. Robisz z nimi co chcesz, a przy okazji załatwiasz swoje sprawy, jak np. czyszczenie koszyka.
Go to the top of the page
+Quote Post
phpamator
post 5.11.2016, 21:08:00
Post #5





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


No własnie, nie wiem tylko jak sobie zbudować taki "odpowiadacz" w zasadzie to wszystko czego potrzebuję to odesłać spowrotem "$_REQUEST['payment_status']['Completed']" bo to w zasadzie jedyne co mi potrzebne żeby zrobić całą resztę smile.gif
ale nie wiem jak to zrobić z poziomu PHP wink.gif taki ze mnie amator wink.gif
Go to the top of the page
+Quote Post
SmokAnalog
post 5.11.2016, 21:15:50
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Albo zrobić zwykłe przekierowanie do URL-a i dodać do niego parametr ?payment_status=completed (zakładam, że z tym $_REQUEST['payment_status']['Completed'] się pomyliłeś i chodziło Ci o $_REQUEST['payment_status'] o wartości 'Completed'), albo jeśli wolisz zrobić request POST, to wtedy powinieneś w tym API użyć cURL lub jakiejś biblioteki, która wysyła zapytania.
Go to the top of the page
+Quote Post
phpamator
post 5.11.2016, 21:18:31
Post #7





Grupa: Zarejestrowani
Postów: 328
Pomógł: 3
Dołączył: 10.07.2016
Skąd: UK-raine

Ostrzeżenie: (0%)
-----


Tak to miałem na myśli $_REQUEST['payment_status'] i value = 'Completed'.
Jeśli taką wartość zanotuje w odpowiedzi od serwera dokona zmian w bazie i zamknię zamówienie.

Tylko tego nie wiem, jak z poziomu skryptu PHP odpowiedzieć.


Poniżej fragment który ma odebrać odpowiedź.

  1. // Jeśli "Completed" zamykam zamówienie i wysyłam emaila z powiadomieniem.
  2. if ($_REQUEST && isset($_REQUEST['payment_status'])) {
  3. require_once '../../../config/dbConfig.php';
  4. require_once '../../../config/config.php';
  5. $idOrder=(isset($_REQUEST["item_number"]) ? $_REQUEST["item_number"] : '');
  6. $strPaymentStatus=(isset($_REQUEST['payment_status']) ? $_REQUEST['payment_status'] : '');
  7. $strStatus=($strPaymentStatus=='Completed' ? 'OK' : '');
  8. $strPaymentAuthorisation=(isset($_REQUEST['verify_sign']) ? $_REQUEST['verify_sign'] : '');
  9. $strPaymentID=(isset($_REQUEST['txn_id']) ? $_REQUEST['txn_id'] : '');
  10. $strEmail=(isset($_REQUEST['payer_email']) ? $_REQUEST['payer_email'] : '');
  11. $strUpdate = "UPDATE shop_order SET payment_type = 'paypal' WHERE order_id = '$idOrder'"
  12. $strSQL = "UPDATE tblOrder ";
  13. if ($strPaymentStatus!='') $strSQL.=(strpos($strSQL,' SET ')===false ? 'SET ' : ', ')."strPaymentStatus='".mysql_real_escape_string($strStatus) . "'";
  14. if ($strPaymentAuthorisation!='') $strSQL.=(strpos($strSQL,' SET ')===false ? 'SET ' : ', ')."strPaymentAuthorisation='".mysql_real_escape_string($strPaymentAuthorisation) . "'";
  15. if ($strPaymentID!='') $strSQL.=(strpos($strSQL,' SET ')===false ? 'SET ' : ', ')."strPaymentPayerStatus='".mysql_real_escape_string($strPaymentID) . "'";
  16. $strSQL.=" WHERE idOrder=$idOrder";
  17.  
  18. mysql_query($strSQL);
  19.  
  20. if ($strStatus=="OK") {
  21. $strSubject = "PADS Order Placed";
  22. $strSQL="SELECT * FROM tblOrderSupplier LEFT JOIN tblSupplier USING (idSupplier) WHERE idOrder='$idOrder'"; # Notify Supplier(s)
  23. $objRS = mysql_query($strSQL);
  24. while ($objRow=mysql_fetch_array($objRS)) {
  25. $strHeaders = "From: PADS Ltd <no-reply@pads.cor>\nContent-Type: text/html\n";
  26. $strMessage = "<html><body><img src=\"$website/images/emailheader.jpg\" /><table>\r\n";
  27. $strMessage .= "<tr><td><p style='font-family: Arial'>Hello " . $objRow['strCompanyName'] . "</p>\r\n<br />\r\n";
  28. $strMessage .= "<tr><td><p style='font-family: Arial'>An order has been created via PADS Ltd, please login for more information.</p>\r\n";
  29. $strMessage .= "</td></tr></table></body></html>";
  30. #mail($objRow['strCompanyEmail'], $strSubject, $strMessage, $strHeaders);
  31. mail('enquiries@pads.cor', $strSubject, $strMessage, $strHeaders);
  32. }
  33. sendConfirmationEmail($idOrder);
  34. } else {
  35. echo '<br/>No email sent!';
  36. }
  37. } else {
  38. echo '<br/>Nothing to do!<hr>';
  39. }


Ten post edytował PHPRexio 5.11.2016, 21:24:32
Go to the top of the page
+Quote Post
SmokAnalog
post 5.11.2016, 21:27:51
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Tak jak mówiłem: albo przekierować, czyli po prostu:
  1. header('Location: ' . $redirectUrl . (strpos($redirectUrl, '?') === false ? '?' : '&') . http_build_query(['payment_status' => 'Completed']));


Albo wysłać zapytanie cURL-em / inną biblioteką. Tu masz przykład na cURL: http://php.net/manual/en/curl.examples-basic.php

Ten post edytował SmokAnalog 5.11.2016, 21:28:24
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 01:24