问题描述:

So I'm trying to learn how to work with REST / API's and have a very specific project that I'm trying this with, which is an API with the email service we use at my workplace. I've tried to read their documentation, created an "API key", which in this case is a username and password in the system, a transactional email, and whatever else I believe needs to be done but it just won't work.

The goal here is to send an email address from my form to a list in the email system Carma, which will then send out a transactional email to the provided email address, but I just can't get it to work...

Depending on how I edit my code I get different errors. It's mostly "HTTP 401 XMLHttpRequest cannot load http://www2.carmamail.com//rest/2377/triggers/3515/messages. Response for preflight has invalid HTTP status code 401" or "HTTP 400 Bad Request"... Sometimes I also get "HTTP 500 Internal Server Error" depending on the browser... I'm thinking the problem is authentication, but I'm really stuck here. Also, I'm very very new to this whole thing, so please be nice to me.

Thanks!

This is my current code:

<html>

<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<style type="text/css">

#button { background:#005298; display:inline-block; color:white; padding:7px; }

</style>

<title>TEST Carma Trigger mail</title>

</head>

<body>

<form id="myid" method="post">

<table>

<tr>

<td><input type="text" name="originalid" value="" hidden></td>

<!-- NOTE: Hidden, empty field!

Will send multiple emails, if form is filled in multiple times, since no original id is specified.

However, it will not add the same email address as multiple recipients in list(?).

Consider function to copy email field as originalid, or generete a random string. -->

</tr>

<tr>

<td>email address</td>

<td><input type="text" name="emailaddress" value=""></td>

</tr>

</table>

<div id="button">Skicka mail</div>

</form>

<script type="text/javascript">

$( "#button" ).click(function () {

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;var f=0;e=Base64._utf8_encode(e);while(f<e.length){n=e.charCodeAt(f++);r=e.charCodeAt(f++);i=e.charCodeAt(f++);s=n>>2;o=(n&3)<<4|r>>4;u=(r&15)<<2|i>>6;a=i&63;if(isNaN(r)){u=a=64}else if(isNaN(i)){a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e){var t="";var n,r,i;var s,o,u,a;var f=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));o=this._keyStr.indexOf(e.charAt(f++));u=this._keyStr.indexOf(e.charAt(f++));a=this._keyStr.indexOf(e.charAt(f++));n=s<<2|o>>4;r=(o&15)<<4|u>>2;i=(u&3)<<6|a;t=t+String.fromCharCode(n);if(u!=64){t=t+String.fromCharCode(r)}if(a!=64){t=t+String.fromCharCode(i)}}t=Base64._utf8_decode(t);return t},_utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t="";for(var n=0;n<e.length;n++){var r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r)}else if(r>127&&r<2048){t+=String.fromCharCode(r>>6|192);t+=String.fromCharCode(r&63|128)}else{t+=String.fromCharCode(r>>12|224);t+=String.fromCharCode(r>>6&63|128);t+=String.fromCharCode(r&63|128)}}return t},_utf8_decode:function(e){var t="";var n=0;var r=c1=c2=0;while(n<e.length){r=e.charCodeAt(n);if(r<128){t+=String.fromCharCode(r);n++}else if(r>191&&r<224){c2=e.charCodeAt(n+1);t+=String.fromCharCode((r&31)<<6|c2&63);n+=2}else{c2=e.charCodeAt(n+1);c3=e.charCodeAt(n+2);t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);n+=3}}return t}};

$.ajax({

url: 'http://www2.carmamail.com:80//rest/2377/triggers/3515/messages',

data: $("#myid").serialize(),

method: 'POST',

contentType: 'application/json',

crossDomain: true,

beforeSend: function ( xhr ) {

xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'username:password' ) );

},

success: function( data, txtStatus, xhr ) {

console.log( data );

console.log( xhr.status );

}

});

});

</script>

</body>

</html>

Obviously I have my real username and password (API key) in the setRequestHeader...

Tried reading almost everything here http://expertise.compost.se/api/rest and here http://expertise.compost.se/api/send-trigger-via-rest-new but I have no idea what I'm doing wrong...

相关阅读:
Top