Invalid PAYPAL IPN field

I am having problems implementing a PayPal recursive payment with an API process and a sandbox. I managed to create a subscription button and redirect the user to the PayPal express payment page. But the user field is missing in some IPN generated by paypal, and I really need this field.

Here are the requests that I send when creating a subscribe button:

METHOD=SetExpressCheckout &VERSION=94.0 &PWD=123456 & USER=myEmail@biz.com &SIGNATURE=mySignature &PAYMENTREQUEST_0_AMT=5.00 &PAYMENTREQUEST_0_PAYMENTACTION=Sale &PAYMENTREQUEST_0_CURRENCYCODE=EUR &RETURNURL=http%3A%2F%2Fwww.myWebSite.com?ok &CANCELURL=http%3A%2F%2Fwww.myWebSite.com?ko &L_BILLINGTYPE0=RecurringPayments &L_BILLINGAGREEMENTDESCRIPTION0=test+paypal &REQCONFIRMSHIPPING=0 &NOSHIPPING=1 &L_PAYMENTREQUEST_0_ITEMCATEGORY0=Digital &L_PAYMENTREQUEST_0_NAME0=test+paypal &L_PAYMENTREQUEST_0_AMT0=5.00 &L_PAYMENTREQUEST_0_QTY0=1 &PAYMENTREQUEST_0_CUSTOM=custom_var1%3Dvalue1%7Ccustom_var2%3Dvalue2 

After the user has confirmed the transaction, he returns to my site, and I have to check the information and create a duplicate profile. Here are my queries:

 METHOD=GetExpressCheckoutDetails &VERSION=94.0 &PWD=123456 & USER=myEmail@biz.com &SIGNATURE=mySignature &TOKEN=theToken METHOD=CreateRecurringPaymentsProfile &VERSION=94.0 &PWD=123456 & USER=myEmail@biz.com &SIGNATURE=mySignature &TOKEN=theToken &AMT=5.00 &CURRENCYCODE=EUR &PROFILESTARTDATE=2013-02-04T15%3A16%3A24%2B01%3A00 &BILLINGPERIOD=Day &BILLINGFREQUENCY=1 &DESC=test+paypal METHOD=DoExpressCheckoutPayment &VERSION=94.0 &PWD=123456 & USER=myEmail@biz.com &SIGNATURE=mySignature &TOKEN=theToken &PAYERID=JZUVX4TAHRHRU &PAYMENTREQUEST_0_PAYMENTACTION=Sale &PAYMENTREQUEST_0_AMT=5.00 &PAYMENTREQUEST_0_CURRENCYCODE=EUR &PAYMENTREQUEST_0_NOTIFYURL=http%3A%2F%2Fwww.myWebSite.com?notify &PAYMENTREQUEST_0_CUSTOM=custom_var1%3Dvalue1%7Ccustom_var2%3Dvalue2 

After that, I get these IPNs:

 Array ( [transaction_subject] => test paypal [payment_date] => 06:01:52 Feb 04, 2013 PST [txn_type] => express_checkout [last_name] => numerik [residence_country] => FR [item_name] => [payment_gross] => [mc_currency] => EUR [payment_type] => instant [protection_eligibility] => Ineligible [verify_sign] => myVerifySign [payer_status] => verified [test_ipn] => 1 [tax] => 0.00 [payer_email] => myEmail@per.com [txn_id] => 6XC11065S3796804E [quantity] => 1 [receiver_email] => myEmail@biz.com [first_name] => buyer [payer_id] => myPayerId [receiver_id] => myReceiverId [item_number] => [handling_amount] => 0.00 [payment_status] => Completed [payment_fee] => [mc_fee] => 0.42 [shipping] => 0.00 [mc_gross] => 5.00 [custom] => custom_var1=value1|custom_var2=value2 [charset] => windows-1252 [notify_version] => 3.7 [ipn_track_id] => ab76ea3421261 ) Array ( [payment_cycle] => Daily [txn_type] => recurring_payment_profile_created [last_name] => numerik [next_payment_date] => 02:00:00 Feb 04, 2013 PST [residence_country] => FR [initial_payment_amount] => 0.00 [currency_code] => EUR [time_created] => 06:01:47 Feb 04, 2013 PST [verify_sign] => myVerifySign [period_type] => Regular [payer_status] => verified [test_ipn] => 1 [tax] => 0.00 [payer_email] => myEmail@per.com [first_name] => buyer [receiver_email] => myEmail@biz.com [payer_id] => myPayerId [product_type] => 1 [shipping] => 0.00 [amount_per_cycle] => 5.00 [profile_status] => Active [charset] => windows-1252 [notify_version] => 3.7 [amount] => 5.00 [outstanding_balance] => 0.00 [recurring_payment_id] => myRecurringPaymentId [product_name] => test paypal [ipn_track_id] => a8adfdf8b61d3 ) 

As you can see in the first IPN, custom fields are available, but not in the second. Does anyone know what I am missing to get a custom field in the second IPN?

+6
source share
2 answers

The DoExpressCheckoutPayment request includes a custom parameter, so you are returning it for this transaction. There is no built-in parameter in the CreateRecurringPaymentsProfile request, so it will not return.

However, it does not look like the user parameter is available for CRPP, so you will need to save your data locally and include the local record identifier in the PROFILEREFERENCE parameter of your CRPP request. That way, it will return to IPN as rp_invoice_id suggested, such as Matt Cole, and you can pull your user data from your database using this record identifier accordingly.

+7
source

It is best to add PROFILEREFERENCE to your CreateRecurringPaymentsProfile call. It will return to IPN as rp_invoice_id .

+4
source

All Articles