Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PayPal Sandbox - jak testować?
ZaqU
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 21.01.2013

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


Witajcie,

Natknąłem się na pewien problem z którym nie mogę sobie poradzić. Pytanie do osób, które miały już styczność z podłączaniem i testowaniem płatności PayPal. Mam do dyspozycji skrypt systemu depozytów z codecanyon
http://codecanyon.net/item/deposit-system/59753
i chciałbym go dostosować do własnych potrzeb. Działa on na takiej zasadzie, że wysyła następujący formularz:
  1. <form name="depositform" id="depositform" method="post" action="<?php echo self::payment_action(); ?>">
  2. <input type="hidden" name="rm" value="2"/>
  3. <input type="hidden" name="cmd" value="_xclick"/>
  4. <input type="hidden" name="business" value="<?php echo $paypalmail; ?>"/>
  5. <input type="hidden" name="item_name" value="Deposit cash"/>
  6. <input type="hidden" name="no_shipping" value="1"/>
  7. <input type="hidden" name="return" value="<?php echo $siteurl; ?>deposit_example.php?action=success"/>
  8. <input type="hidden" name="notify_url" value="<?php echo $siteurl; ?>includes/depositipn.php"/>
  9. <input type="hidden" name="cancel_return" value="<?php echo $siteurl; ?>deposit_example.php?action=cancel"/>
  10. <input type="hidden" name="custom" value="<?php echo $useridentify; ?>" />
  11. <input type="hidden" name="amount" value="<?php echo $amount; ?>" />
  12. <p><?php echo $depositconfirm; ?></p>
  13. <input type="submit" name="checkout" value="Proceed with payment" />
  14. </form>

na adres: https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_flow&SESSION=...&dispatch=...

Niestety nie wiem co dalej. Po wypełnieniu formularza pojawia się informacja że płatność została zaakceptowana, na podany adres e-mail przyjdzie potwierdzenie, a niestety nie działa to tak jak powinno, tj. nie wysyła maila i nie zapisuje w systemie płatności. Muszę przetestować czy ten system działa, ale jak na razie nie wiem jak. To czego potrzebuję, to informacja na temat tego jakie API wykorzystuje podana wyżej metoda i gdzie szukać dokumentacji do niej (PayPal oferuje dziesiątki różnych API i trudno się połapać, a nigdy wcześniej nie korzystałem z tego systemu).
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ZaqU
post
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 21.01.2013

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


Świetnie, to było coś czego szukałem!

Zastanawiam się jednak jak obsłużyć i zweryfikować przesłane przez PayPal dane. Chodzi przede wszystkim o bezpieczeństwo, poprzez weryfikację czy nadesłane dane pochodzą ze strony PayPal czy nie. W poniższym kodzie program dochodzi wyłącznie do BREAKPOINTów 1 i 6 (linie: 31 i 81), pozostałe omija, nie wiem dlaczego...


  1. <?php
  2. include("../config/config.inc.php");
  3. include("../config/siteinfo.php");
  4. include("../classes/Site.php");
  5.  
  6. //paypal or sandbox?
  7. if($testmode === true)
  8. {
  9. $paypalaction = "ssl://www.sandbox.paypal.com";
  10. } else {
  11. $paypalaction = "ssl://www.paypal.com";
  12. }
  13. // read the post from PayPal system and add 'cmd'
  14. $req = 'cmd=_notify-validate';
  15. foreach ($_POST as $key => $value)
  16. {
  17. $value = urlencode(stripslashes(mysqli_real_escape_string($link, $value)));
  18. $req .= "&$key=$value";
  19. }
  20.  
  21. // post back to PayPal system to validate
  22. $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
  23. $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  24. $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
  25. $fp = fsockopen ($paypalaction, 443, $errno, $errstr, 30);
  26.  
  27. // assign posted variables to local variables
  28. $user_id = mysqli_real_escape_string($link, $_POST['custom']);
  29. $txn_id = mysqli_real_escape_string($link, $_POST['txn_id']);
  30. $payment_amount = mysqli_real_escape_string($link, $_POST['mc_gross']);
  31. $receiver_email = mysqli_real_escape_string($link, $_POST['receiver_email']);
  32. $payer_email = mysqli_real_escape_string($link, $_POST['payer_email']);
  33.  
  34. if ($fp)
  35. {
  36. fputs ($fp, $header . $req);
  37. while (!feof($fp))
  38. {
  39. // [BREAKPOINT 1]
  40. $res = fgets ($fp, 1024);
  41. if (strcmp ($res, "VERIFIED") == 0)
  42. {
  43. //allready exist
  44. $check = mysqli_num_rows(mysqli_query($link, "SELECT * FROM deposit_history WHERE unique_code='".$txn_id."'"));
  45. if($check == 0)
  46. {
  47. $params = array(
  48. 'userid' => $_POST['custom'],
  49. 'txn_id' => $_POST['ipn_track_id'],
  50. 'amount' => $_POST['payment_gross'],
  51. 'payermail' => $_POST['payer_email'],
  52. );
  53. // [BREAKPOINT 2]
  54. Site::processPayment($params);
  55. // [BREAKPOINT 3]
  56. }
  57. else
  58. {
  59. $headers = "From:".$adminmail."\r\n";
  60. $mailmessage = Site::loadMailTemplate('transaction_duplicate.html', array(
  61. 'username' => $depositcash->$username,
  62. 'sitename' => $sitename,
  63. ));
  64. mail($payer_email,"Your deposit failed",$mailmessage,$headers);
  65. // [BREAKPOINT 4]
  66. }
  67. }
  68. elseif (strcmp ($res, "INVALID") == 0)
  69. {
  70. // PAYMENT INVALID & INVESTIGATE MANUALY!
  71. $headers = "From:".$adminmail."\r\n";
  72. $mailmessage = Site::loadMailTemplate('deposit_error.html', array(
  73. 'username' => $depositcash->$username,
  74. 'amount' => $amount,
  75. 'sitename' => $sitename,
  76. ));
  77. mail($payer_email,"Failure of your deposit",$mailmessage,$headers);
  78. // [BREAKPOINT 5]
  79. }
  80. }
  81. // [BREAKPOINT 6]
  82. fclose ($fp);
  83. }


Ten post edytował ZaqU 8.01.2015, 21:08:26
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 12.10.2025 - 15:05