Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przelewy24 twierdzi że pola są puste
Forum PHP.pl > Forum > PHP
GOKOP
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
nospor
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.