455 lines
16 KiB
Text
455 lines
16 KiB
Text
|
|
<cftry>
|
|
<!--- create a config that is not in svn --->
|
|
<cfscript>
|
|
cfg = { path = "cfpayment.api.gateway.stripe.stripe", TestSecretKey = "sk_test_LfbmDduJxTwbVZmvcByYmirw" };
|
|
svc = createObject("component", "cfpayment.api.core").init(cfg);
|
|
</cfscript>
|
|
<cfcatch>
|
|
<!--- if gwParams doesn't exist (or otherwise bombs), create a generic structure with blank values --->
|
|
<cfset gwParams = StructNew() />
|
|
<cfset gwParams.Path = "bogus.gateway" />
|
|
<!--- these following params aren't needed for the bogus gateway, but should normally be filled in --->
|
|
<cfset gwParams.MerchantAccount = "" />
|
|
<cfset gwParams.userName = "" />
|
|
<cfset gwParams.password = "" />
|
|
</cfcatch>
|
|
</cftry>
|
|
|
|
<!--- create gw and get reference --->
|
|
<cfset gw = svc.getGateway() />
|
|
<cfset creditcard = svc.createCreditCard()>
|
|
<cfset money = svc.createMoney()>
|
|
<cfset errors=ArrayNew(1)>
|
|
<!--- Initialize Form Variables --->
|
|
<cfparam name="form.BillingFirstName" default="">
|
|
<cfparam name="form.BillingLastName" default="">
|
|
<cfparam name="form.BillingAddressOne" default="">
|
|
<cfparam name="form.BillingCity" default="">
|
|
<cfparam name="form.BillingState" default="">
|
|
<cfparam name="form.BillingZip" default="">
|
|
<cfparam name="form.BillingCountry" default="">
|
|
<cfparam name="form.BillingPhoneNumber" default="">
|
|
<cfparam name="form.BillingEmailAddress" default="">
|
|
<cfparam name="form.orderID" default="1">
|
|
|
|
|
|
<cfparam name="form.Amount" default="1">
|
|
<cfparam name="form.CardNumber" default="">
|
|
<cfparam name="form.CardType" default="">
|
|
<cfparam name="form.ExpirationMonth" default="">
|
|
<cfparam name="form.ExpirationYear" default="">
|
|
<cfparam name="form.TransactionType" default="SALE">
|
|
<cfparam name="form.cvv2" default="">
|
|
<cftry>
|
|
|
|
|
|
<cfif structKeyExists(form, "submitBtn")>
|
|
<!--- PROCESS --->
|
|
<cftry>
|
|
<!--- populate credit card object with passed data --->
|
|
<cfset ccObjList="Account,Month,Year,VerificationValue,FirstName,LastName,Address,PostalCode">
|
|
<cfset formFieldList="CardNumber,ExpirationMonth,ExpirationYear,cvv2,BillingFirstName,BillingLastName,BillingAddressOne,BillingZip">
|
|
<cfset numFields=ListLen(ccObjList)>
|
|
<cfloop from="1" to="#numFields#" index="idx">
|
|
<cfset currCCField=ListGetAt(ccObjList, idx)>
|
|
<cfset currFormField=ListGetAt(formFieldList, idx)>
|
|
<cfinvoke component="#creditcard#" method="set#currCCField#">
|
|
<cfinvokeargument name="#currCCField#" value="#form[currFormField]#" />
|
|
</cfinvoke>
|
|
</cfloop>
|
|
<!--- validate credit card --->
|
|
<cfset errors=creditCard.validate()>
|
|
<cfif not ArrayLen(errors)>
|
|
<!--- gateway specific parameters --->
|
|
<!--- for example, the skipjack gateway requires email, phonenumber and ordernumber; these are passed in the options struct --->
|
|
<cfset options=StructNew()>
|
|
<cfset options.address=StructNew()>
|
|
<cfset options.email=form.BillingEmailAddress>
|
|
<!--- send through generic address structure --->
|
|
<cfset options.address.phone=form.BillingPhoneNumber>
|
|
<cfset options.address.Address1=form.BillingAddressOne>
|
|
<cfset options.address.City=form.BillingCity>
|
|
<cfset options.address.State=form.BillingState>
|
|
<cfset options.address.PostalCode=form.BillingZip>
|
|
<cfset options.address.Country=form.BillingCountry>
|
|
<cfset options.order_id=form.orderID>
|
|
|
|
<!--- setup the money object with the amount --->
|
|
<cfset money.init( 100)><!--- in cents --->
|
|
|
|
<!--- send authorize command --->
|
|
<!--- pass in the money object, the creditcard object, extra parameters required by the specific gateway --->
|
|
<cfset authResponse=gw.purchase(money, creditCard)>
|
|
|
|
<!--- process response --->
|
|
|
|
<cfif authResponse.getSuccess()>
|
|
<!---- TODO use stcResult to get the data post payment. ---->
|
|
<cfset stcResult = {
|
|
id = authResponse.getParsedResult().id,
|
|
amount = round(authResponse.getParsedResult().amount)/100,
|
|
message = authResponse.getParsedResult().outcome.seller_message,
|
|
receipt_url = authResponse.getParsedResult().receipt_url,
|
|
status = authResponse.getParsedResult().status
|
|
}>
|
|
|
|
<cfoutput>The credit card payment was successfully processed. <br><br>
|
|
Your receipt can be found <a href="#stcResult.receipt_url#" target="new">here.</a><br><br></cfoutput>
|
|
|
|
<!--- <cfdump var=#stcResult#>
|
|
|
|
TODO: you should now do something (record, redirect, etc.) --->
|
|
|
|
<!--- <cfdump var="#deserializeJSON(authResponse.getResult())#" label="getResult">
|
|
<cfdump var="#authResponse.getParsedResult()#" label="getParsedResult">
|
|
<cfif isdefined("arguments")><cfdump var="#arguments#" label="Arguments Scope"></cfif>
|
|
<cfif isdefined("attributes")><cfdump var="#attributes#" label="Attributes Scope"></cfif>
|
|
<cfif isdefined("CGI")><cfdump var="#CGI#" label="CGI Scope"></cfif>
|
|
<cfif isdefined("Request")><cfdump var="#Request#" label="Request Scope"></cfif>
|
|
<cfif isdefined("URL")><cfdump var="#URL#" label="URL Scope"></cfif>
|
|
<cfif isdefined("Form")><cfdump var="#Form#" label="Form Scope"></cfif>
|
|
<cfif isdefined("session")><cfdump var="#Session#" label="Session Scope"></cfif> --->
|
|
|
|
<!--- do the rest of the stuff --->
|
|
|
|
<cfset cart_total = 0>
|
|
|
|
<CFQUERY name="get_queued_food" datasource="#application.datasource#" dbtype="ODBC">
|
|
SELECT A.CartID, A.AddedOn, A.Quantity, A.SpecialRemark, B.BusinessName, B.UserID, C.ItemName, A.Price, D.UserFirstName, D.LaerFirstName, D.Balance
|
|
FROM dbo.Business_CartMaster A, dbo.BusinessMaster B, dbo.Business_ItemMaster C, Users D
|
|
WHERE A.UserID = D.UserID
|
|
AND
|
|
A.ItemID = C.ItemID
|
|
AND
|
|
B.BusinessID = C.BusinessID
|
|
AND
|
|
C.BusinessID = #form.bizid#
|
|
AND
|
|
A.CartStatusID = 1
|
|
AND
|
|
A.UserID = #session.UserID#
|
|
ORDER BY A.AddedOn DESC
|
|
</CFQUERY>
|
|
|
|
<cfoutput query="get_queued_food">
|
|
|
|
<cfif len(get_queued_food.Price) EQ 0><cfset get_queued_food.Price=0></cfif>
|
|
|
|
<cfset cart_total = (cart_total + (get_queued_food.price*get_queued_food.quantity))>
|
|
|
|
<CFQUERY name="update_cart_items" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE dbo.Business_CartMaster
|
|
SET CartStatusID=2
|
|
WHERE CartID=#get_queued_food.CartID#
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="Insert_order" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT Into dbo.Business_OrderMaster (
|
|
UserID,
|
|
BusinessID,
|
|
IsDelivery,
|
|
TotalAmount,
|
|
Remark,
|
|
Address,
|
|
DeliveryCharge,
|
|
TaxChargeAmount,
|
|
AddedOn
|
|
)
|
|
values (
|
|
#session.UserID#,
|
|
#form.bizid#,
|
|
0,
|
|
#cart_total#,
|
|
'#form.SpecialRemark#',
|
|
'',
|
|
0,
|
|
0,
|
|
#CreateODBCDateTime(now())#
|
|
);
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="get_last_inserted" datasource="#application.datasource#" dbtype="ODBC">
|
|
SELECT TOP 1 O.OrderID, M.UserID as person_to_pay_for_orderID, U.Balance
|
|
FROM dbo.Business_OrderMaster O, dbo.BusinessMaster M, Users U
|
|
WHERE O.BusinessID = M.BusinessID
|
|
AND
|
|
M.UserID = U.UserID
|
|
ORDER BY O.AddedOn DESC
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="link_order" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT INTO dbo.Business_OrderCartTransaction (
|
|
OrderID,
|
|
CartID
|
|
)
|
|
VALUES
|
|
(
|
|
#get_last_inserted.OrderID#,
|
|
#get_queued_food.CartID#
|
|
)
|
|
</CFQUERY>
|
|
|
|
</cfoutput>
|
|
|
|
<cfif payment_mode eq "account">
|
|
|
|
<cfif cart_total < 10>
|
|
<cfset admin_fees_calculated = cart_total * .022>
|
|
<cfelse>
|
|
<cfset admin_fees_calculated = cart_total * .005 +.215>
|
|
</cfif>
|
|
|
|
<cfelseif payment_mode eq "mixed">
|
|
|
|
<cfif cart_total-get_queued_food.balance < 10>
|
|
<cfset admin_fees_calculated = (cart_total-get_queued_food.balance) * .022>
|
|
<cfelse>
|
|
<cfset admin_fees_calculated = (cart_total-get_queued_food.balance) * .005 +.215>
|
|
</cfif>
|
|
|
|
<cfelseif payment_mode eq "creditcard">
|
|
|
|
<cfset admin_fees_calculated = 0>
|
|
|
|
<cfelse>
|
|
|
|
problem! what is the payment_mode?<br><br>
|
|
|
|
</cfif>
|
|
|
|
<cfif payment_mode eq "account">
|
|
|
|
<CFQUERY name="insert_payment" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT INTO dbo.PaymentMaster (
|
|
ReceiverID,
|
|
PayUserID,
|
|
BusinessID,
|
|
Amount,
|
|
AdminFees,
|
|
PayUserRemark,
|
|
SystemRemark,
|
|
AddedOn,
|
|
CartID,
|
|
PaymentReceiptURL
|
|
)
|
|
VALUES (
|
|
#get_last_inserted.person_to_pay_for_orderID#,
|
|
#session.UserID#,
|
|
#form.bizid#,
|
|
#cart_total-admin_fees_calculated#,
|
|
#admin_fees_calculated#,
|
|
'',
|
|
'from account balance',
|
|
#createODBCDateTime(now())#,
|
|
#get_queued_food.CartID#,
|
|
'#stcResult.receipt_url#'
|
|
)
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="delete_item_cost" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #check_user.balance-cart_total#
|
|
WHERE UserID = #session.UserID#
|
|
</CFQUERY>
|
|
|
|
<cfif cart_total < 10>
|
|
<cfset admin_fees_calculated = cart_total * .022>
|
|
<cfelse>
|
|
<cfset admin_fees_calculated = cart_total * .005 +.215>
|
|
</cfif>
|
|
|
|
<CFQUERY name="transfer_money_to_business_creators_UserID" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #get_last_inserted.balance+(cart_total-admin_fees_calculated)#
|
|
WHERE UserID = #get_last_inserted.person_to_pay_for_orderID#
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="get_user_104_balance" datasource="#application.datasource#" dbtype="ODBC">
|
|
SELECT balance
|
|
FROM Users
|
|
WHERE UserID = 104
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="transfer_fees_to_UserID_104" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #get_user_104_balance.balance+admin_fees_calculated#
|
|
WHERE UserID = 104
|
|
</CFQUERY>
|
|
|
|
<cfelseif payment_mode eq "mixed">
|
|
|
|
<cfset card_fee = (cart_total-get_queued_food.balance/.9725)*.0275+.30>
|
|
|
|
<CFQUERY name="insert_account_payment" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT INTO dbo.PaymentMaster (
|
|
ReceiverID,
|
|
PayUserID,
|
|
BusinessID,
|
|
Amount,
|
|
AdminFees,
|
|
PayUserRemark,
|
|
SystemRemark,
|
|
AddedOn,
|
|
CartID
|
|
)
|
|
VALUES (
|
|
#get_last_inserted.person_to_pay_for_orderID#,
|
|
#session.UserID#,
|
|
#form.bizid#,
|
|
#get_queued_food.balance#,
|
|
#admin_fees_calculated#,
|
|
'',
|
|
'mixed - from account balance #dollarformat(get_queued_food.balance)#',
|
|
#createODBCDateTime(now())#,
|
|
#get_queued_food.CartID#
|
|
)
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="insert_cc_payment" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT INTO dbo.PaymentMaster (
|
|
ReceiverID,
|
|
PayUserID,
|
|
BusinessID,
|
|
Amount,
|
|
AdminFees,
|
|
PayUserRemark,
|
|
SystemRemark,
|
|
AddedOn,
|
|
CartID
|
|
)
|
|
VALUES (
|
|
#get_last_inserted.person_to_pay_for_orderID#,
|
|
#session.UserID#,
|
|
#form.bizid#,
|
|
#cart_total-get_queued_food.balance#,
|
|
0,
|
|
'',
|
|
'mixed - from credit card #dollarformat(amount)#',
|
|
#createODBCDateTime(now())#,
|
|
#get_queued_food.CartID#
|
|
)
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="delete_item_cost" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = 0
|
|
WHERE UserID = #session.UserID#
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="transfer_money_to_business_creators_UserID" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #get_last_inserted.balance+(cart_total-admin_fees_calculated)#
|
|
WHERE UserID = #get_last_inserted.person_to_pay_for_orderID#
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="get_user_104_balance" datasource="#application.datasource#" dbtype="ODBC">
|
|
SELECT balance
|
|
FROM Users
|
|
WHERE UserID = 104
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="transfer_fees_to_UserID_104" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #get_user_104_balance.balance+admin_fees_calculated#
|
|
WHERE UserID = 104
|
|
</CFQUERY>
|
|
|
|
<cfelseif payment_mode eq "creditcard"> <!--- credit card --->
|
|
|
|
<CFQUERY name="insert_payment" datasource="#application.datasource#" dbtype="ODBC">
|
|
INSERT INTO dbo.PaymentMaster (
|
|
ReceiverID,
|
|
PayUserID,
|
|
BusinessID,
|
|
Amount,
|
|
AdminFees,
|
|
PayUserRemark,
|
|
SystemRemark,
|
|
AddedOn,
|
|
CartID
|
|
)
|
|
VALUES (
|
|
#get_last_inserted.person_to_pay_for_orderID#,
|
|
#session.UserID#,
|
|
#form.bizid#,
|
|
#cart_total-admin_fees_calculated#,
|
|
#admin_fees_calculated#,
|
|
'',
|
|
'from credit card',
|
|
#createODBCDateTime(now())#,
|
|
#get_queued_food.CartID#
|
|
)
|
|
</CFQUERY>
|
|
|
|
<CFQUERY name="transfer_money_to_business_creators_UserID" datasource="#application.datasource#" dbtype="ODBC">
|
|
UPDATE Users
|
|
SET balance = #get_last_inserted.balance+(cart_total-admin_fees_calculated)#
|
|
WHERE UserID = #get_last_inserted.person_to_pay_for_orderID#
|
|
</CFQUERY>
|
|
|
|
<cfelse>
|
|
|
|
problem! what is the payment_mode?<br><br><cfabort>
|
|
|
|
</cfif>
|
|
|
|
<div align="center">Order Complete!<br><br><a href="index.cfm">Reload</a> for new balance<br><br>
|
|
|
|
<!--- end additional stuff --->
|
|
|
|
<cfoutput>
|
|
|
|
<script language="JavaScript">
|
|
function submitformfunctionaddstuff()
|
|
{
|
|
document.myformcartadd.submit();
|
|
}
|
|
</script>
|
|
|
|
<form action="#request.cgiPath#" method="post" name="myformcartadd" id="myformcartadd" style="display:inline;">
|
|
|
|
<a href="javascript: submitformfunctionaddstuff()">Add Stuff</a>
|
|
|
|
<input type="hidden" name="mode" value="start">
|
|
|
|
</form><br><br>
|
|
|
|
</cfoutput>
|
|
|
|
<!--- end do the rest of the stuff --->
|
|
|
|
<cfelse>
|
|
<!--- add the gateway errors to any existing errors we are tracking (eg. creditcard object errors) --->
|
|
<cfset ArrayAppend(errors, authResponse.getMessage())>
|
|
</cfif>
|
|
</cfif>
|
|
<!--- if we get here, there were errors --->
|
|
<!--- <cfdump var="#errors.getErrors()#"> --->
|
|
<cfcatch type="cfpayment">
|
|
|
|
<!--- <cfdump var="#cfcatch#"><cfabort> --->
|
|
<cfset ArrayAppend(errors, cfcatch.message)>
|
|
</cfcatch>
|
|
<cfcatch>
|
|
|
|
<!--- <cfdump var="#cfcatch#"><cfabort> --->
|
|
<cfset ArrayAppend(errors, cfcatch.message)>
|
|
</cfcatch>
|
|
</cftry>
|
|
</cfif>
|
|
|
|
<cfcatch>
|
|
<cfoutput>Initialization Error - Credit Card Payment Form</cfoutput>
|
|
<!--- TODO: this should be e-mailed or logged somewhere --->
|
|
<cfdump var="#CFCatch#" label="CFCatch Scope">
|
|
<cfif isdefined("arguments")><cfdump var="#arguments#" label="Arguments Scope"></cfif>
|
|
<cfif isdefined("attributes")><cfdump var="#attributes#" label="Attributes Scope"></cfif>
|
|
<cfif isdefined("CGI")><cfdump var="#CGI#" label="CGI Scope"></cfif>
|
|
<cfif isdefined("Request")><cfdump var="#Request#" label="Request Scope"></cfif>
|
|
<cfif isdefined("URL")><cfdump var="#URL#" label="URL Scope"></cfif>
|
|
<cfif isdefined("Form")><cfdump var="#Form#" label="Form Scope"></cfif>
|
|
<cfif isdefined("session")><cfdump var="#Session#" label="Session Scope"></cfif>
|
|
<cfabort>
|
|
</cfcatch>
|
|
</cftry>
|