title: Stripe Integration with classic ASP
body: <p>i am trying to integrate stripe payment gateway in classic ASP using vb script , i am very new to ASP and vb script and trying to learn how it could be done.</p>
  
  <p>meanwhile i have got a great resource : <a href="http://nilsson.co/post/103085221039" rel="nofollow">Integrate stripe using Classic ASP</a></p>
  
  <p>i am just trying to do the same as explained in the above article.</p>
  
  <p>My Folder Structure :</p>
  
  <p>/stripe</p>
  
  <p>-aspJSON1.17.asp</p>
  
  <p>-index.asp</p>
  
  <p>--My index.asp file--</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;!–#include virtual="aspJSON1.17.asp" –&gt;
  &lt;%
  Function GetStripe(url,typ)
  
  Set xml = Server.CreateObject("Microsoft.XMLHTTP")
  
  xml.Open typ, url, False
  
  xml.setRequestHeader "Authorization", "Bearer sk_test_mykey"
  
  xml.Send
  
  GetStripe = xml.responseText
  
  Set xml = Nothing
  
  End Function
  
  var_stripe_token = Request(stripeToken)   
  
  var_json = GetStripe("https://api.stripe.com/v1/customers?description=LoremIpsum&amp;card=" &amp; var_stripe_token, "POST")
  
  Set oJSON = New aspJSON
  
  oJSON.loadJSON(var_json)
  
  Response.Write "&lt;pre&gt;JSON returned: " &amp; var_json &amp; "&lt;/pre&gt;"
  Response.Write "&lt;pre&gt;UserId: " &amp; oJSON.data("id") &amp; "&lt;/pre&gt;"
  %&gt;
  &lt;html&gt;
  &lt;head&gt;
  &lt;title&gt;Stripe Testing&lt;/title&gt;
   &lt;script src="//code.jquery.com/jquery-1.11.3.min.js"&gt;&lt;/script&gt;
   &lt;script type="text/javascript" src="https://js.stripe.com/v2/"&gt;&lt;/script&gt;
   &lt;script type="text/javascript"&gt;
    // This identifies your website in the createToken call below
     Stripe.setPublishableKey('My_publishkey'); 
    // ...
   &lt;/script&gt;
   &lt;script type="text/javascript"&gt;
    jQuery(function($) {
      $('#payment-form').submit(function(event) {
     var $form = $(this);
  
     // Disable the submit button to prevent repeated clicks
     $form.find('button').prop('disabled', true);
  
     Stripe.card.createToken($form, stripeResponseHandler);
  
     // Prevent the form from submitting with the default action
     return false;
      });
    });
    
    function stripeResponseHandler(status, response) {
      var $form = $('#payment-form');
      $("#stripeToken").val(response.id); 
      $form.find('button').prop('disabled', false);
      $form.get(0).submit();
  
      
    }
   &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
   &lt;h3&gt;Stripe Testing&lt;/h3&gt;
  &lt;form action="" method="POST" id="payment-form"&gt;
    &lt;span class="payment-errors"&gt;&lt;/span&gt;
  
    &lt;div class="form-row"&gt;
      &lt;label&gt;
        &lt;span&gt;Card Number&lt;/span&gt;
        &lt;input type="text" size="20" data-stripe="number"/&gt;
      &lt;/label&gt;
    &lt;/div&gt;
  
    &lt;div class="form-row"&gt;
      &lt;label&gt;
        &lt;span&gt;CVC&lt;/span&gt;
        &lt;input type="text" size="4" data-stripe="cvc"/&gt;
      &lt;/label&gt;
    &lt;/div&gt;
  
    &lt;div class="form-row"&gt;
      &lt;label&gt;
        &lt;span&gt;Expiration (MM/YYYY)&lt;/span&gt;
        &lt;input type="text" size="2" data-stripe="exp-month"/&gt;
      &lt;/label&gt;
      &lt;span&gt; / &lt;/span&gt;
      &lt;input type="text" size="4" data-stripe="exp-year"/&gt;
    &lt;/div&gt;
   &lt;input type="hidden" name="stripeToken" id="stripeToken" value="" /&gt;
    &lt;button type="submit"&gt;Submit Payment&lt;/button&gt;
  &lt;/form&gt;
  &lt;/body&gt;
  &lt;/html&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p>--My aspJSON1.17.asp --</p>
  
  <p><div class="snippet" data-lang="js" data-hide="false">
  <div class="snippet-code">
  <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;%
  'Februari 2014 - Version 1.17 by Gerrit van Kuipers
  Class aspJSON
   Public data
   Private p_JSONstring
   private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound
  
   Private Sub Class_Initialize()
    Set data = Collection()
  
       Set aj_RegExp = new regexp
       aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}"
       aj_RegExp.Global = False
       aj_RegExp.IgnoreCase = True
       aj_RegExp.Multiline = True
   End Sub
  
   Private Sub Class_Terminate()
    Set data = Nothing
       Set aj_RegExp = Nothing
   End Sub
  
   Public Sub loadJSON(inputsource)
    inputsource = aj_MultilineTrim(inputsource)
    If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load."
    
    select case Left(inputsource, 1)
     case "{", "["
     case else
      Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
      aj_XmlHttp.open "GET", inputsource, False
      aj_XmlHttp.setRequestHeader "Content-Type", "text/json"
      aj_XmlHttp.setRequestHeader "CharSet", "UTF-8"
      aj_XmlHttp.Send
      inputsource = aj_XmlHttp.responseText
      set aj_XmlHttp = Nothing
    end select
  
    p_JSONstring = CleanUpJSONstring(inputsource)
    aj_lines = Split(p_JSONstring, Chr(13) &amp; Chr(10))
  
    Dim level(99)
    aj_currentlevel = 1
    Set level(aj_currentlevel) = data
    For Each aj_line In aj_lines
     aj_currentkey = ""
     aj_currentvalue = ""
     If Instr(aj_line, ":") &gt; 0 Then
      aj_in_string = False
      aj_in_escape = False
      aj_colonfound = False
      For aj_i_tmp = 1 To Len(aj_line)
       If aj_in_escape Then
        aj_in_escape = False
       Else
        Select Case Mid(aj_line, aj_i_tmp, 1)
         Case """"
          aj_in_string = Not aj_in_string
         Case ":"
          If Not aj_in_escape And Not aj_in_string Then
           aj_currentkey = Left(aj_line, aj_i_tmp - 1)
           aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)
           aj_colonfound = True
           Exit For
          End If
         Case "\"
          aj_in_escape = True
        End Select
       End If
      Next
      if aj_colonfound then
       aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")
       If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""
      end if
     End If
     If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then
      If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
      Set level(aj_currentlevel).Item(aj_currentkey) = Collection()
      Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)
      aj_currentlevel = aj_currentlevel + 1
      aj_currentkey = ""
     ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then
      aj_currentlevel = aj_currentlevel - 1
     ElseIf Len(Trim(aj_line)) &gt; 0 Then
      if Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line
      aj_currentvalue = getJSONValue(aj_currentvalue)
  
      If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count
      level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue
     End If
    Next
   End Sub
  
   Public Function Collection()
    set Collection = Server.CreateObject("Scripting.Dictionary")
   End Function
  
   Public Function AddToCollection(dictobj)
    if TypeName(dictobj) &lt;&gt; "Dictionary" then Err.Raise 1, "AddToCollection Error", "Not a collection."
    aj_newlabel = dictobj.Count
    dictobj.Add aj_newlabel, Collection()
    set AddToCollection = dictobj.item(aj_newlabel)
   end function
  
   Private Function CleanUpJSONstring(aj_originalstring)
    aj_originalstring = Replace(aj_originalstring, Chr(13) &amp; Chr(10), "")
    aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)
    aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""
    For aj_i_tmp = 1 To Len(aj_originalstring)
     aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)
     If aj_in_escape Then
      aj_in_escape = False
      aj_s_tmp = aj_s_tmp &amp; aj_char_tmp
     Else
      Select Case aj_char_tmp
       Case "\" : aj_s_tmp = aj_s_tmp &amp; aj_char_tmp : aj_in_escape = True
       Case """" : aj_s_tmp = aj_s_tmp &amp; aj_char_tmp : aj_in_string = Not aj_in_string
       Case "{", "["
        aj_s_tmp = aj_s_tmp &amp; aj_char_tmp &amp; aj_InlineIf(aj_in_string, "", Chr(13) &amp; Chr(10))
       Case "}", "]"
        aj_s_tmp = aj_s_tmp &amp; aj_InlineIf(aj_in_string, "", Chr(13) &amp; Chr(10)) &amp; aj_char_tmp
       Case "," : aj_s_tmp = aj_s_tmp &amp; aj_char_tmp &amp; aj_InlineIf(aj_in_string, "", Chr(13) &amp; Chr(10))
       Case Else : aj_s_tmp = aj_s_tmp &amp; aj_char_tmp
      End Select
     End If
    Next
  
    CleanUpJSONstring = ""
    aj_s_tmp = split(aj_s_tmp, Chr(13) &amp; Chr(10))
    For Each aj_line_tmp In aj_s_tmp
     aj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "")
     CleanUpJSONstring = CleanUpJSONstring &amp; aj_Trim(aj_line_tmp) &amp; Chr(13) &amp; Chr(10)
    Next
   End Function
  
   Private Function getJSONValue(ByVal val)
    val = Trim(val)
    If Left(val,1) = ":"  Then val = Mid(val, 2)
    If Right(val,1) = "," Then val = Left(val, Len(val) - 1)
    val = Trim(val)
  
    Select Case val
     Case "true"  : getJSONValue = True
     Case "false" : getJSONValue = False
     Case "null" : getJSONValue = Null
     Case Else
      If (Instr(val, """") = 0) Then
       If IsNumeric(val) Then
        getJSONValue = CDbl(val)
       Else
        getJSONValue = val
       End If
      Else
       If Left(val,1) = """" Then val = Mid(val, 2)
       If Right(val,1) = """" Then val = Left(val, Len(val) - 1)
       getJSONValue = aj_JSONDecode(Trim(val))
      End If
    End Select
   End Function
  
   Private JSONoutput_level
   Public Function JSONoutput()
    dim wrap_dicttype, aj_label
    JSONoutput_level = 1
    wrap_dicttype = "[]"
    For Each aj_label In data
      If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"
    Next
    JSONoutput = Left(wrap_dicttype, 1) &amp; Chr(13) &amp; Chr(10) &amp; GetDict(data) &amp; Right(wrap_dicttype, 1)
   End Function
  
   Private Function GetDict(objDict)
    dim aj_item, aj_keyvals, aj_label, aj_dicttype
    For Each aj_item In objDict
     Select Case TypeName(objDict.Item(aj_item))
      Case "Dictionary"
       GetDict = GetDict &amp; Space(JSONoutput_level * 4)
       
       aj_dicttype = "[]"
       For Each aj_label In objDict.Item(aj_item).Keys
         If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"
       Next
       If aj_IsInt(aj_item) Then
        GetDict = GetDict &amp; (Left(aj_dicttype,1) &amp; Chr(13) &amp; Chr(10))
       Else
        GetDict = GetDict &amp; ("""" &amp; aj_JSONEncode(aj_item) &amp; """" &amp; ": " &amp; Left(aj_dicttype,1) &amp; Chr(13) &amp; Chr(10))
       End If
       JSONoutput_level = JSONoutput_level + 1
       
       aj_keyvals = objDict.Keys
       GetDict = GetDict &amp; (GetSubDict(objDict.Item(aj_item)) &amp; Space(JSONoutput_level * 4) &amp; Right(aj_dicttype,1) &amp; aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") &amp; Chr(13) &amp; Chr(10))
      Case Else
       aj_keyvals =  objDict.Keys
       GetDict = GetDict &amp; (Space(JSONoutput_level * 4) &amp; aj_InlineIf(aj_IsInt(aj_item), "", """" &amp; aj_JSONEncode(aj_item) &amp; """: ") &amp; WriteValue(objDict.Item(aj_item)) &amp; aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") &amp; Chr(13) &amp; Chr(10))
     End Select
    Next
   End Function
  
   Private Function aj_IsInt(val)
    aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")
   End Function
  
   Private Function GetSubDict(objSubDict)
    GetSubDict = GetDict(objSubDict)
    JSONoutput_level= JSONoutput_level -1
   End Function
  
   Private Function WriteValue(ByVal val)
    Select Case TypeName(val)
     Case "Double", "Integer", "Long": WriteValue = val
     Case "Null"      : WriteValue = "null"
     Case "Boolean"     : WriteValue = aj_InlineIf(val, "true", "false")
     Case Else      : WriteValue = """" &amp; aj_JSONEncode(val) &amp; """"
    End Select
   End Function
  
   Private Function aj_JSONEncode(ByVal val)
    val = Replace(val, "\", "\\")
    val = Replace(val, """", "\""")
    'val = Replace(val, "/", "\/")
    val = Replace(val, Chr(8), "\b")
    val = Replace(val, Chr(12), "\f")
    val = Replace(val, Chr(10), "\n")
    val = Replace(val, Chr(13), "\r")
    val = Replace(val, Chr(9), "\t")
    aj_JSONEncode = Trim(val)
   End Function
  
   Private Function aj_JSONDecode(ByVal val)
    val = Replace(val, "\""", """")
    val = Replace(val, "\\", "\")
    val = Replace(val, "\/", "/")
    val = Replace(val, "\b", Chr(8))
    val = Replace(val, "\f", Chr(12))
    val = Replace(val, "\n", Chr(10))
    val = Replace(val, "\r", Chr(13))
    val = Replace(val, "\t", Chr(9))
    aj_JSONDecode = Trim(val)
   End Function
  
   Private Function aj_InlineIf(condition, returntrue, returnfalse)
    If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalse
   End Function
  
   Private Function aj_Strip(ByVal val, stripper)
    If Left(val, 1) = stripper Then val = Mid(val, 2)
    If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)
    aj_Strip = val
   End Function
  
   Private Function aj_MultilineTrim(TextData)
    aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")
   End Function
  
   private function aj_Trim(val)
    aj_Trim = Trim(val)
    Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : Loop
    Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop
    aj_Trim = Trim(aj_Trim)
   end function
  End Class
  %&gt;</code></pre>
  </div>
  </div>
  </p>
  
  <p>the problem is that when i run the code it gives the following error:</p>
  
  <blockquote>
    <p>Microsoft VBScript runtime error '800a01fa'</p>
    
    <p>Class not defined: 'aspJSON'</p>
    
    <p>/stripe/index.asp, line 24</p>
  </blockquote>
  
  <p>Please let me know what wrong am i doing.thanks</p>