Как мне получить доступ к API osTicket из meteorjs?

Я пытался получить доступ к API osTicket из моего кода метеора, вот мой код:

if (Meteor.isServer) {
Meteor.methods({
    osTicket: function() {
        this.unblock();
        return HTTP.post("http://www.xxxxxxxx.com/uploads/api/tickets.json","X-API-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",

            {
                data: {
                    "alert": true,
                    "autorespond": true,
                    "source": "API",
                    "name": "Angry",
                    "email": "[email protected]",
                    "phone": "3185558634X123",
                    "subject": "Testing API",
                    "ip": "172.22.78.114",
                    "message": "MESSAGE HERE",
                    "attachments": [{
                        "file.txt": "data:text/plain;charset=utf-8,content"
                    }, {
                        "image.png": "data:image/png;base64,R0lGODdhMAA..."
                    }, ]
                },
            },
            function(error, results) {
                if (results) {
                    console.log(results);
                } else {
                    console.log(error)
                }
            }
        );
    }
});
}

if (Meteor.isClient) {

    Template.api.events({
        'click #submitQuery': function() {

            Meteor.call("osTicket");

        }
    })

}

Я получаю статус 200 и какой-то html-код из API, это означает, что соединение установлено успешно, но я не могу создать билет из своего кода с помощью API.

Итак, что я делаю неправильно? Правилен ли мой синтаксис для подключения к API?

Пожалуйста, обратитесь к https://github.com/osTicket/osTicket-1.7/blob/develop/setup/doc/api/tickets.md для получения дополнительной информации.

Спасибо.


person Rahul Khatri    schedule 16.11.2015    source источник


Ответы (1)


Используйте fibers/future пакет npm.

Добавить meteorhacks:npm пакет метеора

meteor add http
meteor add meteorhacks:npm

Создайте package.json и добавьте волокна

{
  "fibers": "1.0.7",
}

видеть:

if (Meteor.isServer) {
  var Future = Meteor.npmRequire('fibers/future'); 

  Meteor.methods({
    osTicket: function() {

    // Create our future instance.
      var future = new Future();
          data = {
              "alert": true,
              "autorespond": true,
              "source": "API",
              "name": "Angry",
              "email": "[email protected]",
              "phone": "3185558634X123",
              "subject": "Testing API",
              "ip": "172.22.78.114",
              "message": "MESSAGE HERE",
              "attachments": [
                { "file.txt": "data:text/plain;charset=utf-8,content" }, 
                { "image.png": "data:image/png;base64,R0lGODdhMAA..." }, 
              ]
          };

      return HTTP.post("http://www.xxxxxxxx.com/uploads/api/tickets.json","X-API-Key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", { data:  data },
        function(error, response) {
          if (error) {
            return future.return(error);
          } else {
            future.return( response );
          }
      });

      return future.wait();
    }
  });
}

if (Meteor.isClient) {
  Template.api.events({
    'click #submitQuery': function() {
      Meteor.call("osTicket", function(error, response) {

        console.log(response);
      });
    }
  })
}
person yasaricli    schedule 16.11.2015
comment
Спасибо, я также хотел знать, использую ли я ключи API в нужном месте? (в качестве аргумента для http.POST) или я должен разместить его в любой другой части кода? - person Rahul Khatri; 16.11.2015
comment
Почему бы не использовать HTTP.get? и метеор добавить http пакет? - person yasaricli; 16.11.2015
comment
но мое требование - создать билет, поэтому мне нужно будет отправить некоторые данные с помощью почтового метода - person Rahul Khatri; 17.11.2015