Question

How are you supposed to get the shipping info back from a Parallel Payment, using PayPal's Adaptive API system? Normally it would just get passed back as payer_country, etc - when the IPN script is requested. However, this doesn't seem to be the case.

Here are the params being passed in when the IPN script is called:

transaction[0].amount 
transaction[0].id 
verify_sign 
transaction[1].receiver 
reverse_all_parallel_payments_on_error 
transaction[1].pending_reason 
transaction[0].pending_reason 
transaction[1].id_for_sender_txn 
transaction[0].invoiceId 
payment_request_date 
test_ipn 
cancel_url 
charset 
return_url 
transaction[0].status_for_sender_txn 
ipn_notification_url 
transaction[1].is_primary_receiver 
transaction[1].status 
transaction_type 
transaction[1].amount 
transaction[0].status 
log_default_shipping_address_in_transaction 
transaction[0].receiver 
status 
transaction[0].id_for_sender_txn 
action_type 
fees_payer 
pay_key 
transaction[1].status_for_sender_txn 
transaction[0].paymentType 
transaction[1].invoiceId 
transaction[1].id 
sender_email 
notify_version 
transaction[1].paymentType 
transaction[0].is_primary_receiver 

If I then do a PaymentDetails API call, I get back stuff like:

$VAR1 = {
  'currencyCode' => 'USD',
  'responseEnvelope' => {
                          'correlationId' => '9944330ab9a8c',
                          'timestamp' => '2014-04-07T06:08:16.094-07:00',
                          'ack' => 'Success',
                          'build' => '10273932'
                        },
  'status' => 'COMPLETED',
  'senderEmail' => 'andy.aaaa@ultranerds.co.uk',
  'cancelUrl' => 'http://somesite.net/paypal/cancel.html',
  'paymentInfoList' => {
                         'paymentInfo' => [
                                            {
                                              'pendingRefund' => 'false',
                                              'receiver' => {
                                                              'accountId' => 'NY3AD33DD739C',
                                                              'email' => 'andy-xxx@ultranerds.com',
                                                              'amount' => '65.00',
                                                              'invoiceId' => '1022',
                                                              'primary' => 'false',
                                                              'paymentType' => 'GOODS'
                                                            },
                                              'transactionId' => '8E1114341X895213Y',
                                              'senderTransactionStatus' => 'COMPLETED',
                                              'senderTransactionId' => '5EV71352C33256006',
                                              'transactionStatus' => 'COMPLETED',
                                              'refundedAmount' => '0.00'
                                            },
                                            {
                                              'pendingRefund' => 'false',
                                              'receiver' => {
                                                              'accountId' => 'YYP5C69YWCMKE',
                                                              'email' => 'andy.yyy@gmail.com',
                                                              'amount' => '15.00',
                                                              'invoiceId' => '1023',
                                                              'primary' => 'false',
                                                              'paymentType' => 'GOODS'
                                                            },
                                              'transactionId' => '68H86656UP574062X',
                                              'senderTransactionStatus' => 'COMPLETED',
                                              'senderTransactionId' => '2XW88939LK1112523',
                                              'transactionStatus' => 'COMPLETED',
                                              'refundedAmount' => '0.00'
                                            }
                                          ]
                       },
  'feesPayer' => 'EACHRECEIVER',
  'actionType' => 'CREATE',
  'ipnNotificationUrl' => 'http://somesite.net/paypal/test_ipn.cgi',
  'sender' => {
                'useCredentials' => 'false',
                'accountId' => 'B74RBM5F6SLZG',
                'email' => 'andy.aaa@ultranerds.co.uk'
              },
  'returnUrl' => 'http://somesite.net/paypal/success.html',
  'payKey' => 'AP-4EK17906VB6613533',
  'reverseAllParallelPaymentsOnError' => 'false'
};

As you can see, there is no reference to the delivery address at all. How are you supposed to get that info back?

UPDATE: Mmm ok, so it looks like GetShippingAddresses is what I need - but for some reason its coming back with nothing in when I call it:

{"requestEnvelope":{"errorLanguage":"en_US","detailLevel":"ReturnAll"},"key":"AP-1B1377463N9785350"} /GetShippingAddresses_API_Operation/

...simply returns:

{
    'responseEnvelope' => {
                      'correlationId' => '3a4443aed09c9',
                      'timestamp' => '2014-04-07T06:40:35.460-07:00',
                      'ack' => 'Success',
                      'build' => '10273932'
                    }
}

I'm a bit baffled as to why its doing that. Any suggestions?

I found a quote here:

http://go.developer.ebay.com/devzone/articles/using-paypals-adaptive-payments-and-google-app-engine-build-online-market-python-part-3

Unfortunately, although this follows the process recommended by PayPal's documentation, it doesn't work. There's currently a bug in PayPal's Adaptive Payments implementation. For a traditional payment, the shipping address is not collected; for embedded payments, the GetShippingAddresses call does not return the shipping address.

PayPal has acknowledged the bug and indicated that it expects to have this fixed in April 2011. If you need shipping addresses right now, the recommendation is to collect them on your site rather than relying on the PayPal API.

That was from 2011... but is this still the case??

Sorry to bump - but has anyone got any suggestions?

Was it helpful?

Solution

Ok, well I got my answer - but unfortunately its not what I was hoping for:

Yes, unfortunately this feature is only available for embedded payment flow. https://developer.paypal.com/webapps/developer/docs/classic/adaptive-payments/ht_ap-embeddedPayment-curl-etc/

If you're using embedded payment flow, then you can retrieve the address on their PayPal account by passing in senderOptions.requireShippingAddressSelection = true during SetPaymentOption API call. You can then retrieve it via GetShippingAddresses API call.

So it looks like really what I need to do, is ask the user to provide their shipping information BEFORE sending them to paypal, then storing it. Not ideal - but I guess you just have to work with what you got!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top