Znote AAC - Paypal

Discussion in 'Requests' started by Schwarzbeere, Jun 18, 2017.

  1. Schwarzbeere

    Schwarzbeere BraveOnline Developer Premium User

    Joined:
    Feb 16, 2017
    Messages:
    72
    Likes Received:
    3
    Best Answers:
    0
    Hey @Znote ,

    can you help me?

    I got a payment via Paypal but the points are not added.

    Got this error-message in database znote_paypal.

    Thanks for your help.

    Code (Text):
    1.     //////////////
    2.     /// PAYPAL ///
    3.     //////////////
    4.  
    5.     // Write your paypal address here, and what currency you want to recieve money in.
    6.     $config['paypal'] = array(
    7.         'enabled' => true,
    8.         'email' => 'myemailadress', // Example: [email protected]
    9.         'currency' => 'EUR',
    10.         'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
    11.         'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
    12.         'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
    13.         'ipn' => "http://".$_SERVER['HTTP_HOST']."/ipn.php",
    14.         'showBonus' => false,
    15.     );
    16.  
    17.     // Configure the "buy now" buttons prices, first write price, then how many points you get.
    18.     // Giving some bonus points for higher donations will tempt users to donate more.
    19.     $config['paypal_prices'] = array(
    20.     //    price => points,
    21.         1 => 250, // -10% bonus
    22.         12 => 500, // 0% bonus
    23.         30 => 1500, // +10% bonus
    24.         60 => 3000, // +20% bonus
    25.     );
    26.  
    @Znote maybe this part of my config.php file is necessary for you to get the problem :-/

    do I need to edit something in the ipn.php?

    Code (Text):
    1. <?php
    2.     if (gethostbyaddr($_SERVER['REMOTE_ADDR']) !== 'notify.paypal.com') {
    3.         exit();
    4.     }
    5.  
    6.     // Require the functions to connect to database and fetch config values
    7.     require 'config.php';
    8.     require 'engine/database/connect.php';
    9.    
    10.     // Fetch and sanitize POST and GET values
    11.     function getValue($value) {
    12.         return (!empty($value)) ? sanitize($value) : false;
    13.     }
    14.     function sanitize($data) {
    15.         return htmlentities(strip_tags(mysql_znote_escape_string($data)));
    16.     }
    17.    
    18.     function VerifyPaypalIPN(array $IPN = null){
    19.         if(empty($IPN)){
    20.             $IPN = $_POST;
    21.         }
    22.         if(empty($IPN['verify_sign'])){
    23.             return null;
    24.         }
    25.         $IPN['cmd'] = '_notify-validate';
    26.         $PaypalHost = (empty($IPN['test_ipn']) ? 'www' : 'www.sandbox').'.paypal.com';
    27.         $cURL = curl_init();
    28.         curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
    29.         curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false);
    30.         curl_setopt($cURL, CURLOPT_URL, "https://{$PaypalHost}/cgi-bin/webscr");
    31.         curl_setopt($cURL, CURLOPT_ENCODING, 'gzip');
    32.         curl_setopt($cURL, CURLOPT_BINARYTRANSFER, true);
    33.         curl_setopt($cURL, CURLOPT_POST, true); // POST back
    34.         curl_setopt($cURL, CURLOPT_POSTFIELDS, $IPN); // the $IPN
    35.         curl_setopt($cURL, CURLOPT_HEADER, false);
    36.         curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    37.         curl_setopt($cURL, CURLOPT_FORBID_REUSE, true);
    38.         curl_setopt($cURL, CURLOPT_FRESH_CONNECT, true);
    39.         curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 30);
    40.         curl_setopt($cURL, CURLOPT_TIMEOUT, 60);
    41.         curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
    42.         curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
    43.             'Connection: close',
    44.             'Expect: ',
    45.         ));
    46.         $Response = curl_exec($cURL);
    47.         $Status = (int)curl_getinfo($cURL, CURLINFO_HTTP_CODE);
    48.         curl_close($cURL);
    49.         if(empty($Response) or !preg_match('~^(VERIFIED|INVALID)$~i', $Response = trim($Response)) or !$Status){
    50.             return null;
    51.         }
    52.         if(intval($Status / 100) != 2){
    53.             return false;
    54.         }
    55.         return !strcasecmp($Response, 'VERIFIED');
    56.     }
    57.  
    58.     // Fetch paypal configurations
    59.     $paypal = $config['paypal'];
    60.     $prices = $config['paypal_prices'];
    61.    
    62.     // Send an empty HTTP 200 OK response to acknowledge receipt of the notification
    63.     header('HTTP/1.1 200 OK');
    64.  
    65.     // Build the required acknowledgement message out of the notification just received
    66.     $req = 'cmd=_notify-validate';
    67.     foreach ($_POST as $key => $value) {
    68.         $value = urlencode(stripslashes($value));
    69.         $req  .= "&$key=$value";
    70.     }
    71.     $postdata = $req;
    72.    
    73.     // Assign payment notification values to local variables
    74.     $item_name        = $_POST['item_name'];
    75.     $item_number      = $_POST['item_number'];
    76.     $payment_status   = $_POST['payment_status'];
    77.     $payment_amount   = $_POST['mc_gross'];
    78.     $payment_currency = $_POST['mc_currency'];
    79.     $txn_id           = getValue($_POST['txn_id']);
    80.     $receiver_email   = getValue($_POST['receiver_email']);
    81.     $payer_email      = getValue($_POST['payer_email']);
    82.     $custom           = (int)$_POST['custom'];
    83.  
    84.     $connectedIp = $_SERVER['REMOTE_ADDR'];
    85.     mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'Connection from IP: $connectedIp', '0', '0', '0')");
    86.    
    87.     $status = VerifyPaypalIPN();
    88.     if ($status) {
    89.         // Check that the payment_status is Completed
    90.         if ($payment_status == 'Completed') {
    91.  
    92.            
    93.             // Check that txn_id has not been previously processed
    94.             $txn_id_check = mysql_select_single("SELECT `txn_id` FROM `znote_paypal` WHERE `txn_id`='$txn_id'");
    95.             if ($txn_id_check !== false) {
    96.                 // Check that receiver_email is your Primary PayPal email
    97.                 if ($receiver_email == $paypal['email']) {
    98.                    
    99.                     $status = true;
    100.                     $paidMoney = 0;
    101.                     $paidPoints = 0;
    102.  
    103.                     foreach ($prices as $priceValue => $pointsValue) {
    104.                         if ($priceValue == $payment_amount) {
    105.                             $paidMoney = $priceValue;
    106.                             $paidPoints = $pointsValue;
    107.                         }
    108.                     }
    109.  
    110.                     if ($paidMoney == 0) $status = false; // Wrong ammount of money
    111.                     if ($payment_currency != $paypal['currency']) $status = false; // Wrong currency
    112.                    
    113.                     // Verify that the user havent messed around with POST data
    114.                     if ($status) {
    115.                         // transaction log
    116.                         mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', '$payer_email', '$custom', '".$paidMoney."', '".$paidPoints."')");
    117.                        
    118.                         // Process payment
    119.                         $data = mysql_select_single("SELECT `points` AS `old_points` FROM `znote_accounts` WHERE `account_id`='$custom';");
    120.  
    121.                         // Give points to user
    122.                         $new_points = $data['old_points'] + $paidPoints;
    123.                         mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$custom'");
    124.                     }
    125.                 }  else {
    126.                     $pmail = $paypal['email'];
    127.                     mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'ERROR: Wrong mail. Received: $receiver_email, configured: $pmail', '0', '0', '0')");
    128.                 }
    129.             }
    130.         }
    131.     } else {
    132.         // Something is wrong
    133.         mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'ERROR: Invalid data. $postdata', '0', '0', '0')");
    134.     }
    135. ?>
    136.  
     
    Last edited by a moderator: Jun 20, 2017
  2. CipsoftStinks

    CipsoftStinks Old Tibia Player

    Joined:
    Oct 1, 2016
    Messages:
    566
    Likes Received:
    64
    Best Answers:
    2
    your paypal account is confirmed?
     
  3. Schwarzbeere

    Schwarzbeere BraveOnline Developer Premium User

    Joined:
    Feb 16, 2017
    Messages:
    72
    Likes Received:
    3
    Best Answers:
    0
    you mean the e-mail address confirmation? - Yes.
     
  4. Znote

    Znote <?php echo $title; ?> Staff Member Global Moderator Premium User

    Joined:
    Feb 14, 2008
    Messages:
    6,230
    Likes Received:
    963
    Best Answers:
    116
    Try out the new paypal system by replacing and creating these files:
    Znote AAC Paypal REST API prototype · GitHub

    Login with your paypal account at:
    developer.paypal.com

    create a new REST API app
    configure client_id and secret_id in config.php

    delete old znote_paypal table in database, and add the table.sql code in phpmyadmin --> database -> SQL to add the table for new system.

    This system uses cURL, to enable cURL in uniserver (web server) follow this guide: Paypal Php uniserver help

    let me know how it works
     
    Schwarzbeere likes this.
  5. Schwarzbeere

    Schwarzbeere BraveOnline Developer Premium User

    Joined:
    Feb 16, 2017
    Messages:
    72
    Likes Received:
    3
    Best Answers:
    0
    Hey @Znote

    did everything like you wrote it, when i click on purchase this is displayed:
    cURL is enabled, looked in the php info

    In the Paypal REST API, I choose the LIVE version, right?

    When I use the Sandbox Version (client_id & secret_id) this error shows on:
    Code (Text):
    1. Payment link ERROR
    2. Print: - stdClass Object
    3. (
    4.     [name] => INVALID_EXPERIENCE_PROFILE_ID
    5.     [message] => The requested experience profile ID was not found
    6.     [information_link] => https://developer.paypal.com/docs/api/payments/#errors
    7.     [debug_id] => e6245b508c012
    8. )
    9.  
    bump
     
    Last edited by a moderator: Oct 2, 2017
  6. Znote

    Znote <?php echo $title; ?> Staff Member Global Moderator Premium User

    Joined:
    Feb 14, 2008
    Messages:
    6,230
    Likes Received:
    963
    Best Answers:
    116
  7. Schwarzbeere

    Schwarzbeere BraveOnline Developer Premium User

    Joined:
    Feb 16, 2017
    Messages:
    72
    Likes Received:
    3
    Best Answers:
    0
    Sorry for the late reply, but I had some private issues.
    Code (Text):
    1. Request
    2. Print: - Array
    3. (
    4.     [amount] => 1
    5.     [PHPSESSID] => 0f43700335a84802ad1645d5f5d8d62c
    6. )
    7.  
    8.  
    9. Payment token
    10. Print: - stdClass Object
    11. (
    12.     [scope] => https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.*
    13.     [nonce] => 2017-09-22T13:20:28Z1yxISjdkkGZMT72cJPIa_xRb36D5ztlPYwZuS2K6KRA
    14.     [access_token] => A21AAHeB6cPnnKIk5wmppnHZD_x_R8BVCwzhu7MNOkfUufk0DP31LJk0spVkoW_2vX01e6YaHEBB-e9zRYA94Gt5PqW9dJjxA
    15.     [token_type] => Bearer
    16.     [app_id] => APP-80W284485P519543T
    17.     [expires_in] => 32051
    18. )
    19.  
    20.  
    21. Payment data
    22. Print: - Array
    23. (
    24.     [intent] => sale
    25.     [payer] => Array
    26.         (
    27.             [payment_method] => paypal
    28.         )
    29.  
    30.     [transactions] => Array
    31.         (
    32.             [0] => Array
    33.                 (
    34.                     [amount] => Array
    35.                         (
    36.                             [currency] => EUR
    37.                             [total] => 1
    38.                         )
    39.  
    40.                     [description] => Shop points on DESCENTIA
    41.                     [item_list] => Array
    42.                         (
    43.                             [items] => Array
    44.                                 (
    45.                                     [0] => Array
    46.                                         (
    47.                                             [quantity] => 1
    48.                                             [name] => 250 shop points.
    49.                                             [price] => 1
    50.                                             [currency] => EUR
    51.                                         )
    52.  
    53.                                 )
    54.  
    55.                         )
    56.  
    57.                 )
    58.  
    59.         )
    60.  
    61.     [experience_profile_id] => XP-QVHM-88XN-YHPC-V9CE
    62.     [redirect_urls] => Array
    63.         (
    64.             [return_url] => http://www.descentia.com/paypal_process.php
    65.             [cancel_url] => http://www.descentia.com/failed.php
    66.         )
    67.  
    68. )
    69.  
    70.  
    71. Payment link ERROR
    72. Print: - stdClass Object
    73. (
    74.     [name] => INVALID_EXPERIENCE_PROFILE_ID
    75.     [message] => The requested experience profile ID was not found
    76.     [information_link] => https://developer.paypal.com/docs/api/payments/#errors
    77.     [debug_id] => da609f92852b6
    78. )
    That is the log.

    @Znote
    BUMP :)
     
    Last edited by a moderator: Oct 2, 2017
  8. Znote

    Znote <?php echo $title; ?> Staff Member Global Moderator Premium User

    Joined:
    Feb 14, 2008
    Messages:
    6,230
    Likes Received:
    963
    Best Answers:
    116
    Experience profile ID is invalid, try to generate a new profile:
    In your database, find the table znote_global_storage, and look for storage key paypal_profile_id, delete it.
    Try a new payment, see if you get a new ID. Current ID is (XP-QVHM-88XN-YHPC-V9CE).
     
    Cepeen likes this.
  9. Schwarzbeere

    Schwarzbeere BraveOnline Developer Premium User

    Joined:
    Feb 16, 2017
    Messages:
    72
    Likes Received:
    3
    Best Answers:
    0
    I created an new Sandbox Account and new REST API, but it's getting the same experience ID, can you help me fixing it? - maybe you can configurate my PayPal account? - If yes, just write me P.M.

    If I try to buy points on the Website, this error shows up:

    Code (Text):
    1. Request
    2. Print: - Array
    3. (
    4.     [amount] => 1
    5.     [PHPSESSID] => de65467c062e2e49a9f965344b6a6a06
    6. )
    7.  
    8.  
    9. Payment token
    10. Print: - stdClass Object
    11. (
    12.     [scope] => https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.*
    13.     [nonce] => 2017-10-02T18:22:22Z_t3YtvyS8ePOdgcpJmUxGIRRChGYEeGAZ2HfPJeGFOY
    14.     [access_token] => A21AAEbcvFgh2gN0RkfFdE3i-FKs-Zo3f8_gkDInKMl7gnhUST7-IMsscfeVN8qrNT6zPxjPG1XNcTqVnEPJpIzLuBp6nK82A
    15.     [token_type] => Bearer
    16.     [app_id] => APP-80W284485P519543T
    17.     [expires_in] => 32400
    18. )
    19.  
    20.  
    21. Profile return data
    22. Print: - stdClass Object
    23. (
    24.     [id] => XP-DCFR-XRDB-4D84-RSA3
    25.     [name] => paypalProfile
    26.     [temporary] =>
    27.     [input_fields] => stdClass Object
    28.         (
    29.             [no_shipping] => 1
    30.             [address_override] => 1
    31.         )
    32.  
    33. )
    34.  
    35.  
    36. Payment data
    37. Print: - Array
    38. (
    39.     [intent] => sale
    40.     [payer] => Array
    41.         (
    42.             [payment_method] => paypal
    43.         )
    44.  
    45.     [transactions] => Array
    46.         (
    47.             [0] => Array
    48.                 (
    49.                     [amount] => Array
    50.                         (
    51.                             [currency] => EUR
    52.                             [total] => 1
    53.                         )
    54.  
    55.                     [description] => Shop points on DESCENTIA
    56.                     [item_list] => Array
    57.                         (
    58.                             [items] => Array
    59.                                 (
    60.                                     [0] => Array
    61.                                         (
    62.                                             [quantity] => 1
    63.                                             [name] => 250 shop points.
    64.                                             [price] => 1
    65.                                             [currency] => EUR
    66.                                         )
    67.  
    68.                                 )
    69.  
    70.                         )
    71.  
    72.                 )
    73.  
    74.         )
    75.  
    76.     [experience_profile_id] => XP-DCFR-XRDB-4D84-RSA3
    77.     [redirect_urls] => Array
    78.         (
    79.             [return_url] => http://www.descentia.com/paypal_process.php
    80.             [cancel_url] => http://www.descentia.com/failed.php
    81.         )
    82.  
    83. )
    84.  
    85.  
    86. Payment link success
    87. Print: - stdClass Object
    88. (
    89.     [id] => PAY-38E4762336884602YLHJIHYY
    90.     [intent] => sale
    91.     [state] => created
    92.     [payer] => stdClass Object
    93.         (
    94.             [payment_method] => paypal
    95.         )
    96.  
    97.     [transactions] => Array
    98.         (
    99.             [0] => stdClass Object
    100.                 (
    101.                     [amount] => stdClass Object
    102.                         (
    103.                             [total] => 1.00
    104.                             [currency] => EUR
    105.                         )
    106.  
    107.                     [description] => Shop points on DESCENTIA
    108.                     [item_list] => stdClass Object
    109.                         (
    110.                             [items] => Array
    111.                                 (
    112.                                     [0] => stdClass Object
    113.                                         (
    114.                                             [name] => 250 shop points.
    115.                                             [price] => 1.00
    116.                                             [currency] => EUR
    117.                                             [quantity] => 1
    118.                                         )
    119.  
    120.                                 )
    121.  
    122.                         )
    123.  
    124.                     [related_resources] => Array
    125.                         (
    126.                         )
    127.  
    128.                 )
    129.  
    130.         )
    131.  
    132.     [experience_profile_id] => XP-DCFR-XRDB-4D84-RSA3
    133.     [create_time] => 2017-10-02T18:22:27Z
    134.     [links] => Array
    135.         (
    136.             [0] => stdClass Object
    137.                 (
    138.                     [href] => https://api.sandbox.paypal.com/v1/payments/payment/PAY-38E4762336884602YLHJIHYY
    139.                     [rel] => self
    140.                     [method] => GET
    141.                 )
    142.  
    143.             [1] => stdClass Object
    144.                 (
    145.                     [href] => https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-77R65911ET687090J
    146.                     [rel] => approval_url
    147.                     [method] => REDIRECT
    148.                 )
    149.  
    150.             [2] => stdClass Object
    151.                 (
    152.                     [href] => https://api.sandbox.paypal.com/v1/payments/payment/PAY-38E4762336884602YLHJIHYY/execute
    153.                     [rel] => execute
    154.                     [method] => POST
    155.                 )
    156.  
    157.         )
    158.  
    159. )
    @Znote got any idea or can you help me directly?
     
    Last edited by a moderator: Nov 18, 2017 at 4:25 PM
  10. Cepeen

    Cepeen New Member

    Joined:
    Aug 7, 2017
    Messages:
    3
    Likes Received:
    0
    Best Answers:
    0
    Hi guys!
    @Znote I've tested your app and it works fine, but in live mode (using live credentials) I receive this error:

    Code (Text):
    1. Request
    2. Print: - Array
    3.  
    4.     [amount] => 1
    5. )
    6.  
    7.  
    8. Payment token
    9. Print: - stdClass Object
    10. (
    11.     [error] => invalid_client
    12.     [error_description] => Client Authentication failed
    13. )
    14.  
    15. Payment data
    16. Print: - Array
    17. (
    18.     [intent] => sale
    19.     [payer] => Array
    20.         (
    21.             [payment_method] => paypal
    22.         )
    23.    [transactions] => Array
    24.         (
    25.             [0] => Array
    26.                 (
    27.                     [amount] => Array
    28.                         (
    29.                             [currency] => EUR
    30.                             [total] => 1
    31.                        
    32.  
    33. > )
    34.  
    35.                     [description] => Shop points on example.net
    36.                     [item_list] => Array
    37.                         (
    38.                             [items] => Array
    39.                                 (
    40.                                     [0] => Array
    41.                                         (
    42.                                             [quantity] => 1
    43.                                             [name] => 10 shop points.
    44.                                             [price] => 1
    45.                                             [currency] => EUR
    46.                                         )
    47.  
    48.                                 )
    49.  
    50.                         )
    51.  
    52.                 )
    53.  
    54.         )
    55.  
    56.     [experience_profile_id] => XP-9HUW-8XHP-G5C2-MXXX
    57.     [redirect_urls] => Array
    58.         (
    59.             [return_url] => http://example.net/paypal_process.php
    60.             [cancel_url] => http://example.net/failed.php
    61.         )
    I tried to add array mode => live to $config['paypal'] it doesn't work. Could you help me?
     
  11. Cornex

    Cornex Web Developer Staff Member Global Moderator

    Joined:
    Jun 15, 2008
    Messages:
    3,437
    Likes Received:
    1,136
    Best Answers:
    4
    Did you replace the sandbox URL:s with the live URL?

    This one for example: Znote AAC Paypal REST API prototype · GitHub
     
  12. Cepeen

    Cepeen New Member

    Joined:
    Aug 7, 2017
    Messages:
    3
    Likes Received:
    0
    Best Answers:
    0
    Thanks for advice. Yes, I've tried, even after your reply to be sure , but maybe used wrong. How should they looks like or where can I find them?
     
  13. Cornex

    Cornex Web Developer Staff Member Global Moderator

    Joined:
    Jun 15, 2008
    Messages:
    3,437
    Likes Received:
    1,136
    Best Answers:
    4
    Cepeen likes this.
  14. Cepeen

    Cepeen New Member

    Joined:
    Aug 7, 2017
    Messages:
    3
    Likes Received:
    0
    Best Answers:
    0
    You were right, I've missed links in :oops: paypal_process.php. Now I'm getting this:

    Code (Text):
    1. Payment link ERROR
    2. Print: - stdClass Object
    3. (
    4.     [name] => INVALID_EXPERIENCE_PROFILE_ID
    5.     [message] => The requested experience profile ID was not found
    6.     [information_link] => https://developer.paypal.com/docs/api/payments/#errors
    7.     [debug_id] => dff5bb503129c
    8. )
    Thanks a lot. :) I will check this, and write if new problems occurs. I Hope they will not.
     
  15. Znote

    Znote <?php echo $title; ?> Staff Member Global Moderator Premium User

    Joined:
    Feb 14, 2008
    Messages:
    6,230
    Likes Received:
    963
    Best Answers:
    116
    I havent had time to look properly into this, but my quick thoughts are:

    After you have changed from sandbox to live, you need to change the paypal URLs to the live urls.
    After that, you also need to make sure that the sandbox option is disabled in the paypal developer app center~ (Is it a toggle option there?)

    Then after this, in theory you should be running live. But if you did testing in the sandbox, your experience_profile_id is probably related to the sandbox environment, which means you need to generate a new profile_id for the live version
    When I have time to continue working on this, I intend to extend the functionality, detect when it returns INVALID_EXPERIENCE_PROFILE_ID, and automatically generate a new experience profile id.

    For now, I think it should generate a new experience profile id by removing the current profile_id in our database. (Reference code: Znote AAC Paypal REST API prototype · GitHub )
    However it seems @Schwarzbeere tried this, and it just loaded the invalid profile id from the API?
    I would try to force a new profile id by changing this name:
    Znote AAC Paypal REST API prototype · GitHub

    Instead of paypalProfile, call it like myotserverPaypalProfile, just so the paypal API is unable to find the profile id in their end and return an old invalid one. (It sounds weird that paypal is returning invalid profile ids tho...)
     

Share This Page

Loading...