Paypal IPN Verification from return_url is INVALID but from notify_url is VERIFIED

微笑、不失礼 提交于 2019-12-11 12:27:34

问题


I am using Paypal subscription, standard website button. So for this question, the payment_type is subscr_signup, for creating user account for your new user. My HTML button form has values for "notify_url" set to http://domain.com/billing/ipn, "return" set to http://domain.com/billing/thankyou, and "rm" set to 2

With this, when someone completes the payment, s/he will be redirected to our thank you page, along with the IPN data in POST. I got that. But when I verify it with Paypal, I got an INVALID response. Now, here's the strange thing, we should also get the data to our IPN notify_url, right? And we did, but this time, verifying it to Paypal returns VERIFIED.

I notice some differences in the data that is sent.

Data for RETURN thank you page - INVALID (JSON-ified)

{
"txn_type": "subscr_signup",
"subscr_id": "I-HHTJ0ANUHKRU",
"last_name": "Ismail",
"residence_country": "CA",
"mc_currency": "USD",
"item_name": "Individual eStudio Plan",
"business": "business@kengkawan.com",
"amount3": "99.00",
"recurring": "1",
"address_street": "1 Maire-Victorin",
"payer_status": "verified",
"payer_email": "customer@kengkawan.com",
"address_status": "confirmed",
"first_name": "Iszuddin",
"receiver_email": "business@kengkawan.com",
"address_country_code": "CA",
"payer_id": "LYRHTKFEH45M8",
"address_city": "Toronto",
"reattempt": "1",
"item_number": "IND",
"address_state": "Ontario",
"subscr_date": "22:52:19 Oct 29, 2014 PDT",
"address_zip": "M5A 1E1",
"charset": "windows-1252",
"period3": "1 Y",
"address_country": "Canada",
"mc_amount3": "99.00",
"address_name": "Iszuddin Ismail",
"auth": "AUjfQ4uRNLr22YfSNPGR1YLm5w81cYyFjf9PEu7mVGSLTp2cFD67opAIXJ-Dtsnw4KEXlF0Y268Ks9VmrwpDRrg",
"form_charset": "UTF-8"
}

Data for NOTIFY_URL, backend IPN data - VERIFIED (JSON-ified)

{
"txn_type": "subscr_signup",
"subscr_id": "I-HHTJ0ANUHKRU",
"last_name": "Ismail",
"residence_country": "CA",
"mc_currency": "USD",
"item_name": "Individual eStudio Plan",
"business": "business@kengkawan.com",
"amount3": "99.00",
"recurring": "1",
"address_street": "1 Maire-Victorin",
"verify_sign": "Ajiy6YmBz00sV0oT2S-obuaQ3kehAQO0-T8GJFKpiQnaRzRv7.oJ5Eqy",
"payer_status": "verified",
"test_ipn": "1",
"payer_email": "customer@kengkawan.com",
"address_status": "confirmed",
"first_name": "Iszuddin",
"receiver_email": "business@kengkawan.com",
"address_country_code": "CA",
"payer_id": "LYRHTKFEH45M8",
"address_city": "Toronto",
"reattempt": "1",
"item_number": "IND",
"address_state": "Ontario",
"subscr_date": "22:52:19 Oct 29, 2014 PDT",
"address_zip": "M5A 1E1",
"charset": "windows-1252",
"notify_version": "3.8",
"period3": "1 Y",
"address_country": "Canada",
"mc_amount3": "99.00",
"address_name": "Iszuddin Ismail",
"ipn_track_id": "698ae88a36ef9"
}

Since I do get expected response (VERIFIED or INVALID), I believe my verification code for Paypal IPN is correct. But just in case, here is my HTML button code.

            <form action="<?php echo $this->url?>" method="post" name="ppform">
         <input type="hidden" name="cmd" value="_xclick-subscriptions">
         <input type="hidden" name="business" value="<?php echo $this->paypal_email; ?>">
         <input type="hidden" name="item_name" value="<?php echo $selected_plan['name'] ?>"> 
         <input type="hidden" name="item_number" value="<?php echo $selected_plan['code'] ?>"> 
         <input type="hidden" name="a3" value="<?php echo $selected_plan['price']; ?>"> <!-- subscription price -->
         <input type="hidden" name="p3" value="1">  <!-- rebill every x value -->
         <input type="hidden" name="t3" value="<?php echo $selected_plan['recurring_period'] ?>">  <!-- interval M=month/W=week/Y=year -->
         <input type="hidden" name="src" value="1"> <!-- Is this recurring 1=yes/0=no -->
         <input type="hidden" name="currency_code" value="<?php echo $selected_plan['currency'] ?>">
         <!-- <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> -->
         <input type="hidden" name="rm" value="2">
         <input type="hidden" name="notify_url" value="<?php echo site_url('billing/ipn') ?>">
         <input type="hidden" name="return" value="<?php echo site_url('billing/thankyou') ?>">

        </form>     

回答1:


return_url do not recieve any payment/IPN information. Usually it should be just a static page which displays "Thank you, come again".

You should verify IPN messages with notify_url. You need to send recieved payment data exactly the same way it was recieved. If you recieve INVALID error on a good request, you should double check encoding in which you get the request, store in php and send back. You can use PayPal PHP SDK to be sure in the payment code.

Please note IPN sends a bunch of messages on Subscription user registration, payment processing and so on.



来源:https://stackoverflow.com/questions/26646359/paypal-ipn-verification-from-return-url-is-invalid-but-from-notify-url-is-verifi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!