• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 516
  • Last Modified:

Checkout System

I need a cart system and/or checkout that works with Verisign.  My client doesn't want to use Paypal for these systems, so I am looking for a similar setup.  Basically, I have created the site, with full products listing...just need somewhere to send the information for a secure cart and checkout (like PayPal does).  I would create this, but the client doesn't want to pay for it, and wants something free or cheaper?

Any ideas?  Any experience?
0
alorentz
Asked:
alorentz
3 Solutions
 
Marv-inCommented:
I have always used Bank of America merchant services they handle the credit cards and allow you to integrate with your shopping cart
http://www.bankofamerica.com/
0
 
alorentzAuthor Commented:
Thanks for the info, but as I said, I need the cart for a 3 party provider, like PayPal....and using Verisign.
0
 
jmelikaCommented:
alorentz,

I don't think there is such a thing as a plug and play when it comes to CC Merchants.  You have to be able to integrate it with your site as well as linking it with your CC Merchant service (ticketmaster, Authorize.net, etc).  Here is a link of a bunch of components that can link your site with the CC Merchant easily, and cost effectively.
http://www.aspin.com/home/components/shopping/creditca

Good luck!
JM
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
alorentzAuthor Commented:
Thanks, I'm familiar with Authorize.Net.

So, you're saying that there aren't other services like PayPal Shopping Cart? (just a tool to send products to)
0
 
mk_bCommented:
check out these:

http://www.worldpay.com/
http://www.FreeMerchant.com/
http://www.clickbank.com/
http://www.dxstorm.com/
http://smallbusiness.yahoo.com/merchant/

there are probably other i just ran seach on google? for "sell online" and i've used click bank befor. im not sure what the pricing structure for these places are but i dont think you are going to find a free one? ut then again you just might.

mk
0
 
alorentzAuthor Commented:
None of these really provides just a cart system, like PayPal...where you just send information to the site for your products, and they build the cart.  They have no knowledge of your products, they just accept the inputs your send, like price, qty, product name and put them in a cart for purchase.

That is what I am looking for...thanks.
0
 
fritz_the_blankCommented:
I know that Cybercash used to have a payment harness designed for this. They specified the names of the fields that you had to send them, and they would respond with the appropriate code. In all cases, they had no details of what was purchased, and as far as the client was concerned, they never left your site.

I understand that Verisign owns what used to be cybercash, so I would be surprised if they still didn't have that available....


FtB
0
 
fritz_the_blankCommented:
I can't get at the information without registering, but they claim to have the code that I am talking about here:

http://www.verisign.com/products-services/payment-processing/online-payment/payflow-pro/faq.html

FtB
0
 
alorentzAuthor Commented:
Thanks, will check it out!  I'm reviewing 2checkout.com plug and play cart as well...
0
 
alorentzAuthor Commented:
As far as the verisign link, I have seen that, but PayFlow Pro is the whole cart and checkout (from what I've read)  I'm looking for a cart, and then possibly use PayFlow Link as the payment processor.

Think I'm just going to tell my client that I will have to build it and that's that!
0
 
fritz_the_blankCommented:
I wrote code for the old cybercash harness, and they needed a merchant id, an amount, the credit card type, number, and expiration, and then when I sent that code, their page returned the authorization code and a transaction ID.  The cybercash wrapper looks like this:

<!--#include file="D:\inetpub\cybercash-mck\CCMckDirectLib.inc"-->
<!--#include file="D:\inetpub\cybercash-mck\CCMckLib.inc"-->
<!--#include file="D:\inetpub\cybercash-mck\CCVarBlock.inc"-->

<%

      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ' CyberCash API harness for ASP/VB Script

      ' define the location of the CyberCash configuration file
      CyberCashConfigFile = "D:\inetpub\cybercash-mck\merchant_conf"
      MerchantCodeStamp = "-Your merchant code"

      ' USAGE:
      ' (1) call CC_initialize to set up the CyberCash API with the configuration file
      ' (2) call CC_authorize to authorize a new transaction (card is authorized, order is incomplete)
      ' (3) call CC_settle to settle an existing transaction (card is charged and order is complete)
      ' (4) (alternatively) call CC_void to void an existing transaction (card is not charged, order
      '     is complete)

      ' GENERAL NOTES ON CARD FORMATS:
      ' 1) expiration date format is MM/YY, where MM = 01-12, and YY = 2-digit year (i.e., "01" = 2001)
      ' 2) believe it or not, the actual card type is never passed as part of the transaction
      '    for Mastercard, Visa and Amex cards.  (Additional info is needed for Discover)

      ' NOTES ON DATA VALIDATION:
      ' The routines below do not validate any data, although they will return rudimentary errors
      ' if the CyberCash system reports an error(s).  In general, you shold validate that the
      ' person has entered non-null information for all fields, and numeric only for fields like
      ' the credit card number, expiry month and year, and of course amount.

      ' NOTES ON CYBERCASH TRANSACTION ID
      ' CyberCash transactions are created with a user (merchant) defined unique transaction
      ' identifier.  Ideally this is an identity column value from a database.  We also like to
      ' append a merchant code (see MerchantCodeStamp, above) at the end of the ID, which might
      ' vary by transaction.  For example, the merchant may want to have different transaction
      ' ID's depending on the type of product/service being purchased, etc.  The unique CyberCash
      ' code that you choose should be securely stored in the web database so that it may be
      ' referred to later.  This is the code that you will need to pass to both the CC_settle
      ' and CC_void procedures (below).

      ' NOTES ON HOW THIS SCRIPT DIFFERS FROM THE REST OF THE CYBERCASH MERCHANT API
      ' The majority of the files that are installed/configured during CyberCash installation on
      ' the web server are for the canned "storefront" system.  If you are going to be accessing
      ' the API directly (like we are doing with this script), then you don't need any of the
      ' storefront files.  All that you end up needing are the three API include (.inc) files
      ' (see header of this script) -- which should be installed in a directory that is not
      ' visible to web users, for security -- and the DLL's that are registered in IIS during
      ' the base CyberCash install.  It is easy enough to create/customize the merchant configuration
      ' file (see location defined above, in CyberCashConfigFile.)


      sub CC_initialize(initfile)
            if (InitConfig(CyberCashConfigFile) = nE_ERROR) then
                  Response.write("There was an error initializing Cybercash.")
                  Response.End
            end if
      end sub


      sub CC_authorize (ChargeAmount, CardNumber, CardExpiration, CardholderFullName, _
            CardholderStreetAddress, CardholderCity, CartholderState, CardholderCountry)

            set CCargs = CreateObject("Scripting.Dictionary")
            CCargs.Add "order-id", CCID & MerchantCodeStamp
            CCargs.Add "amount", ChargeAmount
            CCargs.Add "card-number", CardNumber
            CCargs.Add "card-exp", CardExpiration
            CCargs.Add "card-name", CardholderFullName
            CCargs.Add "card-address", CardholderStreetAddress
            CCargs.Add "card-city", CardholderCity
            CCargs.Add "card-zip", CardholderZipcode
            CCargs.Add "card-state", CardholderState
            CCargs.Add "card-country", CardholderCountry

            dim CCReturn

            ' perform the Cybercash transaction
            SendCC2_1Server "mauthonly", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) _
                  and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  response.write("There was a CyberCash error while attempting to authorize a transaction: " & _
                        CCReturn("MErrMsg") & " : " & CCReturn("MStatus"))
                  Response.End
            end if

            ' Get the last 4 digits of the credit card number
            CCnum = Trim(CardNumber)
            CCnumLen = Len(CCnum)

            ' typically, these two variables are saved somehow (i.e., in a database), and maybe
            ' also put on a printable receipt for the customer
            LastFourCardDigits  = Mid(CCnum, CCnumLen-3, 4)
            CybercashTransID = CCID

      end sub


      sub CC_settle (ChargeAmount, CybercashTransID)

            set CCargs = CreateObject("Scripting.Dictionary")
            CCargs.Add "order-id", CybercashTransID
            CCargs.Add "amount", ChargeAmount

            dim CCReturn

            ' perform the Cybercash transaction
            SendCC2_1Server "postauth", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) _
                  and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  response.write("There was a CyberCash error while attempting to settle a transaction: " & _
                        CCReturn("MErrMsg") & " : " & CCReturn("MStatus"))
                  Response.End
            end if

      end sub

      ' void an existing (unsettled) transaction.  Note that the technical procedure for
      ' voiding a transaction is to immediately mark it and then void it ...
      sub CC_void (ChargeAmount, CybercashTransID)

            set CCargs = CreateObject("Scripting.Dictionary")
            CCargs.Add "order-id", CybercashTransID
            CCargs.Add "amount", ChargeAmount

            dim CCReturn

            ' (1) perform the Cybercash transaction to first post the transaction
            SendCC2_1Server "postauth", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) _
                  and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  response.write("There was a CyberCash error while attempting to void(1) a transaction: " & _
                        CCReturn("MErrMsg") & " : " & CCReturn("MStatus"))
                  Response.End
            end if

            ' (2) now void the marked transaction -- note that we are reusing the existing
            ' hash data from above, and adding an additional key/value (txn-type)
            CCargs.Add "txn-type", "marked"

            SendCC2_lServer "void", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) _
                  and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  response.write("There was a CyberCash error while attempting to void(2) a transaction: " & _
                        CCReturn("MErrMsg") & " : " & CCReturn("MStatus"))
                  Response.End
            end if

      end sub


%>


and the harness looks like this:

<!--#include file="../../../cybercash-mck\CCMckDirectLib.inc"-->
<!--#include file="../../../cybercash-mck\CCMckLib.inc"-->
<!--#include file="../../../cybercash-mck\CCVarBlock.inc"-->

<%

      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      ' CyberCash API harness for ASP/VB Script

      ' define the location of the CyberCash configuration file
      sCyberCashConfigFile = "D:\inetpub\cybercash-mck\mbmi-merchant_conf"
      sConfigLoc = "D:\inetpub\cybercash-mck\mbmi-merchant_conf"
      sMerchantCodeStamp = "-Your Merchant code here"

      ' USAGE:
      ' (1) call CC_initialize to set up the CyberCash API with the configuration file
      ' (2) call CC_authorize to authorize a new transaction (card is authorized, order is incomplete)
      ' (3) call CC_settle to settle an existing transaction (card is charged and order is complete)
      ' (4) (alternatively) call CC_void to void an existing transaction (card is not charged, order
      '     is complete)

      ' GENERAL NOTES ON CARD FORMATS:
      ' 1) expiration date format is MM/YY, where MM = 01-12, and YY = 2-digit year (i.e., "01" = 2001)
      ' 2) believe it or not, the actual card type is never passed as part of the transaction
      '    for Mastercard, Visa and Amex cards.  (Additional info is needed for Discover)

      ' NOTES ON DATA VALIDATION:
      ' The routines below do not validate any data, although they will return rudimentary errors
      ' if the CyberCash system reports an error(s).  In general, you shold validate that the
      ' person has entered non-null information for all fields, and numeric only for fields like
      ' the credit card number, expiry month and year, and of course amount.

      ' NOTES ON CYBERCASH TRANSACTION ID
      ' CyberCash transactions are created with a user (merchant) defined unique transaction
      ' identifier.  Ideally this is an identity column value from a database.  We also like to
      ' append a merchant code (see MerchantCodeStamp, above) at the end of the ID, which might
      ' vary by transaction.  For example, the merchant may want to have different transaction
      ' ID's depending on the type of product/service being purchased, etc.  The unique CyberCash
      ' code that you choose should be securely stored in the web database so that it may be
      ' referred to later.  This is the code that you will need to pass to both the CC_settle
      ' and CC_void procedures (below).

      ' NOTES ON HOW THIS SCRIPT DIFFERS FROM THE REST OF THE CYBERCASH MERCHANT API
      ' The majority of the files that are installed/configured during CyberCash installation on
      ' the web server are for the canned "storefront" system.  If you are going to be accessing
      ' the API directly (like we are doing with this script), then you don't need any of the
      ' storefront files.  All that you end up needing are the three API include (.inc) files
      ' (see header of this script) -- which should be installed in a directory that is not
      ' visible to web users, for security -- and the DLL's that are registered in IIS during
      ' the base CyberCash install.  It is easy enough to create/customize the merchant configuration
      ' file (see location defined above, in CyberCashConfigFile.)


      function CC_initialize
            if (InitConfig() = nE_ERROR) then
                  sReturn = "[ERROR] : There was an erro initializing CyberCash"
            end if
            CC_initialize = sReturn
      end function

      function CC_authorize (CCID, ChargeAmount, CardNumber, CardExpiration, CardholderFullName, CardholderStreetAddress, CardholderCity, CartholderState, CardholderCountry)

            set CCargs = CreateObject("Scripting.Dictionary")
            with CCargs
                  .Add "order-id", CCID & sMerchantCodeStamp
                  .Add "amount", ChargeAmount
                  .Add "card-number", CardNumber
                  .Add "card-exp", CardExpiration
                  .Add "card-name", CardholderFullName
                  .Add "card-address", CardholderStreetAddress
                  .Add "card-city", CardholderCity
                  .Add "card-zip", CardholderZipcode
                  .Add "card-state", CardholderState
                  .Add "card-country", CardholderCountry
            end with
            
            dim CCReturn

            ' perform the Cybercash transaction
            SendCC2_1Server "mauthonly", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success") = 0) and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  sReturn = "[ERROR] : " & CCReturn("MErrMsg") & " : " & CCReturn("MStatus")
            else
                  sReturn = CCReturn("auth-code")
            end if
            
'            for each sKey in CCReturn.Keys
'                  response.write "[DEBUG] : " & sKey & ":" & CCReturn(sKey) & "<BR>"
'            next
            
            CC_authorize=sReturn
            
      end function


      function CC_settle (ChargeAmount, CybercashTransID)

            set CCargs = CreateObject("Scripting.Dictionary")
            with CCargs
                  .Add "order-id", CybercashTransID & sMerchantCodeStamp
                  .Add "amount", ChargeAmount
            end with

            dim CCReturn

            ' perform the Cybercash transaction
            SendCC2_1Server "postauth", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  sReturn = "[ERROR] : " & CCReturn("MErrMsg") & " : " & CCReturn("MStatus")
            else
                  sReturn = CCReturn("ref-code")
            end if

            CC_settle = sReturn
            
      end function

      ' void an existing (unsettled) transaction.  Note that the technical procedure for
      ' voiding a transaction is to immediately mark it and then void it ...
      function CC_void (ChargeAmount, CybercashTransID)

            set CCargs = CreateObject("Scripting.Dictionary")
            with CCargs
                  .Add "order-id", CybercashTransID
                  .Add "amount", ChargeAmount
            end with

            dim CCReturn

            ' (1) perform the Cybercash transaction to first post the transaction
            SendCC2_1Server "postauth", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  sReturn = "[ERROR] : " & CCReturn("MErrMsg") & " : " & CCReturn("MStatus")
                  CC_void = sReturn
                  Exit Function
            end if

            ' (2) now void the marked transaction -- note that we are reusing the existing
            ' hash data from above, and adding an additional key/value (txn-type)
            CCargs.Add "txn-type", "marked"

            SendCC2_lServer "void", CCargs, CCReturn

            ' if there was an error, handle it here...
            if not (strcomp(CCReturn("MStatus"), "success", 1) = 0) and not (strcomp(CCReturn("MStatus"), "success-duplicate") = 0) then
                  sReturn "[ERROR] : " & CCReturn("MErrMsg") & " : " & CCReturn("MStatus")
            else
                  sReturn = CCReturn("ref-code")
            end if

            CC_void = sReturn

      end function

      ' ******************* CREDIT CARD VALIDATION :-) *************************
      ' Author: Daniel Dhillon
      ' Email: daniel@dhillon.com
      ' Website: http://www.daniel.dhillon.com
      
Function getNumbersOnly(cn)
Dim sb
Dim i
               
    For i = 1 To Len(cn)
        If Asc(Mid(cn, i, 1)) >= 47 And Asc(Mid(cn, i, 1)) <= 57 Then
            sb = sb + Mid(cn, i, 1)
        End If
    Next
   
    getNumbersOnly = sb
       
End Function

Function isValidCard(ct, cn)
Dim sb
Dim CardNumber(18)
Dim i

    sb = getNumbersOnly(cn)

    For i = 1 To Len(sb)
        CardNumber(i) = CInt(Mid(sb, i, 1))
    Next

    If isValidLength(ct, Len(sb)) Then
        If isValidPrefix(ct, sb) Then
            If isValidCheckDigit(ct, sb) Then
                isValidCard = 0
            Else

                isValidCard = 3
            End If
        Else

            isValidCard = 2
        End If
    Else

        isValidCard = 1
    End If

End Function

Function isValidLength(ct, cl)
    If ct = "enRoute" Then
        If cl = 15 Then
          isValidLength = True
          Exit Function
       End If
       
    ElseIf ct = "DINERSCLUB" Then
       If cl = 14 Then
          isValidLength = True
          Exit Function
       End If
    ElseIf ct = "AMERICANEXPRESS" Then
       If cl = 15 Then
          isValidLength = True
          Exit Function
       End If
    ElseIf ct = "VISA" Then
       If cl = 13 Or cl = 16 Then
          isValidLength = True
          Exit Function
       End If
    ElseIf ct = "MASTERCARD" Then
       If cl = 16 Then
          isValidLength = True
          Exit Function
       End If
    ElseIf ct = "DISCOVER" Then
       If cl = 16 Then
          isValidLength = True
          Exit Function
       End If
    ElseIf ct = "JCB" Then
       If cl = 15 Or cl = 16 Then
          isValidLength = True
          Exit Function
       End If
    End If
                               
    isValidLength = False

End Function

Function isValidPrefix(ct, cn)

    If ct = "enRoute" Then
       If "2014" = Mid(cn, 1, 4) Or "2149" = Mid(cn, 1, 4) Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "DINERSCLUB" Then
       If Mid(cn, 1, 2) = "36" Or Mid(cn, 1, 2) = "38" Or (CInt(Mid(cn, 1, 3)) >= 300 And CInt(Mid(cn, 1, 3)) >= 305) Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "AMERICANEXPRESS" Then
       If "34" = Mid(cn, 1, 2) Or "37" = Mid(cn, 1, 2) Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "VISA" Then
       If "4" = Mid(cn, 1, 1) Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "MASTERCARD" Then
       If CInt(Mid(cn, 1, 2)) >= 51 And CInt(Mid(cn, 1, 2)) <= 55 Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "DISCOVER" Then
       If "6011" = Mid(cn, 1, 4) Then
          isValidPrefix = True
          Exit Function
       End If
    ElseIf ct = "JCB" Then
       If "2131" = Mid(cn, 1, 4) Or "1800" = Mid(cn, 1, 4) Or "3" = Mid(cn, 1, 1) Then
          isValidPrefix = True
          Exit Function
       End If
    End If
                               
    isValidPrefix = False

End Function

Function isValidCheckDigit(ct, cn)
Dim chkTotal
Dim slen
Dim chkDigit, compDigit
Dim altNum
Dim doubleDigit
Dim otherNumber
Dim i, j

    slen = Len(cn)
    altNum = True
    otherNumber = slen - 1
   
    chkDigit = CInt(Right(cn, 1))
   
    For i = otherNumber To 1 Step -1
        If altNum Then
            doubleDigit = CInt(Mid(cn, i, 1)) * 2
           
            For j = 1 To Len(CStr(doubleDigit))
                chkTotal = chkTotal + CInt(Mid(doubleDigit, j, 1))
            Next
        Else
            chkTotal = chkTotal + Mid(cn, i, 1)
        End If
       
        altNum = altNum Xor True
    Next
   
    compDigit = 10 - (chkTotal Mod 10)
    If compDigit = 10 Then
       compDigit = 0
    End If
   
    If compDigit = chkDigit Then
       isValidCheckDigit = True
       Exit Function
    End If
   
    isValidCheckDigit = False
       
End Function

Function ValidateCard(CardType, CardNumber)
    Dim resp, respond
   
    resp = isValidCard(CardType, CardNumber)
            
            ValidateCard=resp
            ' 0 = success, 1 = invalid length, 2 = invalid prefix, 3 = invalid checkdigit, 4 = unknown
End Function
      
      ' ***********************************************************************
      
%>
0
 
fritz_the_blankCommented:
That is the difference between the two levels of service--the more expensive otpion includes the code and allows you to have transparent operations. The less expensive otpion forces you to navigate away from your site to have Verisign process it.

FtB
0
 
alorentzAuthor Commented:
Yes, I have code like that for Authorize.Net, but still would need a cart...and that is what the client doesn't want to pay for.
0
 
fritz_the_blankCommented:
Yeah, I would like a house on the ocean without paying for it as well.....

I am sure that you know about this one:  http://www.comersus.com/

FtB
0
 
alorentzAuthor Commented:
Yes, I have already built the catalog, just need to the cart.  Thanks.
0
 
alorentzAuthor Commented:
Look like I'm building it myself :)....
0
 
fritz_the_blankCommented:
Good luck with that.

FtB
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now