Announcement

Collapse
No announcement yet.

oAuth2 - Token request (Trusted Shops API)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • oAuth2 - Token request (Trusted Shops API)

    Hallo zusammen,

    nach einem guten Jahrzent der Anwendungsentwicklung bin ich nun beruflich bedingt in die Web-Entwicklung eingetaucht.
    Aktuell scheitere ich jedoch an einer scheinbar trivialen Aufgabe. In einem Onlineshop sollen Trusted-Shops-Reviews im Footer angezeigt werden.

    Die benötigten Daten können im JSON-Format von der TS-API per HTTP-Request erhalten werden. Das ist an für sich auch nicht mein Problem, zumal sich dafür massig Beispiele im WWW finden.
    Da ich jedoch Daten aus dem restricted-Bereich anfrage, ist ein sog. Bearer-Token für die oAuth2-Authentifizierung nötig, welches man ebenfalls per HTTP-Request erhalte. Leider finde ich hierfür kaum Beispiele, wie das ganze konkret in PHP syntaktisch aussieht. Mit meinen bisherigen Versuchen konnte ich noch kein Token erzeugen.

    Gemäß der TS-Entwicklerdokumentation gelten folgende Parameter:
    • Endpoint-URL:
    https://login.etrusted.com/oauth/token
    • Inhalt Header:
    "Content-Type": "application/x-www-form-urlencoded"
    • Inhalt Body:
    "client_id": "<YOUR_CLIENT_ID>"
    "client_secret": "<YOUR_CLIENT_SECRET>"
    "grant_type": "client_credentials"
    "audience": "https://api.etrusted.com"



    Mein bisheriger Ansatz:
    PHP Code:
    function authenticate($clientId$clientSecret)
      {
      
    $body = array(
        
    "client_id" => $clientId,
        
    "client_secret" => $clientSecret,
        
    "grant_type" => "client_credentials",
        
    "audience" => "https://api-etrusted.com"
      
    );

      
    $ch curl_init();
      
    curl_setopt_array($ch, array(
        
    CURLOPT_URL => "https://login.etrusted.com/oauth/token",
        
    CURLOPT_RETURNTRANSFER => true,
        
    CURLOPT_ENCODING => "",
        
    CURLOPT_MAXREDIRS => 10,
        
    CURLOPT_TIMEOUT => 30,
        
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        
    CURLOPT_CUSTOMREQUEST => "GET",
        
    CURLOPT_POSTFIELDS => json_encode($body),
        
    CURLOPT_HTTPHEADER => array(
          
    "Content-Type" => "application/x-www-form-urlencoded",
        )
      ));

      
    $response curl_exec($ch);
      
    $err curl_error($ch);
      
    curl_close($ch);

      return 
    $err?$err:$response;
      } 

    Leider bekomme ich als Antwort stets 400 - Bad Request. (wahlweise auch mal 401, 402, je nach Lösungsversuch)
    Bis ich die fehlenden Grundlagen nachgearbeitet habe, hoffe ich sehr darauf, das sich jemand hier im Forum erbarmt, mir beim Debuggen zu helfen


    In dem Sinne, vorab herzlichen Dank und viele Grüße,
    stuck1a

  • #2
    Danach
    https://developers.etrusted.com/solu...ntication.html
    ist es erstmal eine POST Anfrage
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Danach
      https://developers.etrusted.com/solu...ntication.html
      ist es erstmal eine POST Anfrage
      Hallo und danke für den Hinweis!
      Das hatte ich wohl vergessen wieder zu ändern, als ich herumprobiert habe.
      Leider will die API dennoch kein Token herausrücken.


      Folgender Testaufruf:
      PHP Code:
      $token $authenticator->authenticate($authenticator->getTS_AUTH_USR(), $authenticator->getTS_AUTH_PWD());
      echo 
      "Token:<br>";
      var_dump($token); 


      Führt zu dieser Ausgabe:
      HTML Code:
      string(84) "{"error":"invalid_request","error_description":"Missing form parameter: grant_type"}"

      Der grant_type ist jedoch im Request-Body wie folgt definiert (siehe auch Ursprungs-Post):
      Code:
      "grant_type" => "client_credentials"

      Comment


      • #4
        Würde das Beispiel auf der Seite nachbauen. Kann auch nicht erkennen, das die Headerdaten per JSON kommen sollen
        Schau dir den Netzverkehr an, was genau gesendet wird
        Zuletzt editiert von Christian Marquardt; 11.08.2021, 15:55.
        Christian

        Comment


        • #5
          Nun, wie es aussieht, ist der programmatische Teil in Ordnung. Um die neue TrustedShops-API zu nutzen, wird eine entsprechende Freischaltung seitens TS benötigt. Hatte das zunächst gar nicht in Erwägung gezogen, da ich mich zu sehr an der Server-Antwort "Missing form parameter: grant_type" orientiert hatte.

          Für's Archiv hier noch die letztliche Funktion:
          PHP Code:
          /**
           * Requests a bearer token from oAuth2 plugin of the Trusted Shops API authentication server which can be used to
           * access and get restricted JSON data from the Trusted Shops API. Authentication requires valid ID and secret from
           * your Trusted Shops credentials.
           *
           * @param string $client_id alphanumeric id from your trusted shops creds starting with X.
           * @param string $client_secret API access secret from your Trusted Shops credentials.
           * @return bool|string
           */
          public static function authenticate(string $client_idstring $client_secret)
            {
            
          $body = array(
              
          "client_id"     => $client_id,
              
          "client_secret" => $client_secret,
              
          "grant_type"    => "client_credentials",
              
          "audience"      => urlencode("https://api-etrusted.com")
            );
            
          $ch curl_init();
            
          curl_setopt_array($ch, array(
              
          CURLOPT_URL            => "https://login.etrusted.com/oauth/token",
              
          CURLOPT_RETURNTRANSFER => true,
              
          CURLOPT_ENCODING       => "",
              
          CURLOPT_MAXREDIRS      => 10,
              
          CURLOPT_TIMEOUT        => 30,
              
          CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,
              
          CURLOPT_POST           => true,
              
          CURLOPT_POSTFIELDS     => json_encode($body),
              
          CURLOPT_HTTPHEADER     => array(
                
          "Content-Type"         => "application/x-www-form-urlencoded",
              )
            ));
            
          $response curl_exec($ch);
            
          $err curl_error($ch);
            
          curl_close($ch);
            return 
          $err?:$response;
            } 

          Grüße,
          stuck1a

          Comment

          Working...
          X