# php rest api client library mit oauth2

**URL:** <https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336>\
**Category:** Programmierung\
**Created:** [29. Januar 2020 um 11:30 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336 "2020-01-29T11:30:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![wontfix](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@wontfix](https://forum.shopware.com/u/wontfix)\
**Post date:** [29. Januar 2020 um 11:30 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/1 "2020-01-29T11:30:42Z")

</div>

nun das shopware6 (admin) rest-api oauth2 benutzt, welche php library benutzt ihr um diese einfach zu benutzen?

---

<div class="post-metadata">

**Author:** ![wontfix](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@wontfix](https://forum.shopware.com/u/wontfix)\
**Post date:** [30. Januar 2020 um 08:44 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/2 "2020-01-30T08:44:41Z")

</div>

hab mit `guzzlehttp/guzzle` und `kamermans/guzzle-oauth2-subscriber` versucht:

```
 'http://shopware6.local/api/oauth/token',
]);
$reauth_config = [
    'client_id' => 'SWIASTZOVFA2B3BJSUTMV0VASA',
    'client_secret' => 'Ykl1WHk1aUxKbzlRVExVR1hqT1BzQ09RTjFLbUZ4ZUpJbW1EQjA',
];
$grant_type = new ClientCredentials($reauth_client, $reauth_config);
$oauth = new OAuth2Middleware($grant_type);
$stack = HandlerStack::create();
$stack->push($oauth);

$client = new Client([
    'base_uri' => 'http://shopware6.local/api/v1/',
    'handler' => $stack,
    'auth' => 'oauth',
    'headers' => [
        'accept' => 'application/json',
        //'accept' => 'application/vnd.api+json' // also called "json:api"
    ],
]);
$res = $client->get('product');
$data = json_decode($res->getBody());
echo(json_encode($data, JSON_PRETTY_PRINT));

```

es kommt aber fehler **401 Unauthorized : The user credentials were incorrect**

- wieso sagt der fehler “user”, wenn ich “client” credentials benutze?
- ist shopware6 admin api 100% fertig und korrekt?
- ist was falsch mit diese example code?
- ist guzzle-oauth2-subscriber falsch implementiert?
- gibt es ne bessere/passenderes php oauth2 library was mit shopware6 funktioniert?
- mit welche php code kannst du mit shopware6 admin api kommunizieren?

---

<div class="post-metadata">

**Author:** ![CallMeAlex](https://avatars.discourse-cdn.com/v4/letter/c/e9a140/32.png) [@CallMeAlex](https://forum.shopware.com/u/CallMeAlex)\
**Post date:** [30. Januar 2020 um 10:25 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/3 "2020-01-30T10:25:12Z")

</div>

Habe es auch mit Guzzle gebaut. Habe ein RestService, RestRepository sowie SalesChannelService und SalesChannelRepository.

Wie der Fehler sagt, sind deine Daten nicht gültig. Die base\_uri ist ohne /api/vx sowie bei auth habe ich mit Bearer gearbeitet.

Zuerst hole ich mir mit /api/oauth/token den richtigen Token den ich brauche. (client-id & client-secret) brauchst du dafür. Mit diesem accesstoken als Bearer kannst du dann die api request abrufen.

---

<div class="post-metadata">

**Author:** ![wontfix](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@wontfix](https://forum.shopware.com/u/wontfix)\
**Post date:** [30. Januar 2020 um 10:59 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/4 "2020-01-30T10:59:45Z")

</div>

> Wie der Fehler sagt, sind deine Daten nicht gültig.

man kann ja nicht viel falsch machen beim copy-and-paste… (aber erst wenn man die deaktivierten input felder in shopware admin-ui für client\_id und client\_secret über devtools wieder aktiviert…) oder „Access key ID“ !== client\_id && „Secret access key“ !== client\_secret&nbsp;???

aber wenigstens funktioniert `PasswordCredentials` mit irgendein client\_id das ich nicht definiert habe:

```
$grant_type = new PasswordCredentials($reauth_client, [
	'client_id' => 'administration',
	'username' => 'admin',
	'password' => 'admin',
]);

```

ist ja für unsere intranet, also mir egal das da echte website user login daten drin stehen…

---

<div class="post-metadata">

**Author:** ![CallMeAlex](https://avatars.discourse-cdn.com/v4/letter/c/e9a140/32.png) [@CallMeAlex](https://forum.shopware.com/u/CallMeAlex)\
**Post date:** [30. Januar 2020 um 11:41 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/5 "2020-01-30T11:41:09Z")

</div>

Du kannst über zwei wege die ganzen Sachen triggern. Über die /sales-channel-api oder /api/v1.

Je nach Anwendungsfalls reicht die [/sales-channel-api/](https://docs.shopware.com/en/shopware-platform-dev-en/api/sales-channel-api). Um diese zu benutzen brauchst du:

Benutzernamen: [mail@deinemail.de](mailto:mail@deinemail.de)&nbsp;

Password: IrgendeinPassword

sales-channel-api. (Backend -\> Verkaufskanäle (bisschen weiter unten ist der Schlüssel))

&nbsp;

Kannst dir dann so den **sw-context-token** &nbsp;holen.

```
$body = json_encode([
    'username' => $this->config['api-secret']['username'],
    'password' => $this->config['api-secret']['password']
]);

$response = $this->salesClient->post(
    '/sales-channel-api/v1/customer/login',
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'sw-access-key' => $this->config['api-secret']['sales-channel-api'],
        ],
        'body' => $body
    ]
);

```

&nbsp;

So, willst du nun die /api/v1 benutzen brauchst du eine Integration. ([http://shopware.local/admin#/sw/integration/index](http://shopware.local/admin#/sw/integration/index?))

Speicher dir die client-id & client-secret weg. Um überhaupt Request zu machen, brauchst du erstmal den Token der dadruch generiert wird.

```
$body = json_encode([
    'client_id' => $this->config['api-secret']['client-id'],
    'client_secret' => $this->config['api-secret']['client-secret'],
    'grant_type' => 'client_credentials'
]);

$response = $this->restClient->post(
    '/api/oauth/token',
    [
        'Content-Type' => 'application/json',
        'body' => $body
    ]
);

```

Den **access\_token&nbsp;** brauchst du jetzt um weitere Request zu machen.

```
return new Request(
    $method,
    $this->config['base_uri'] . '/api/v1/' . $uri,
    [
        'Authorization' => 'Bearer ' . $this->accessToken,
        'Accept' => '*/*',
        'Content-Type' => 'application/json'
    ],
    $body
);

```

&nbsp;

Ich denke, dass du mit diesen Informationen zurecht kommst.

&nbsp;

Grüße

---

<div class="post-metadata">

**Author:** ![wontfix](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@wontfix](https://forum.shopware.com/u/wontfix)\
**Post date:** [30. Januar 2020 um 12:24 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/6 "2020-01-30T12:24:55Z")

</div>

ich brauche keine oauth2 standard client implementation details (wenn es teile davon sein soll), ich möchte eine bestehende library benutzen, dafür sind ja standards da.

und in paar jahren ist oauth2 eh „zu unsicher“ für leute, also schreiben die neue standards und libraries, und ich möchte nicht in diese never-ending boring-as-hell katze-maus spiel mitmachen, danke.

ps. kriegst du denn ClientCredentials mit shopware6 admin api zum laufen?&nbsp;[GitHub - kamermans/guzzle-oauth2-subscriber: OAuth 2.0 Client for Guzzle 4, 5 and 6 - no more dependency hell!](https://github.com/kamermans/guzzle-oauth2-subscriber#client-credentials-example)

---

<div class="post-metadata">

**Author:** ![CallMeAlex](https://avatars.discourse-cdn.com/v4/letter/c/e9a140/32.png) [@CallMeAlex](https://forum.shopware.com/u/CallMeAlex)\
**Post date:** [31. Januar 2020 um 08:08 UTC](https://forum.shopware.com/t/php-rest-api-client-library-mit-oauth2/64336/7 "2020-01-31T08:08:00Z")

</div>

> [@wontfix schrieb:](https://forum.shopware.com/profile/21043/wontfix "wontfix")
> 
> ich brauche keine oauth2 standard client implementation details (wenn es teile davon sein soll), ich möchte eine bestehende library benutzen, dafür sind ja standards da.
> 
> und in paar jahren ist oauth2 eh „zu unsicher“ für leute, also schreiben die neue standards und libraries, und ich möchte nicht in diese never-ending boring-as-hell katze-maus spiel mitmachen, danke.
> 
> ps. kriegst du denn ClientCredentials mit shopware6 admin api zum laufen?&nbsp;[https://github.com/kamermans/guzzle-oauth2-subscriber#client-credentials-example](https://github.com/kamermans/guzzle-oauth2-subscriber#client-credentials-example)

Kann ich heute mal probieren, aber sollte damit auch kein Problem sein. Nur ist es zuletzt vor 11 Monaten bearbeitet worden. Also ob das auch noch so aktuell ist, ist die Frage.
