Hallo,
sobald viele Leute auf meinen Website sind macht PayPal dicht es und der Warenkorb läuft nicht mehr:
Fehlermeldung :
ACK: Success
status: 429
message: Too Many Requests
name: RATE_LIMIT_REACHED
debug_id: 712e781a6b449
shopware_version: 5.2.9
php_version: 7.0.12-1~dotdeb+8.1
PayPal meint dazu das liegt am Plgugin:
Hallo Marco,
die Meldung “message”:“Too many requests. Blocked due to rate limiting.” betrifft , du fragst bei jeder Zahlungsabwicklung nach einem neuen Access Token. Du musst den selben Access Token nutzen bis dieser abgelaufen ist. Der Access Token ist gute 8 Stunden gültig. Es muss also eine Logik zunächst prüfen ob der gespeicherte Access Token noch Gültig ist und dann entscheiden ob ein neuer Access Token generiert werden muss.
Hier ein Beispiel einer solchen Logik.
// Define Sandbos or Live ( change the # )
$MODUS=0 ; // 0 = sandbox / 1 = live
define(‘CURRENCYCODE’, ‘EUR’ );
define(‘LOCALECODE’, ‘de_DE’ );
define(‘PRICE_IS_NET’, false );
if (MODUS==1) {
define('PP\_MODUS','live');
define('PP\_DATA', 'data\_live.json');
define('PPURL','api.paypal.com');
define('PP\_CLIENTID', '' );
define('PP\_SECRET', '' );
}else{
define('PP\_MODUS','sandbox');
define('PP\_DATA', 'data\_test.json');
define('PPURL','api.sandbox.paypal.com');
define('PP\_CLIENTID', 'AX6xv28-EmeJqaMhnY\_XJaJxGeJh6101IMAKiiqBC2aJXfFGnefrswLfq1JYFdjqUQnxTB61F5N41Spa' );
define('PP\_SECRET', 'EOeiWqfwydwGVn2bHWOTTg6BHOvS-sZURVULlN5KDQmdSLOdtAjdfsERB11biNY1pog\_K7XUeMVQ0Lv9' );
}
define('BRAND\_NAME','PayPal Plus T-Shirt Shop');
define('URL\_RETURN', _SESSION[‘BASE_URL’].’/paypal/index.php?action=return’);
define(‘URL_CANCLE’, $_SESSION[‘BASE_URL’].’/paypal/index.php?action=cancel’);
define(‘URL_LOGO’, 'https://static.e-junkie.com/sslpic/137759.64a570be1ddd78ed2cb0d47d0d8ddbbc.jpg’);
define(‘BANK_DATA’, ‘Bitte Zahlen an Test Company GmbH. IBAN DE93838031321080808’);
NO CHANGES BELOW !!
// set timzone
date_default_timezone_set(‘UCT’);
// build API Credentials
define(‘API_CREDENTIALS’, PP_CLIENTID.’:’.PP_SECRET);
function GetAccessToken(){
data\_url='logs/'.PP\_DATA;
//Get Access Token
if(empty(_SESSION[‘access_token’])){
check for valid access token
$ts_now = time();
$jsonDATA = (array) json_decode(file_get_contents( $data_url, true));
if (!empty(jsonDATA)) {
_SESSION[‘expiry’] = jsonDATA['expiry'];
_SESSION[‘access_token’] = jsonDATA['access\_token'];
_SESSION[‘app_id’] = jsonDATA['app\_id'];
_SESSION[‘token_type’] = jsonDATA['token\_type'];
_SESSION[‘webprofilID’] = $jsonDATA[‘webprofilID’];
} else { echo ’
ERROR - NO DATA’;}
if ( $ts_now > $jsonDATA[‘expiry’] ) {
$url=‘https://’.PPURL.’/v1/oauth2/token’;
$JSONrequest= ‘grant_type=client_credentials’;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
‘Accept: application/json’,
‘Accept-Language: de_DE’
));
curl_setopt($ch, CURLOPT_USERPWD, API_CREDENTIALS);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $JSONrequest);
$result = curl_exec($ch);
$resultGetAccessToken = json_decode($result,true);
curl_close ($ch);
$_SESSION[‘expiry’] = time() + resultGetAccessToken['expires\_in'];
_SESSION[‘access_token’] = resultGetAccessToken['access\_token'];
_SESSION[‘app_id’] = resultGetAccessToken['app\_id'];
_SESSION[‘token_type’] = $resultGetAccessToken[‘token_type’];
$jsonSTRING = ‘{ “expiry”:"’.resultGetAccessToken['expiry'].'" , "access\_token":"'._SESSION[‘access_token’].’" , “app_id”:"’.\_SESSION['app\_id'].'","token\_type":"'._SESSION[‘token_type’].’",“webprofilID”:"’.$_SESSION[‘webprofilID’].’"}’;
file_put_contents($data_url, $jsonSTRING);
}
}
}
Bei diesem Beispiel wird der AccessToken in einer Datei unter “/logs” gespeichert im JSON Format gespeichert.
Mit Freundlichen Grüssen