Infusionsoft API Python implementation of OrderService.placeOrder

Wow, it is December already?  Having an actual 9-5 has really given a hit to what I post here.  (I did mention that I work for Infusionsoft now, right?  It is a freaking amazing place to work bee-tee-dubs.)

Anyways, I am posting here today because I have been working on a really basic web based example of the Infusionsoft API in Python.  I call it the “Better Tag Application Report” because that was the impetus behind making it a website where other people could use it.  Infusionsoft has a tag application report, however they show you EVERY SINGLE tag that was applied between two dates.  If you were only interested in one particular tag (which most people are, let’s be honest) you have to run the report and then export the results.  Some users do not mind, but that seems like a lot of work to me.  So I made a report that gives you the ability to run that report with both tag and date criteria. From there it things will make sense for me to implement and so I do.   (You can see current iterations of it on Crackbrain. While I do try and keep the git up to date, I will generally only upload the end results of a weekends work.)

There were several things that I attempted did get done this weekend, some of them I got done easily (sorting the btar by application date), however some of them were more of a bear to figure out.  One function that I am still implementing is placing an order through the API. My interest in this was spurned by this forum post where a user is unable to get a Promo code to work in their API call.  Before this post came up myself and some of the other support folks thought that Promo Codes were only for tracking when used with the API.  I had no idea that they would actually modify the order through the API.  Even though the Official Documentation on the subject says

Whether or not the order should consider discounts that would normally be applied if this order was being placed through the shopping cart.

I wanted to test it.  So I started to build that functionality into Crackbrain.  I got most of the way through the process before testing my assumptions regarding how Infusionsofts system worked.  I learned a couple of interesting things :

  • “HideInStore” literally means “Hide in store”  Since I work with the software day in and out this table item really confused me, but I finally found that it is analogous to the GUI options of Cart Options -> Is Hidden in Cart (yeah, I never realized that that meant hide it from the store front).
  • The default payplanId is 0.
  • If you put the Referral partner id as “0”, then, thankfully, no RPs are credited.
  • There were some other “gotchas” that got me, however I cannot think of them off of the top.
  • Infusionsoft stores CC records even after you delete their associated contact records.  This took a little while to figure out. I had written this function and could not understand why my contacts were not processing correctly.  Finally figured it out when I went to look for contact ID = 45 and the lowest ID I have in the app now is 3475

 

 

15 July, nearly two months with nary a word.

That is not to say that I have been just sitting on my duff, in fact I have not. It is really due to the fact that after I am done with work I simply don’t have much in the way of chops to bring home and hack around in things.

Tonight, though I have done a little. I actually am trying to rework some things that I had done a while ago, namely getting some basic functionality duplicated using the Infusionsoft API.  The first thing that I did was download the sample code from GitHub. After I downloaded the zip file I extracted the contents and uploaded the API-Sample-Code-master/PHP folder to my webserver. After doing that, for some reason or another, the folder that I originally uploaded it to would not serve online, even after checking permissions and creating various files to browse to. I ended up creating a folder in the portfolio section of my site and moved everything there, and it seems to be serving.

After ensuring that everything was web visible, i went through the three php scripts, ContactService-Sample.php, DataService-Sample.php, and InvoiceService-Sample.php and update the link to the application from mach2.infusionsoft.com TO my application name. While I was in each application I took the time to copy and paste my API key as well.

As I looked at what the sample scripts did and the html webform I realized that the webform is currently only set up to work with the ContactService-Sample.php file. I updated its name to reflect that.

I then navigated to the form, filled it out, and submitted it. A new contact was created and it had tags applied to it, however I did not have appropriately numbered campaigns.  follow up actions.

After messing with this I actually forked the branch and am going to make some documentation changes and then submit a pull request.

 

 

21 May What I Have Been Up To

Today I finally started to get a handle on Phyllis’ laptop. She left it with me over a week ago due to “some” malware she had picked up and I have been too drugged up to touch it until today. It really blows my mind how people get so much crapware on their computer, but it happens. I have spent the better part of 10 hours cleaning it up, removing toolbars, browser hijackers, and other suspicious software.

Continue reading

Installing Sublime Text 2 on a minimal Arch Linux

I recently completed a relatively minimal install of Arch Linux on a netbook that was gifted to me. There are several things that I intend to use the portability of the netbook for and one of them is the occasional editing of code while I am on the go. To that end I really wanted to get Sublime Text installed on it, but I really found little instruction available online to help. This is a short record of what I have done, to the best of my recollection.

I have i3 installed, which means that I also have X installed. (while not listed as a dependency, i am pretty sure that it is). I then found Sublime Text in the AUR and used pacman to ensure that I had its listed dependencies installed.

After the dependencies were taken care of I then downloaded and extracted this archive.  At this point in time I could cd into the directory and run the executable, however sublime text was not available from the command line nor dmenu. After doing some googling around I was able to find this helpful article which walked me through the rest of the process that I needed.

After unzipping the folder I then renamed the folder to just “sublime” and moved it to /opt/ . Once it was moved I transferred ownership to root and gave global run permissions. Upon completing that I created a file in /usr/bin/ (where is not as important as the fact that it be on the PATH) and included the following text in it:

#!/bin/sh 
export SUBLIME_HOME="/opt/sublime" 
$SUBLIME_HOME/sublime_text "$*" 

I ensured that others could run but not edit the file, and viola!, sublime_text was available in dmenu as well as the command line!.

Getting started in netsec and cyber security

I was recently asked by a friend what they best way to get started in cyber security would be. As someone who knows jack squat about cyber security I am not in any way really qualified to answer this, but, at the same time, I am also someone who is generally pretty good at finding resources and learning stuff, so I figure I may put some resources together.

One of the first things that you can do it find communities that work within the topic and start interacting with them, some of the groups that I am aware of in one way of another include:

  • Reddit NetSec – A community for news and discussion regarding information security and related topics.
  • Reddit Ask NetSec –  A place to ask questions regarding Information Security.
  • #r_netsec – Reddit NetSec on freenode.
  • Pentester Academy – A place to learn pentesting online
  • Reddit Blackhat - We seek to discuss vulnerability and exploitation theory and [evading] the countermeasures used to deter exploitation
  • Reddit Codes – A place to find various codes to keep your cracking sharp.
  • Reddit WebSec – A place to discuss web-based vulnerabilities.
  • Reddit CompSec – A place to discuss local, computer based security measures.
  • Reddit Malware – A place to discuss malware reports and gain other information.
  • Reddit NetSecStudents - A place to share resources, ask questions, and help other students learn Network Security specialties of all kinds.
  • NetSecStudents wiki – probably a better maintained, more through concept of what this blog post is supposed to be.

A list of freenode IRC channels that I keep handy that may be handy for you as well:

  • ##infra-talk
  • #metasploit
  • #NetHack
  • ##Networking
  • #reddit-sysadmin
  • #r_netsec
  • ##security
  • ##systemadmins
  • #algorithms
  • ##c++basic
  • ##C++general
  • #friendly-coders
  • #learnprogramming
  • ##math
  • ##programming
  • #python
  • #bash
  • ##linux

An online phenomenon that I would actively pay attention to is “cicada 3301“. It is turning out to me a huge information searching game hosted annually by persons unknown.

 

My burgeoning love affair with DD-WRT

For the longest time I was unable to use DD-WRT because the router I had was unsupported and I could not justify buying a new router simply to play with the Linux based firmware that it provided. Then one day, several months ago, I started looking through the routers available at goodwill and found one that was in the dd-wrt database and was only $4. I took it home that night and was up until all hours reading all of the available documentation on installing DD-WRT on that router and then installed it. Thankfully it was considerably easier than I originally anticipated.

Continue reading

webanize – a bash script to help me share my scripts.

I recently started reading the Advanced Bash-Scripting Guide and I have been writing scripts intended to save me time and make some of what I do more visible to potential employers. While I have tried to keep a portfolio online for a very long time I found that I really sucked at updating it. I would have to upload the scripts to the portfolio site, figure out how to make them look “okay”, and then update the actual database that built the portfolio site. Okay, honestly it was not a lot of work, but today I decided to make it even less.

Continue reading

Home Directory Listing, my first “to order” bash script.

I recently have been reading the “Advanced Bash-Scripting Guide” because the trial and error that I agonized through to create the taskwarrior scripts nearly drove my crazy. Since I have spent a lot of time reading today I decided to start to try my hand at one of the exercises. Specifically I did the first one, “Home Directory Listing”.

Continue reading