Andy Castles
Andy Castles

Reputation: 98

Is PayPal permission required to use SetExpressCheckout for a third party?

We are processing payments on behalf of third parties using SetExpressCheckout. It appears to work correctly even though the third party has not granted us permissions. Are we doing it correctly?

From what I have understood, in order to process payment for a third party the third party should go to Tools > API credentials > Grant API Permission in their PayPal account and grant permission to our API username to Use Express Checkout to process payments. However, we have noticed two issues with this:

  1. If the third-party PayPal account is just a personal account (not a business account) then there is no option to grant API permissions
  2. Even if the non-business third-party PayPal account doesn't grant this permission we are still able to take payment into their account.

So the question is, is it actually necessary for a third party to grant us this permission in order for us to be able to process payments which are crediting their PayPal accounts?

In case you need more information, here is a cut-down version of the PHP code we are using to start the SetExpressCheckout request. We are specifying the third-party using the SUBJECT parameter of the request, this parameter is filled in with the email address of the third-party's PayPal account.

    // Parameters for SetExpressCheckout
    $requestParams = array(
        'METHOD' => 'SetExpressCheckout',
        'VERSION' => $this->_version,
        'PAYMENTREQUEST_0_DESC' => "Order number",
        'PAYMENTREQUEST_0_AMT' => 10,
        'PAYMENTREQUEST_0_CURRENCYCODE' = 'EUR',
        'PAYMENTREQUEST_0_ITEMAMT' => 10,
        'RETURNURL' => "http://SUCCESS_URL_TO_RETURN_TO",
        'CANCELURL' => "http://FAILURE_URL_TO_RETURN_TO",
        'USER' => 'OUR_API_USERNAME',
        'PWD' => 'OUR_API_PASSWORD',
        'SIGNATURE' => 'OUR_API_SIGNATURE',
        'SUBJECT' => 'THIRD_PARTY_EMAIL'
    );

    // Options for curl
    $curlOptions = array (
        CURLOPT_URL => 'https://api-3t.paypal.com/nvp',
        CURLOPT_VERBOSE => 1,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_CAINFO => 'cacert.pem', //CA cert file
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => http_build_query($requestParams)
    );

    // Send the curl request
    $ch = curl_init();
    curl_setopt_array($ch,$curlOptions);
    $response = curl_exec($ch);

    // Handle possible errors
    if (curl_errno($ch)) {
        //Handle errors
    } else  {
        // Handle success
    }
    curl_close($ch);

If third-party accounts are not required to grant us permission then we can simplify setup of PayPal by simply asking for their PayPal account's email address, and not have to bother them with granting permissions.

Many thanks for any information you can give.

Upvotes: 1

Views: 508

Answers (1)

PP_Punna
PP_Punna

Reputation: 436

There are two ways to make API calls on behalf of others. 1) Grant API permissions from merchant PayPal account to API caller OR 2) Use SUBJECT NVP variable with the merchant PayPal account email address('SUBJECT' => 'THIRD_PARTY_EMAIL').

So you can make the API calls on behalf of the merchant just by using the SUBJECT NVP variable with merchant PayPal account email address, here the merchant no need to grant API permissions to you.

Upvotes: 1

Related Questions