Me gustaría que un usuario dentro de mi aplicación ruby on rails pueda enviar un ticket a mi sistema externo de gestión de tickets, squishlist.com. Tienen una API e instrucciones de la siguiente manera. Debe autenticarse y obtener un token y luego enviar el ticket con el token. De squishlist.
# 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}
Con fines de prueba, creé un controlador, una ruta y una vista (página) para probar. En mi controlador tengo lo 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='+@cfg+'&user_key='+@user_key+'&api_key='+@api_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='+@cfg+'&token='+@token+'&method=squish.issue.submit&prj='+@project
#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 a la que voy para 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 a lo largo del camino. Mi json es diferente del ejemplo debido a los campos que he definido en squishlist. ¿Alguien puede ayudarme con este problema?
Supongo que el problema real es que realmente no puedo ver cómo se ve el json y si está cerca de coincidir. Realmente no sé mucho sobre json. ¿Debería usar algo que pueda ser fácil? ¿Debería usar ajax para enviar esto? Cualquier ayuda es muy apreciada. Amo la comunidad aquí.
:headers => { 'Content-Type' => 'application/json', 'Accept' => 'application/json'}
. Nota: el encabezado no debe convertirse a JSON, se espera que sea un hash