سؤال

أحاول رد الاتصال بالهاتف، باستخدام Servlet. يتم توفير التعليمات البرمجية التي أستخدمها بواسطة PayPal للتحقق من بيانات IPN. ولكن في كل مرة أحصل عليها غير صالحة استجابة.

هنا هو الرمز:

Enumeration en = req.getParameterNames();
String str = "cmd=_notify-validate";

    while (en.hasMoreElements()) {        
        String paramName = (String) en.nextElement();
        String paramValue = req.getParameter(paramName);

//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"UTF-8"); // for UTF-8 i set the encode format in my account as UTF-8
//str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue,"ISO-8859-1");// for ISO-8859-1 i set the encode format in my account as ISO-8859-1
str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); //default as provided by paypal

    }
    URL u = new URL("http://www.sandbox.paypal.com/cgi-bin/webscr");
    URLConnection uc = u.openConnection();
    uc.setDoOutput(true);
    uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    PrintWriter pw = new PrintWriter(uc.getOutputStream());
    pw.println(str);
    pw.close();

    BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
    String res = in.readLine();
    in.close();

    if (res.equals("VERIFIED") || !res.equals("VERIFIED")) {
        //Update database...
    } else if (res.equals("INVALID")) {      
       //INVALID   
    }

لقد راجعت جميع الاحتمالات الثلاث التي توفرها باي بال في حالة إرجاع PayPal غير صالح على النحو التالي:

1) المعلمات المفقودة - كما أرسل جميع المعلمات أي مشكلة في المعلمات المفقودة

2) عنوان URL غير صالح. - أنا أستخدم Sandbox حتى عنوان URL هو: http://www.sandbox.paypal.com/cgi-bin/webscr.

3) ترميز الأحرف. - حاول مع ترميز الأحرف نفسها كإشتراك المعلمة حساب PayPal.

الطلب الذي أرسله إلى PayPal باستخدام المعلمات التالية:

cmd=_notify-validate&last_name=User&test_ipn=1&address_name=Test+User&txn_type=web_accept&receiver_email=sellr1_1252495907_biz%40gmail.com&residence_country=US&address_city=San+Jose&payment_gross=&payment_date=01%3A55%3A04+Sep+26%2C+2009+PDT&address_zip=95131&payment_status=Completed&address_street= 1+Main+St&first_name=Test&payer_email=buyer1_1252495751_per%40gmail.com&protection_eligibility=Eligible&payer_id=BXBKS22JQCUWL&verify_sign=AOMkeg7ofCL7FJfioyWA19uCxD4XAgZirsjiGh8cUy1fd2YAqBwOkkst&payment_type=instant&business=sellr1_1252495907_biz%40gmail.com&address_country_code=US&mc_fee=0.64&address_status=confirmed&transaction_subject=True+Up&quantity=1¬ify_version=2.8&mc_currency=EUR&custom=&address_state= ca & payment_fee_fee = & handling_amount = 0.00 & payer_status = التحقق والشحن = 0.00 & item_name = true + up & diction = hannonj & itemset = hannonj & itemset = windows-1252 & item_number = 567 & mc_gross = 10.00 & txn_id = 7f456350bs7942738 & receiver_id = massu6bsr9sc2 & attain_country = United One

من فضلك، هل يمكن لأي شخص توجيه لي إلى الاتجاه الصحيح؟ أنا لا أحصل على الخطأ الرمز أو عنوان URL أو أي شيء آخر. حاولت كل الاحتمالات. ساعدني من فضلك.

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

المحلول 3

شكرا يا رفاق ردكم. أوها أنا حلها في النهاية.

في الواقع في إخطار عنوان URL، أضفت أيضا معلمة اسم المستخدم. تريد PayPal قيم المعلمة ل IPN نفسها كما تعود إلى Servlet. (يمكنك الحصول عليه كإعادة req.getparameternames ()). كما لدي اسم مستخدم إضافي، وهو غير معروف ب PayPal. كان paypal يعود غير صالح.

نصائح أخرى

"غير صالحة"الرسالة ترجع إلى الأسباب التالية:

  • تحقق من أن لديك نشر ردكم على عنوان URL الصحيح, ، الذي https://www.sandbox.paypal.com/cgi-bin/webscr. أو https://www.paypal.com/cgi-bin/webscr., ، اعتمادا على ما إذا كنت تختبر في صندوق الرمل أو كنت تعيش، على التوالي.
  • تحقق من أن ردك على رسالة اختبار IPN يحتوي بالضبط نفس المتغيرات والقيم كما رسالة الاختبار وأنهم في نفس الترتيب كما في رسالة الاختبار. وبعد أخيرا، تحقق من أن المتغيرات الأصلية تسبقها CMD = _NOTIFY- التحقق من صحة المتغير.
  • تأكد من أنك التشفير سلسلة الاستجابة الخاصة بك وتستخدم نفس ترميز الشخصية كما هو مستخدم في رسالة اختبار IPN. (على سبيل المثال، أستطيع أن أرى أنه يستخدم رسائل مع Umlaut والرموز الأخرى مثل "/"، إلخ). فيما يتعلق بالنقطة الأخيرة، يمكن للتاجر محاولة تغيير لغة الترميز المستخدمة في حساب PayPal الخاص به، بعد الخطوات التالية:

    1. تسجيل الدخول عن حساب PayPal
    2. انقر فوق ملف التعريف
    3. انقر فوق علامة التبويب "بلدي بيع تفضيلات"
    4. انقر فوق "ترميز لغة زر PayPal" (في نهاية الصفحة)
    5. انقر فوق "خيارات أخرى"
    6. اختر من القائمة المنسدلة: UTF-8
    7. اختر نفس المجدد أيضا للخيار الثاني، والذي يرتبط IPN
    8. انقر فوق "حفظ"

إذا استمرت المشكلة، نوصي بمراجعة البرنامج النصي قيد الاستخدام، باي بال يحتوي على بعض عينات رمز IPN المتاحة في: https://github.com/paypal/ipn-code-samples.

للحصول على معلومات إضافية، أدرج الرابط: https:/developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/ipntesting/#id091gfe00wy4.

أنا متأكد من أن عنوان URL لإرساله إليه هو مجرد "www.sandbox.paypal.com"، انظر الفصل 4 من دليل مستخدم Sandbox، وبصحة جيدة، وهذا ما وضعته للحصول على الرمز الخاص (بالمناسبة، للعيش، هو أيضا فقط "www.paypal.com"، ل عينة من الرموز)

إذا كنت تختبر PayPal IPN عبر SSL، فسيتعين عليك استخدامها SSL: //www.sandbox.paypal.com. على المنفذ 443

تذكر أن Sandbox PayPal لديه بيانات اعتماد مختلفة تماما. يجب أن يكون لديك حساب تطوير وتسجيل الدخول إلى لوحة التطوير لاستخدام Sandbox.

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