Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przelewy24 twierdzi że pola są puste
GOKOP
post 19.07.2019, 14:59:02
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.07.2019

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


Próbuję zaimplementować płatności przez Przelewy24 w pluginie do WordPressa, korzystając z api opartego o POST. Sytuacja wygląda tak że nie chcę używać do tego stricte formularza, więc chciałem "zasymulować" jego użycie curlem.
Problem mam taki, że Przelewy24 na moje zapytanie o stworzenie płatności odpowiada twierdzeniem, że pola są puste i nie mogę się dopatrzeć błędu.

To jest funkcja wysyłająca zapytanie:
  1. function p24RequestOrder($pid, $session_id) {
  2. $plugindir = __DIR__;
  3. $pluginurl = str_replace($_SERVER['DOCUMENT_ROOT'], '', $plugindir);
  4. $notifyurl = get_bloginfo('wpurl').$pluginurl.'/p24_notif.php';
  5. $confirmurl = get_bloginfo('wpurl').$pluginurl.'/potwierdzenie.php?posttype=paid';
  6.  
  7. $price = returnme('cena')*100; //cena w groszach
  8. $email = returem('email', $pid);
  9.  
  10. $fields = array (
  11. "p24_merchant_id" => returnme('p24_merchant_id'),
  12. "p24_pos_id" => returnme('p24_merchant_id'),
  13. "p24_session_id" => $session_id,
  14. "p24_amount" => $price,
  15. "p24_currency" => "PLN",
  16. "p24_description" => $pid,
  17. "p24_email" => $email,
  18. "p24_country" => "PL",
  19. "p24_url_return" => $confirmurl,
  20. "p24_url_status" => $notifyurl,
  21. "p24_quantity_1" => 1,
  22. "p24_price_1" => $price,
  23. "p24_api_version" => 3.2,
  24. );
  25. $fields['p24_sign'] = p24SignOrder($fields);
  26.  
  27. $headers = array('Content-Type: multipart/form-data');
  28. $request = http_build_query($fields);
  29. $answer = callAPI('POST', $GLOBALS['p24_url'].'trnRegister', $request, $headers);
  30. parse_str($answer, $order_data);
  31.  
  32. //zeby wiedzieć co się dzieje
  33. echo "<script type='text/javascript'>alert('$request $answer');</script>";
  34.  
  35. if($order_data['error'] != 0) {
  36. return false;
  37. } else {
  38. return $order_data['token'];
  39. }
  40. }


p24SignOrder() to funkcja obliczająca podpis, ale raczej nie jest tu istotna. $GLOBALS['p24_url'] w momencie wykonywania jest równe "htps:/sandbox.przelewy24.pl/".
returnme() i returem() to funkcje komunikujące się z tabelą pluginu na którym pracuję w bazie (nazywały się tak już kiedy dostałem ten kod). Wiem o nich że działają bo są używane w wielu miejscach.

To jest callAPI():
  1. function callAPI($method, $url, $data, $headers=array()){
  2. $curl = curl_init();
  3.  
  4. switch ($method){
  5. case "POST":
  6. curl_setopt($curl, CURLOPT_POST, 1);
  7. if ($data)
  8. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  9. break;
  10. case "PUT":
  11. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
  12. if ($data)
  13. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  14. break;
  15. default:
  16. if ($data)
  17. $url = sprintf("%s?%s", $url, http_build_query($data));
  18. }
  19.  
  20. // OPTIONS:
  21. curl_setopt($curl, CURLOPT_URL, $url);
  22.  
  23. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  24.  
  25. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  26. curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
  27.  
  28. // EXECUTE:
  29. $result = curl_exec($curl);
  30. if(!$result){$result = false;}
  31. curl_close($curl);
  32. return $result;
  33. }


Nie jestem też pewien czy podaję wszystkie pola które są wymagane ale na razie jestem skupiony na tym że te które podaję Przelewy24 uważa za puste.
Tak wygląda przykładowe moje zapytanie, imo wszystko jest dobrze no ale chyba jednak nie jest. Zmieniłem tylko adres strony, mail itd.
Kod
p24_session_id=ed5cb7dbbaaab076a24912c1d698bbcd&p24_amount=1000&p24_currency=PLN&p24_description=53&p24_email=mail%40server.pl&p24_country=PL&p24_url_return=http%3A%2F%2Fwww.mojastrona.pl%2Fwp-content%2Fplugins%2Fmoj-plugin%2Fpotwierdzenie.php%3Fposttype%3Dpaid&p24_url_status=http%3A%2F%2Fwww.mojastrona.pl%2Fwp-content%2Fplugins%2Fmoj-plugin%2Fp24_notif.php&p24_quantity_1=1&p24_price_1=1000&p24_api_version=3.2&p24_sign=66802c550d1e553ff27af4b5ffd66648


To natomiast odpowiedź:
Kod
error=1&errorMessage=p24_merchantId:Incorrect merchant_id&p24_posId:Incorrect pos_id&p24_sessionId:Empty p24_sessionId&p24_email:Empty p24_email&p24_urlReturn:Empty p24_urlReturn&p24_urlCancel:Empty p24_urlCancel&p24_amount:Incorrect value


Wygląda na to że niepotrzebnie wywoływałem http_build_query(), bez tego działa. Jednak nadal jest problem.
Co prawda pytanie niezwiązane już z php ale może wie ktoś która wartość z panelu Przelewy24 to merchant_id? Myślałem że liczba po "Dane konta" ale przelewy24 mi narzeka że nieprawidłowe
Go to the top of the page
+Quote Post
nospor
post 19.07.2019, 15:03:23
Post #2





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
może wie ktoś która wartość z panelu Przelewy24 to merchant_id? Myślałem że liczba po "Dane konta" ale przelewy24 mi narzeka że nieprawidłowe p


wg dokumentacji P24, merchant_id to ID sprzedawcy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 18.04.2024 - 22:22