سؤال

أنا مبتدئ نسبي PHP في تنفيذ مستمع PayPal IPN ويبدو أن كل شيء يعمل بشكل جيد ، إلا أنني لا أعرف حقًا كيفية التحقق من رمز الاستجابة.

لقد جربت شيئًا قبيحًا مع حليقة ولكنه لا يعمل على الإطلاق (أنا لا أفهم حليقة).

لقد جربت قطعة الكود هذه التي أمسك بها من مكان ما على الشبكة:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$response_headers = get_headers($fp);
$response_code = (int)substr($response_headers[0], 9, 3);

... لكنها لا تعمل (إرجاع $ reponse_code = 0).

حتى الآن ، أقوم بتصحيح رمز IPN الخاص بي دون التحقق من استجابة 200.

هل يمكن لأي شخص أكثر خبرة أن ينصحني بما هي الطريقة المناسبة/البسيطة للتحقق من ذلك؟

شكرًا

هل كانت مفيدة؟

المحلول

إنه get_headers ($ url) ، وليس get_headers ($ fp). ما لم أقرأها بشكل خاطئ تمامًا (وهناك طريقة أخرى لم أرها من قبل) ، فأنت بحاجة إلى تمرير عنوان URL الذي تقرأ منه ، وليس مقبض المقبس. في الواقع ، يبدو أنه لا يعمل ، لذلك سيكون عديمة الفائدة لمهمتك الحالية.

Fsockopen (...) هي وظيفة المستوى الأدنى (TCP/IP). يرجع مقبض المقبس ، وليس مقبض حليقة. ولهذا السبب لا يمكنك استخدام curl_getinfo (...) عليه. تريد شيئًا كهذا ...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($fp, CURLOPT_POST, true);
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($fp);

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);

باستثناء ما أتذكر ، تحتاج إلى إضافة "cmd = _notify-viated" إلى حقول البريد.

لا تستخدم fsockopen (...). نعم ، أنا أعلم ، هذا ما يفعله رمز عينة PayPal. ولكن من المفترض أن يركض في كل مكان ، ولا يمكن الاعتماد على تثبيت حليقة. يمكنك ، لذلك استخدمه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top