Using Netbanx API - javascript

I'm trying to use the Netbanx API and i always get {"error":{"code":401,"message":"Not authorised"}} I dont know what I am doing wrong.
var url = "https://api.test.netbanx.com/hosted/v1/orders";
$.ajax({
url: url,
headers: {
"Authorization": "Basic " + btoa("devcentre4157:B-qa2-0-54b6431d-302c021451aabe02869ba82a4a4253d8b2a170d7950d228b021448948677e24be8180f945f1af2b583676c353b9f")
},
type: 'POST',
dataType: 'jsonp',
contentType: 'application/json',
data: "{merchantRefNum:'89983943',currencyCode:'CAD',totalAmount:'10'}",
success: function (data) {
alert(JSON.stringify(data));
},
error: function (err) {
console.log(err);
}
});

I verified your code in and receive 401 as well.
Credentials is good, I did curl request and it's return data
curl -X POST -H "Content-Type: application/json" \
-u devcentre4157:B-qa2-0-54b6431d-302c021451aabe02869ba82a4a4253d8b2a170d7950d228b021448948677e24be8180f945f1af2b583676c353b9f \
https://api.test.netbanx.com/hosted/v1/orders \
-d '{
"merchantRefNum" : "89983943",
"currencyCode" : "CAD",
"totalAmount" : 10
}'
{"currencyCode":"CAD","id":"27HBQC4JI28QISA1LM","link":[{"rel":"hosted_payment","uri":"https://pay.test.netbanx.com/hosted/v1/payment/53616c7465645f5f9d3670f3f61d1664e3c0db218618a55369145e7577df013ab0691c526e56a445"},{"rel":"self","uri":"https://devcentre4157:B-qa2-0-54b6431d-302c021451aabe02869ba82a4a4253d8b2a170d7950d228b021448948677e24be8180f945f1af2b583676c353b9f#api.test.netbanx.com/hosted/v1/orders/27HBQC4JI28QISA1LM"},{"rel":"resend_callback","uri":"https://devcentre4157:B-qa2-0-54b6431d-302c021451aabe02869ba82a4a4253d8b2a170d7950d228b021448948677e24be8180f945f1af2b583676c353b9f#api.test.netbanx.com/hosted/v1/orders/27HBQC4JI28QISA1LM/resend_callback"}],"merchantRefNum":"89983943","mode":"live","totalAmount":10,"type":"order"}
I used DHC chrome plugin for one more check - it works as well. SO I am pretty sure there is Cross Domain problem with your JavaScript example. Netbanx just does not allow to do Cross Domain request to API.

Normally in these situations the issue is how the key is encoded. it is posisble that when copying and pasting there are spaces at the beginning or end. The credentials do look valid.

Related

Creating a task in Asana with JS (fail) and CURL (work)

I am writing a quotation system for myself.
I have this web page for quotations, which does:
a) send an email to the customer (done) with the quoted items
b) create a record inside a google spreadsheet (done)
c) create a task in asana (fail)
For the last 2 days I have been surfing and reading all I can find, but the solution skips from my mind.
This is the CURL code, which works just fine:
curl -H "Authorization: Bearer 0/7alotofnumbers" \
https://app.asana.com/api/1.0/tasks \
-d "projects=83694179XXXXXX" \
-d "tags[0]=269280227XXXXXX" \
-d "assignee=sales#atmysite.com.mx" \
-d "due_on=2017-02-09" \
-d "name=testing with curl" \
-d "notes=it works just as expected" \
-d "followers[0]=myself#atmysite.com.mx"
Now, I translated the CURL command that WORKS into asanataskcreate.coffee:
$.ajax
url: 'https://app.asana.com/api/1.0/tasks'
beforeSend: (xhr) ->
xhr.setRequestHeader 'Authorization', 'Bearer 0/7alotofnumbers'
return
contentType: 'application/json'
method: 'get'
data:
projects: [ 83694179XXXXXX ]
tags: [ 269280227XXXXXX ]
assignee: 'sales#atmysite.com.mx'
due_on: '2017-02-09'
name: 'testing with js ajax'
notes: 'it does not work'
followers: [ 'myself#atmysite.com.mx' ]
which turns into asanataskcreate.js:
$.ajax({
url: 'https://app.asana.com/api/1.0/tasks',
beforeSend: function(xhr) {
xhr.setRequestHeader('Authorization', 'Bearer 0/7alotofnumbers');
},
contentType: 'application/json',
method: 'get',
data: {
projects: [83694179XXXXXX],
tags: [269280227XXXXXX],
assignee: 'sales#atmysite.com.mx',
due_on: '2017-02-28',
name: 'testing with js ajax',
notes: 'it does not work',
followers: ['myself#atmysite.com.mx']
}
});
And, FAILS :(
Ok, I have tried:
a) method: 'post' and 'get'
b) place, remove the '[]' at projects, tags and followers
With the assistance of Chrome devtools in the 'console' I get the following message:
Failed to load resource: the server responded with a status of 400 (Bad Request)
and
XMLHttpRequest cannot load https://app.asana.com/api/1.0/tasks?projects%5B%5D=836941797XXXXXX&tags%5B%5…&notes=it+does+not+work&followers%5B%5D=myself%40atmysite.com.mx. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://atmysite.com.mx' is therefore not allowed access. The response had HTTP status code 400.
Now, in DevTools, when checking the XHR response from asana, this is what I get:
message: "You should specify one of workspace, project, tag, section"
As you can see from the code, there is a project id defined, but in JS fails and in curl works.
Analyzing why 'projects' in curl works and in ajax fails, the difference is:
curl: projects=83694179XXXXXX
js ajax: projects%5B%5D=836941797XXXXXX ==> projects[]=836941797XXXXXX
What I am doing wrong?
Here is an example of an Ajax request that creates an Asana task:
$.ajax({
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Bearer " + "0/0123...");
},
url: "https://app.asana.com/api/1.0/tasks",
method: 'POST',
data: {projects:123456789, name: "ajax created task"},
});
It's uncertain how much of your compiled Ajax code is wrong. You definitely need to use a POST request to create a new task. The data values should not be in arrays. You likely don't need to list contentType, as the default will work. You should be able to get your code in working order based on my example.
You should also be aware that by using Ajax, you're exposing your Personal Access Token in the client. If you see anything suspicious on your account, you may want to delete that PAT.

Access MailChimp API 3.0 (GET)

I'm trying to make a GET request through jQuery to the Mailchimp API. It seems though my custom header is not correctly set as I get a Your request did not include an API key. error.
It works fine if I make the request using curl on my Ubuntu machine:
curl --header "Authorization: apikey 709XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us11" https://us11.api.mailchimp.com/3.0/campaigns
Here's my code:
$.ajax({
type: 'GET',
url: 'https://us11.api.mailchimp.com/3.0/campaigns',
crossDomain: true,
dataType: 'jsonp',
contentType: "application/json; charset=utf-8",
headers: {
'Authorization': 'apikey 709XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us11'
}
}).done(function (response) {
console.log(response); // verbose
});
I even tried adding this above:
$.ajaxSetup({
headers: { 'Authorization': 'apikey 709XXXXXXXXXXXXXXXXXXXXXXXXXXXXX-us11' }
});
You need to add the key via Basic Auth like and as far I am aware off, You can't query it from front-end, it must be on the back-end.
Find an example in NodeJS:
headers: {
'Authorization': 'Basic ' + new Buffer(`anything:${MailChimpKey}`).toString('base64');
}
MailChimp not allowed to direct access with ajax. Once make Server WebRequest. It will surely work.

Ajax POST corresponding to a curl POST command

I have this command:
curl -vX POST --header "Content-Type: text/json" --header "Authorization:MediaPreCompute" -d #someFile.txt someURL
someFile.txt has the data to be posted.
say it has:
{
keys: [],
observer: "someobserver",
table: "soneTable"
}
How can I do the same post request in JavaScript using Ajax. I know it would be something like this.. but how can I send the header: Authorization?
$.ajax({
type: "POST",
contentType: "application/json",
url: 'someUrl',
data: {myJsonDataInFile}
});
And also if the curl command gives me some output on terminal after completing, How can I collect that output while doing the same using Ajax.
Thanks in advance.

REST call Javascript

How do I make a call to a REST Api with Javascript (or ajax or jquery)?
curl -v -X PUT -H "Content-Type: application/json" -H "Accept: application/json" -X PUT --user user:password http://url -d "{\"name\": \"Marcus0.2\",\"start\": 1361381326000,\"end\": 1361640526000}"
I need help converting this to a useable ajax call. Thanks
$.ajax({
type: 'put',
url: 'https://this.is.my/url',
dataType: 'json',
data: { \"name\": \"Marcus0.3\" , \"start\": 500000 , \"end\": 1361640526000 }
});
This code does not work [not sure why]. Also, 'https://this.is.my/url' is just short for the longer url, which I don't want to post online
No need to add escaping to your data element... you can send a whole object and jQuery will take care of it for you.
$.ajax({
type: 'put',
url: 'https://this.is.my/url',
dataType: 'json',
data: {
name: 'Marcus0.3',
start: 500000,
end: 1361640526000
}
});

how to transform from curl command to ajax request

I have command to curl to server to get information
curl -v -H "Content-Type:application/json" -H "X-KGP-AUTH-TOKEN: a5a95c30274611e2ae10000c29bb7331" -H "X-KGP-APPID:id.kenhgiaiphap.kcloud" -H "X-KGP-APPVER:0.0.1" -H "X-KGP-DEVID:xxx" -H "X-KGP-DEVTYPE:xxx" http://test.kenhgiaiphap.vn/kprice/account/profile/get/token
I write ajax to handle this
$.ajax({
url: "http://test.kenhgiaiphap.vn/kprice/account/profile/get/token",
type: "POST",
cache: false,
dataType: 'json',
success: function() { alert('hello!'); },
error: function(html) { alert(html); },
beforeSend: setHeader
});
function setHeader(xhr) {
xhr.setRequestHeader('X-KGP-AUTH-TOKEN','a5a95c30274611e2ae10000c29bb7331');
xhr.setRequestHeader('X-KGP-APPVER', '0.0.1');
xhr.setRequestHeader('X-KGP-DEVID', 'xxx');
xhr.setRequestHeader('X-KGP-APPID','id.kenhgiaiphap.kcloud');
xhr.setRequestHeader('X-KGP-DEVTYPE', 'xxx');
}
But I have problem is
2XMLHttpRequest cannot load http://test.kenhgiaiphap.vn/kprice/account/profile/get/token. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
and in request is
token
test.kenhgiaiphap.vn/kprice/account/profile/get
OPTIONS
(canceled)
Load cancelled
text/plain
jquery-1.7.2.min.js:2320
Script
156B
0B
1.15s
39ms
39ms1.11s
Thank for support!
This is a browser issue.
Change dataType to jsonp or add callback=? to your url:
http://test.kenhgiaiphap.vn/kprice/account/profile/get/token?callback=?
Future refer to https://stackoverflow.com/a/6396653/744255
You cannot use post in client site "Same Origin Policy issue".
Ou can use jsonp instead 'json' and change to get, pretty much following "Gabriel Santos" suggestion

Categories

Resources