Estou trabalhando nesse problema há algumas semanas e não consigo encontrar uma solução para a minha vida. O fato de eu não encontrar documentação decente (no site do Drupal ou em qualquer outro lugar) também não ajuda. E as perguntas já aqui estão desatualizadas (Serviços 2.x).
Estou tentando criar um serviço REST para um site suportado pelo Drupal Commerce. Por enquanto, tudo o que o serviço deve fazer é permitir operações CRUD básicas no recurso Order e ser protegido com OAuth, o OAuth 2.0 não é necessário. Também deve ser chamado com um script em um servidor, para que as redirecionamentos de login sejam impossíveis (tudo é feito com autenticação em duas pernas).
A pilha atual é:
- PHP 5.3.15
- Drupal 7.15
- Perfil do Commerce Kickstart (7.x-2.0-rc1)
- Serviços 7.x-3.2
- OAuth 7.x-3.0 + 18-dev
- Autenticação OAuth 7.x-3.2
- Servidor REST 7.x-3.2
- Serviços de Comércio 7.x-1.x-dev (Este é o módulo ao qual eu adicionei meu código de Pedido personalizado)
Posso fazer com que as funções Retrieve / Index funcionem para Orders se eu usar uma biblioteca PHP OAuth e apenas chamar a solicitação de token toda vez (nem tenho certeza do que está acontecendo lá, exceto que ela se autentica ...). Porém, se eu tentar fazer o POST para pedidos e criar um pedido, recebo 406 com o script e 401 quando tento uma solicitação POST direta do console REST no Google Chrome, mesmo quando o OAuth está desativado.
Isso tornou a depuração um pesadelo, pois não tenho idéia do que está acontecendo dentro da minha função de criação. Tentei retirar a lógica de criação de pedidos e refazer a carga útil da solicitação. Ainda obtém os erros 406/401.
Suponho que recebo os erros 401 porque os pedidos exigem uma autenticação do usuário (mesmo que o OAuth esteja desativado para o serviço).
Eu não entendo por que estou recebendo os erros 406. Eu aceito application / json, que é o que meu servidor REST está definido para retornar.
Os pedidos não estavam sendo criados antes mesmo de eu comentar a lógica de criação de pedidos. (Que eu uso em outros lugares do site de maneira eficaz.)
Apreciação antecipada.
-T
Respostas:
As solicitações de obtenção não precisavam de autenticação de sessão, POST, PUT, DELETE exigem autenticação de sessão para conhecer o usuário e verificar se ele possui permissões corretas para concluir a solicitação ou não.
A autenticação Oauth tem muitos tipos de autenticação. Você deve garantir que está autenticando o usuário e não o aplicativo (por exemplo), para que a solicitação esteja autorizada a ser concluída.
fonte
Você verificou o mesmo ao desativar a autenticação oAuth? Caso contrário, tente depois de retornar uma amostra de json obj em sua chamada de serviço.
fonte