Me gustaría que un usuario dentro de mi aplicación ruby on rails pueda enviar un ticket a mi sistema externo de administración de tickets, squishlist.com. Tienen una API e instrucciones de la siguiente manera. Necesita autenticarse y obtener un token y luego enviar el ticket con el token. De squishlist.POST JSON a API usando Rails y HTTParty
# get the token
https://api.squishlist.com/auth/?cfg=testcorp&user_key=privatekey&api_key=TEST-KEY-12345
=> {"token": "authtoken",
"expires": "2010-06-16 13:31:56"}
# and then the ticket with the token
https://api.squishlist.com/rest/?cfg=testcorp&token=authtoken&method=squish.issue.submit&prj=demo
POST data: {'issue_type': 1, 'subject': 'Hello, world.', 4: 'Open', 5: 10}
Para propósitos de prueba, he creado un controlador, la ruta y vista (página) para la prueba. En mi regulador tengo el siguiente
require 'httparty'
require 'json'
class SubmitticketController < ApplicationController
def submit_a_ticket
@cfg = 'xxxsupport'
@user_key = '4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b'
@api_key = 'MrUser411'
@project = 'excelm-manoke'
@url_new_string = 'https://api.squishlist.com/auth/?cfg='[email protected]+'&user_key='[email protected]_key+'&api_key='[email protected]_key
# https://api.squishlist.com/auth/?cfg=xxxsupport&user_key=4787fsdbbfbfsdbhbfad5aba91129a3f1ed1b743321f7b&api_key=MrUser411 - this is what is created by @url_new_string
response = HTTParty.get(@url_new_string.to_str) #submit the string to get the token
@parsed_and_a_hash = JSON.parse(response)
@token = @parsed_and_a_hash["token"]
#make a new string with the token
@urlstring_to_post = 'https://api.squishlist.com/rest/?cfg='[email protected]+'&token='[email protected]+'&method=squish.issue.submit&prj='[email protected]
#submit and get a result
@result = HTTParty.post(@urlstring_to_post.to_str, :body => {:subject => 'This is the screen name', :issue_type => 'Application Problem', :status => 'Open', :priority => 'Normal', :description => 'This is the description for the problem'})
end
end
Y luego tengo una página que voy a ver el resultado de las acciones de los controladores y tiene el siguiente código.
<p><%= @result %></p>
Sé que está funcionando en general debido a las respuestas que he recibido en el camino. My json es diferente del ejemplo debido a los campos que he definido en squishlist. ¿Alguien puede ayudarme en este tema?
Supongo que el verdadero problema es que realmente no puedo ver cómo es el json y si está cerca de coincidir. Realmente no sé mucho sobre json. Debería estar usando algo que podría ser fácil. Debería estar usando ajax para enviar esto. Cualquier ayuda es muy apreciada. Amo a la comunidad aquí.
Gracias, hombre. Ese .to_json en el elemento del cuerpo era la parte que me faltaba. – wndxlori
Gracias, hombre. La tecla: headers era la parte * I * que faltaba. ;-) –
Nota 'as_json' no funciona. Tiene que ser 'to_json' – Hengjie