5
votes

I'm trying to create a script to capture data via HTTP POST from Ejunkie. When someone makes a purchase on ejunkie, they can transmit all the order data via HTTP POST to a common notification url (documentation). I want to capture that data so I can get it into a Google Sheet.

So I've setup a sheet with a doPost(e) function like so:

// attempt 1
function doPost(e) {
  if(typeof e !== 'undefined')
  Logger.log(e.parameters);
}

// attempt 2
function doPost(e) {
  var data = JSON.stringify(e);
  Logger.log(data);
}

which I've published as a Web App with access to anyone, and then entered this script URL as the common notification URL in ejunkie.

I've tried a couple of test transactions, but I'm getting nothing in the Logs.

Any ideas? Thanks in advance for any help.

Here's the ejunkie documentation on this subject.

3
You have the letter "s" on the end: "parameters." You can't have that. It's e.parameter Show the URL that you are using, minus the file ID, does it match the published URL of the Web App? - Alan Wells
Hi @SandyGood thanks for replying and pointing that out. I've changed it to just "parameter" now but not seeing anything. The URL of the published web app (set to access by anyone) is: script.google.com/macros/s{SCRIPT_ID}/exec and that's what I've put into ejunkie as the common notification url. - Ben Collins
Markdown got messed up there, that url should read: https://script.google.com/macros/s/{SCRIPT_ID}/exec - Ben Collins
I don't know what the answer is, and I'm not sure how to proceed from here. Hopefully someone else can help. - Alan Wells
Thanks for chipping in anyway. Cheers! - Ben Collins

3 Answers

7
votes

This is the code I used to post the data to my sheet:

function doPost(e) {
  Logger.log("I was called")
  if(typeof e !== 'undefined')
  Logger.log(e.parameter);
  var ss= SpreadsheetApp.openById("ID here")
  var sheet = ss.getSheetByName("Sheet2")
  sheet.getRange(1, 1).setValue(JSON.stringify(e))
  return ContentService.createTextOutput(JSON.stringify(e))
}

Used curl to make a post request and got echo of the data sent!

4
votes

Instead of using Logger.log() as a way to notify yourself if your calls made it through, try sending an email to yourself instead. This is the snippet:

function doPost(e) {
  if(typeof e !== 'undefined')

  MailApp.sendEmail({
     to: "[email protected]",
     subject: "Call Sucessful",
     htmlBody: "I am your <br>" +
               "DATA"
    });
}

Just allow the necessary permission if asked. If I'm not mistaken Logger.log is for script editor only and not for your production web apps.

1
votes

Could try something like this? Also you might look @ this thread: doPost(e) does not return parameters but doGet(e) does?

function doPost(e) {
  
  if(typeof e !== 'undefined')
    return ContentService.createTextOutput(JSON.stringify(e.parameter));
  
}