· 5 years ago · May 09, 2020, 10:28 AM
1/*
2______TEST LOGIN CREDENTIALS_______
3EMAIL: FUCKYEAH@GMAIL.COM
4PHONE: 696969698
5
6//TRYING TO GET THIS TO WORK BUT ALSO WANT TO MAKE SURE I AM CORRECTLY DOING THESE THINGS:
7-CHARGE A TRANSACTION FEE OF 2.1%. I HAVE FUNCTION THAT IS CORRECTLY SETTING THE stripeAccount USING SQL BASED OFF THE origin URL
8IF YOU NEED TO MANUALLY SET THE origin FOR TESTING THE URL IS https://s3-eu-west-1.amazonaws.com/
9- AND INITIATE THE FUNCTION (LINES 355-455) ONLY UPON SUCCESSFUL TRANSACTION
10*/
11
12____HERE IS MY NODE FUNCTION___
13// URL: https://www.ecommoncents.com/api/WORKFLOW/PAYMENTINTENT-CREATE
14
15const request = require('request');
16
17exports.handler = async(event, context, callback) => {
18 const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
19 var EMAIL = event["POST"]["email"];
20 var ORIGIN = event["POST"]["origin"];
21 var TOTAL = event["POST"]["amount"];
22 var AMOUNT = (TOTAL * 100).toFixed(0);
23 var FEE = (AMOUNT * .021).toFixed(0);
24 var stripeAccount = event["POST"]["stripeAccount"];
25 const paymentIntent = await stripe.paymentIntents.create({
26 amount: AMOUNT,
27 currency: "usd"
28 });
29 application_fee_amount: FEE
30 on_behalf_of: stripeAccount;
31 JSON.stringify(paymentIntent)
32 callback(null, paymentIntent.client_secret)
33};
34
35/*
36__________SERVER RESPONSE___________
37
38Result
39{
40 "status": "OK",
41 "execTime": 1359,
42 "billedTime": 2800,
43 "payload": "pi_1GgpVQKIyIGvXN6gGkH98TMj_secret_E2DTSNQZV6rzoEZS6Q9DnbvAe",
44 "logs": ""
45}
46*/
47
48______NODE FUNCTION THAT RETURNS ENTIRE TABLE___
49
50//URL: https://www.ecommoncents.com/api/WORKFLOW/PAYMENTINTENT-CREATE
51
52const request = require('request');
53
54exports.handler = async(event, context, callback) => {
55 const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
56 var EMAIL = event["POST"]["email"];
57 var ORIGIN = event["POST"]["origin"];
58 var TOTAL = event["POST"]["amount"];
59 var AMOUNT = (TOTAL * 100).toFixed(0);
60 var FEE = (AMOUNT * .021).toFixed(0);
61 var stripeAccount = event["POST"]["stripeAccount"];
62 const paymentIntent = await stripe.paymentIntents.create({
63 amount: AMOUNT,
64 currency: "usd"
65 });
66 application_fee_amount: FEE
67 on_behalf_of: stripeAccount;
68 console.log(paymentIntent)
69 callback(null, paymentIntent.client_secret)
70};
71
72
73/*
74Result
75{
76 "status": "OK",
77 "execTime": 353,
78 "billedTime": 800,
79 "payload": "pi_1GgplWKIyIGvXN6gwce4Njw1_secret_cUhsZ4vZDeHMw07xI0zyCb7Dx",
80 "logs": "2020-05-09T10:18:42.261Z\t4ba11211-0591-488b-914c-4559302b2875\tINFO\t{\n id: 'pi_1GgplWKIyIGvXN6gwce4Njw1',\n object: 'payment_intent',\n amount: 32145,\n amount_capturable: 0,\n amount_received: 0,\n application: null,\n application_fee_amount: null,\n canceled_at: null,\n cancellation_reason: null,\n capture_method: 'automatic',\n charges: {\n object: 'list',\n data: [],\n has_more: false,\n total_count: 0,\n url: '/v1/charges?payment_intent=pi_1GgplWKIyIGvXN6gwce4Njw1'\n },\n client_secret: 'pi_1GgplWKIyIGvXN6gwce4Njw1_secret_cUhsZ4vZDeHMw07xI0zyCb7Dx',\n confirmation_method: 'automatic',\n created: 1589019522,\n currency: 'usd',\n customer: null,\n description: null,\n invoice: null,\n last_payment_error: null,\n livemode: false,\n metadata: {},\n next_action: null,\n on_behalf_of: null,\n payment_method: null,\n payment_method_options: { card: { installments: null, request_three_d_secure: 'automatic' } },\n payment_method_types: [ 'card' ],\n receipt_email: null,\n review: null,\n setup_future_usage: null,\n shipping: null,\n source: null,\n statement_descriptor: null,\n statement_descriptor_suffix: null,\n status: 'requires_payment_method',\n transfer_data: null,\n transfer_group: null\n}\n"
81}
82Logs
832020-05-09T10:18:42.261Z 4ba11211-0591-488b-914c-4559302b2875 INFO {
84 id: 'pi_1GgplWKIyIGvXN6gwce4Njw1',
85 object: 'payment_intent',
86 amount: 32145,
87 amount_capturable: 0,
88 amount_received: 0,
89 application: null,
90 application_fee_amount: null,
91 canceled_at: null,
92 cancellation_reason: null,
93 capture_method: 'automatic',
94 charges: {
95 object: 'list',
96 data: [],
97 has_more: false,
98 total_count: 0,
99 url: '/v1/charges?payment_intent=pi_1GgplWKIyIGvXN6gwce4Njw1'
100 },
101 client_secret: 'pi_1GgplWKIyIGvXN6gwce4Njw1_secret_cUhsZ4vZDeHMw07xI0zyCb7Dx',
102 confirmation_method: 'automatic',
103 created: 1589019522,
104 currency: 'usd',
105 customer: null,
106 description: null,
107 invoice: null,
108 last_payment_error: null,
109 livemode: false,
110 metadata: {},
111 next_action: null,
112 on_behalf_of: null,
113 payment_method: null,
114 payment_method_options: { card: { installments: null, request_three_d_secure: 'automatic' } },
115 payment_method_types: [ 'card' ],
116 receipt_email: null,
117 review: null,
118 setup_future_usage: null,
119 shipping: null,
120 source: null,
121 statement_descriptor: null,
122 statement_descriptor_suffix: null,
123 status: 'requires_payment_method',
124 transfer_data: null,
125 transfer_group: null
126}
127*/
128
129
130
131
132______________FORM PAGE CODE______________
133
134
135<!DOCTYPE html>
136<html lang="en">
137 <head>
138 <meta charset="utf-8" />
139 <title>Accept a card payment</title>
140 <meta name="description" content="A demo of a card payment on Stripe" />
141 <meta name="viewport" content="width=device-width, initial-scale=1" />
142 <meta class="appdrag-theme-topbar-color" name="theme-color" content="#3F51B5">
143 <meta class="appdrag-theme-topbar-color" name="msapplication-navbutton-color" content="#3F51B5">
144 <meta class="appdrag-theme-topbar-color" name="apple-mobile-web-app-status-bar-style" content="#3F51B5">
145 <link rel="shortcut icon" type="image/png" href="favicon.png">
146 <link rel="stylesheet" type="text/css" href="//cf.appdrag.com/resources/appallin-universal-theme.css">
147 <link rel="stylesheet" type="text/css" href="//s3-eu-west-1.amazonaws.com/dev.appdrag.com/resources/css/appdrag.css">
148 <link rel="stylesheet" crossorigin="anonymous" id="appdrag-palette" type="text/css" href="//s3-eu-west-1.amazonaws.com/dev.appdrag.com/simpli-buy-7d636b/css/appdrag-palette.css">
149 <link rel="stylesheet" type="text/css" href="//s3-eu-west-1.amazonaws.com/dev.appdrag.com/simpli-buy-7d636b/fonts/fonts.css">
150 <link rel="stylesheet" href="global.css" />
151 <script src="https://js.stripe.com/v3/"></script>
152 <script src="/client.js" defer></script>
153 <style>
154 /* Variables */
155 * {
156 box-sizing: border-box;
157 }
158
159 body {
160 font-family: -apple-system, BlinkMacSystemFont, sans-serif;
161 font-size: 16px;
162 -webkit-font-smoothing: antialiased;
163 display: flex;
164 justify-content: center;
165 align-content: center;
166 height: 100vh;
167 width: 100vw;
168 }
169
170 form {
171 width: 30vw;
172 min-width: 500px;
173 align-self: center;
174 box-shadow: 5px 4px 5.5px 1.5px rgba(50, 50, 93, 0.1),
175 5px 4px 5.5px 1.5px rgba(50, 50, 93, 0.1), 5px 4px 5.5px 1.5px rgba(0, 0, 0, 0.07);
176 border-radius: 7px;
177 padding: 40px;
178 }
179
180 input {
181 border-radius: 6px;
182 margin-bottom: 6px;
183 padding: 12px;
184 border: 2px solid rgba(50, 50, 93, 0.1);
185 height: 50px;
186 font-size: 18px;
187 width: 100%;
188 background: white;
189 }
190
191 .result-message {
192 line-height: 22px;
193 font-size: 16px;
194 }
195
196 .result-message a {
197 color: rgb(89, 111, 214);
198 font-weight: 600;
199 text-decoration: none;
200 }
201
202 .hidden {
203 display: none;
204 }
205
206 .card-error {
207 color: rgb(105, 115, 134);
208 text-align: left;
209 font-size: 13px;
210 line-height: 17px;
211 margin-top: 12px;
212 }
213
214 #card-element {
215 border-radius: 4px 4px 4px 4px;
216 padding: 12px;
217 border: 2px solid rgba(50, 50, 93, 0.1);
218 height: 44px;
219 width: 100%;
220 background: white;
221 }
222
223 #payment-request-button {
224 margin-bottom: 32px;
225 }
226
227 /* Buttons and links */
228 button {
229 background: #337ab7;
230 color: #ffffff;
231 font-family: Arial, sans-serif;
232 border-radius: 4px 4px 4px 4px;
233 border: 0;
234 padding: 12px 16px;
235 font-size: 21px;
236 font-weight: 600;
237 cursor: pointer;
238 display: block;
239 transition: all 0.2s ease;
240 box-shadow: 5px 4px 5.5px 0px rgba(0, 0, 0, 0.07);
241 width: 100%;
242 }
243
244 button:hover {
245 filter: contrast(115%);
246 }
247
248 button:disabled {
249 opacity: 0.5;
250 cursor: default;
251 }
252
253 /* spinner/processing state, errors */
254 .spinner,
255 .spinner:before,
256 .spinner:after {
257 border-radius: 50%;
258 }
259
260 .spinner {
261 color: #ffffff;
262 font-size: 22px;
263 text-indent: -99999px;
264 margin: 0px auto;
265 position: relative;
266 width: 20px;
267 height: 20px;
268 box-shadow: inset 0 0 0 2px;
269 -webkit-transform: translateZ(0);
270 -ms-transform: translateZ(0);
271 transform: translateZ(0);
272 }
273
274 .spinner:before,
275 .spinner:after {
276 position: absolute;
277 content: "";
278 }
279
280 .spinner:before {
281 width: 10.4px;
282 height: 20.4px;
283 background: #337ab7;
284 border-radius: 20.4px 0 0 20.4px;
285 top: -0.2px;
286 left: -0.2px;
287 -webkit-transform-origin: 10.4px 10.2px;
288 transform-origin: 10.4px 10.2px;
289 -webkit-animation: loading 2s infinite ease 1.5s;
290 animation: loading 2s infinite ease 1.5s;
291 }
292
293 .spinner:after {
294 width: 10.4px;
295 height: 10.2px;
296 background: #337ab7;
297 border-radius: 0 10.2px 10.2px 0;
298 top: -0.1px;
299 left: 10.2px;
300 -webkit-transform-origin: 0px 10.2px;
301 transform-origin: 0px 10.2px;
302 -webkit-animation: loading 2s infinite ease;
303 animation: loading 2s infinite ease;
304 }
305
306 @-webkit-keyframes loading {
307 0% {
308 -webkit-transform: rotate(0deg);
309 transform: rotate(0deg);
310 }
311
312 100% {
313 -webkit-transform: rotate(360deg);
314 transform: rotate(360deg);
315 }
316 }
317
318 @keyframes loading {
319 0% {
320 -webkit-transform: rotate(0deg);
321 transform: rotate(0deg);
322 }
323
324 100% {
325 -webkit-transform: rotate(360deg);
326 transform: rotate(360deg);
327 }
328 }
329
330 @media only screen and (max-width: 600px) {
331 form {
332 width: 80vw;
333 }
334 }
335 </style>
336
337
338 <style media="screen">
339 .green{border:solid #008000 1px}.error{border:solid #f00 1px}.StripeElement{box-sizing:border-box;height:40px;padding:10px 12px;border:2px solid transparent;border-radius:8px;background-color:#eee;box-shadow:0 1px 5px 0 #222;-webkit-transition:box-shadow 150ms ease;transition:box-shadow 150ms ease}.StripeElement--focus{box-shadow:0 1px 5px 0 #36f}.StripeElement--invalid{border-color:#fa755a}.StripeElement--webkit-autofill{background-color:#fefde5 !important}.button{display:inline-block;border-radius:18px;background-color:#337ab7;border:4px solid #222;color:#f2f2f2 !important;text-align:center;font-size:28px;padding:20px;width:98%;transition:all .5s;cursor:pointer;margin:5px}.button span{cursor:pointer;display:inline-block;position:relative;transition:.5s}.button span:after{position:absolute;opacity:0;top:0;right:-20px;transition:.5s}.button:hover span{padding-right:25px}.button:hover span:after{opacity:1;right:0}
340 </style>
341
342 </head>
343 <body appid="simpli-buy-7d636b">
344 <div id="smallForm">
345
346 <class appallin-universal-section="" au-pt-20="" dynamic-sized-element="" section-hovered="" style="background-color:rgba(255,255,255);background-size:cover;background-position:center center;background-repeat:no-repeat;padding:202px 0 !important;margin:0 !important;border-width:0;border-color:#424242;border-style:solid" margin-desktop-top="0" margin-desktop-bottom="0" margin-desktop-left="0" margin-desktop-right="0" padding-desktop-top="202" padding-desktop-bottom="202" padding-desktop-left="0" padding-desktop-right="0" video-background-poster="" video-background-path="" id="ui-id-194" market-id="3698873" owner-id="25" category="Hero">
347 <div class="container">
348 <div class="row">
349 <div class="col-sm-4 col-smp-4 col-md-2" style="margin:0 !important;padding:0 15px !important" margin-desktop-top="0" margin-desktop-bottom="0" margin-desktop-left="15" margin-desktop-right="15" padding-desktop-top="0" padding-desktop-bottom="0" padding-desktop-left="15" padding-desktop-right="15">
350 </div>
351 <div class="col-sm-4 col-smp-4 col-md-8" style='background-size:cover;background-repeat:no-repeat;background-attachment:initial;background-position:50% 50%;border-width:3px 3px 3px 3px;border-color:#dcdcdc;border-style:solid' video-background-poster="" video-background-path="">
352
353 <h3 class="appdrag-element fs-m" style="position:relative;margin-bottom:10px !important;margin-top:0 !important;padding:0 !important;text-align:justify !important" category="Texts" margin-desktop-bottom="10" padding-desktop-top="0" padding-desktop-bottom="0" padding-desktop-left="15" padding-desktop-right="15" market-id="3700131" owner-id="4" fs-m="11"><br><br>
354 <span style="letter-spacing:1em;font-size:11px"><span style="font-family:syncopate"><strong><span style="font-size:24px">EMAIL ADDRESS:</span></strong></span></span>
355 </h3>
356 <div class="form-group">
357 <input type="text" id="email" name="email" placeholder="EXAMPLE@EMAIL.COM" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:3px;border-style:solid;border-color:#676767;text-indent:15px;height:50px;background-color:#ebebeb" letter-spacing="20" value="">
358 <style class="placeholder-color">
359 .appdrag-element[placeholder-id='dfk17r1m2q1'] ::-webkit-input-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] ::-moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :-ms-input-placeholder{color:rgba(182,182,182,1)}
360 </style>
361 </div>
362 <div class="form-group">
363 <input type="hidden" id="origin" name="origin" placeholder="" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:3px;border-style:solid;border-color:#676767;text-indent:15px;height:50px;background-color:#ebebeb" letter-spacing="20" value=origin>
364 <style class="placeholder-color">
365 .appdrag-element[placeholder-id='dfk17r1m2q1'] ::-webkit-input-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] ::-moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :-ms-input-placeholder{color:rgba(182,182,182,1)}
366 </style>
367 </div>
368 <h3 class="appdrag-element fs-tp fs-m" style="position:relative;margin-bottom:10px !important;margin-top:0 !important;padding:0 !important;text-align:justify !important" category="Texts" margin-desktop-bottom="10" padding-desktop-top="0" padding-desktop-bottom="0" padding-desktop-left="0" padding-desktop-right="0" market-id="3700132" owner-id="4" fs-tp="24" fs-m="12">
369 <span style="letter-spacing:1em;font-size:12px"><span style="font-family:syncopate"><strong><span style="font-size:24px">PHONE NUMBER:</span></strong></span></span>
370 </h3>
371 <div class="form-group">
372 <input type="text" id="phone_number" name="phone_number" placeholder="5551234567" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:3px;border-style:solid;border-color:#676767;text-indent:15px;height:50px;background-color:#ebebeb" letter-spacing="20" value="">
373 <style class="placeholder-color">
374 .appdrag-element[placeholder-id='dfk17r1m2q1'] ::-webkit-input-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] ::-moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :-ms-input-placeholder{color:rgba(182,182,182,1)}
375 </style>
376 </div>
377 <h3 class="appdrag-element fs-m" style="position:relative;margin-bottom:10px !important;margin-top:50px !important;padding:0 !important;text-align:justify !important" category="Texts" margin-desktop-bottom="10" padding-desktop-top="0" padding-desktop-bottom="0" padding-desktop-left="0" padding-desktop-right="0" market-id="3700131" owner-id="4" margin-desktop-top="50" fs-m="24">
378 <span style="font-size:30px"><span style="letter-spacing:1em"><span style="font-family:syncopate"><strong>TOTAL:</strong></span></span></span>
379 </h3>
380 <div class="form-group">
381 <input type="text" id="amount_big" name="amount_big" placeholder="$0.00" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:3px;border-style:solid;border-color:#676767;text-indent:15px;height:50px;background-color:#ebebeb" letter-spacing="20" value="">
382 <style class="placeholder-color">
383 .appdrag-element[placeholder-id='dfk17r1m2q1'] ::-webkit-input-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] ::-moz-placeholder{color:rgba(182,182,182,1)}.appdrag-element[placeholder-id='dfk17r1m2q1'] :-ms-input-placeholder{color:rgba(182,182,182,1)}
384 </style>
385 <br>
386 <br>
387 <button class="button" style="vertical-align:middle" onclick="submitSmallForm()"><span>CONTINUE</span></button>
388 </div><br>
389 </div>
390 <div class="col-sm-4 col-smp-4 col-md-2">
391 </div>
392 </div>
393 </div>
394 </class>
395 </div>
396 <br><br>
397 <style media="screen">
398 .green{border:solid #008000 2px}.error{border:solid #f00 1px}.StripeElement{box-sizing:border-box;height:40px;padding:10px 12px;border:2px solid transparent;border-radius:8px;background-color:#eee;box-shadow:0 1px 5px 0 #222;-webkit-transition:box-shadow 150ms ease;transition:box-shadow 150ms ease}.StripeElement--focus{box-shadow:5px 2px 5px 4px #36f}.StripeElement--invalid{border-color:#fa755a}.StripeElement--webkit-autofill{background-color:#fefde5 !important}.button{display:inline-block;border-radius:18px;background-color:#337ab7;border:4px solid #222;color:#f2f2f2 !important;text-align:center;font-size:28px;padding:20px;width:100%;transition:all .5s;cursor:pointer;margin:5px}.button span{cursor:pointer;display:inline-block;position:relative;transition:.5s}.button span:after{position:absolute;opacity:0;top:0;right:-20px;transition:.5s}.button:hover span{padding-right:25px}.button:hover span:after{opacity:1;right:0}
399 </style>
400 <br><br><br>
401 <div id="bigForm">
402 <form id="payment-form">
403 <div class="container">
404
405
406 <input type="hidden" id="amount" name="amount" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:3px;border-style:solid;border-color:#444;text-indent:15px;height:50px;background-color:#fff" letter-spacing="20" value="amount">
407 <div id="amount"></div>
408 <input type="hidden" id="stripeAccount" name="stripeAccount" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value=stripeAccount>
409 <div id="stripeAccount"></div>
410 <input type="hidden" id="store_hash" name="store_hash" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value=store_hash>
411 <div id="store_hash"></div>
412 <input type="hidden" id="x_auth_token" name="x_auth_token" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value=x_auth_token>
413 <div id="x_auth_token"></div>
414 <input type="hidden" id="x_auth_client" name="x_auth_client" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value=x_auth_client>
415 <div id="x_auth_client"></div>
416 <input type="hidden" id="phone_number_big" name="phone_number_big" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value="phone_number"></div>
417 <div id="phone_number"></div>
418 <input type="hidden" id="email_big" name="email_big" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value="email">
419 <div id="email"></div>
420 <div class="form-group">
421 <input type="hidden" id="stripeToken" name="stripeToken" class="form-control" style="font-family:Frutiger-Light;font-weight:bold;letter-spacing:.2em;border-width:4px;border-style:solid;border-color:#222;text-indent:15px;height:60px;background-color:#fff" letter-spacing="20" size="8" value=stripeToken>
422 </div>
423
424 <!-- Display a payment form -->
425 <div id="card-element"></div>
426 <br><br>
427 <button id="submit">
428 <script>// A reference to Stripe.js initialized with your real test publishable API key.
429var stripe = Stripe("pk_test_jZ7dhI358i0PyN4SLawcndTI00t09Mj1Nb");
430
431function checkoutData() {
432var settings = {
433 "url": "https://www.ecommoncents.com/api/WORKFLOW/PAYMENTINTENT-CREATE",
434 "data": {
435 "origin" : origin,
436 "email" : email,
437 "amount" : amount,
438 "stripeAccount" : stripeAccount,
439 "phone_number" : phone_number
440 },
441 "method": "POST",
442 "async": true,
443 "crossDomain": true,
444 "processData": true
445};
446$.ajax(settings).done(function (response) {
447 const data = response
448 var clientSecret = data.paymentIntent.client_secret
449});
450}
451function purchaseData() {
452 var FEE = (amount *.021).toFixed(0);
453 // The items the customer wants to buy
454 var purchase = {
455 items: [{
456 name: "$" + amount + " ORDER",
457 amount: amount,
458 currency: 'usd',
459 quantity: 1,
460 }],
461 payment_intent_data: {
462 application_fee_amount: FEE,
463 on_behalf_of: stripeAccount,
464 transfer_data: {
465 destination: stripeAccount,
466 },
467 }
468 };
469}
470
471 // Calls stripe.confirmCardPayment
472 // If the card requires authentication Stripe shows a pop-up modal to
473 // prompt the user to enter authentication details without leaving your page.
474 var payWithCard = function(stripe, card, clientSecret) {
475 loading(true);
476 stripe
477 .confirmCardPayment(clientSecret, {
478 payment_method: {
479 card: card
480 }
481 })
482 .then(function(result) {
483 if (result.error) {
484 alert('CARD DECLINED PLEASE CONTACT FINANCIAL INSTITUTION');
485 showError(result.error.message);
486 } else if (result.paymentIntent.id) {
487//ALSO I AM TRYING TO INITIATE THIS FUNCTION (LINE 355-455) ONLY UPON SUCCESSFUL PAYMENT
488
489 /* function paySuccess() {
490 var TWILIO_ACCOUNT_SID = "ACfb6a9d32085e31c856f57ca068ad109d"; // Replace with your Twilio ACCOUNT_SID
491var TWILIO_AUTH_TOKEN = "638c86a2a1b78e557eec8dca8acd47b1"; // Replace with your Twilio AUTH_TOKEN
492var TWILIO_PHONE_NUMBER = "+12036337695"; // Replace with your Twilio phone number, must be an SMS enabled phone number
493
494const client = require('twilio')(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
495
496exports.handler = (event, context, callback) => {
497
498 // POST Parameters
499 var DEST_CELL_PHONE_NUMBER = event["POST"]["phone_number"];
500 var EMAIL = event["POST"]["email"];
501 var TOTAL = event["POST"]["amount"];
502 var PROMO = Math.floor(Math.random(10000000) * 99999999);
503 generateCoupon();
504
505 //Send the SMS
506 client.messages.create({
507 from: TWILIO_PHONE_NUMBER,
508 to: DEST_CELL_PHONE_NUMBER,
509 body: "USE PROMO CODE " + PROMO + " TO REDEEM YOUR " + TOTAL + " CREDITS"
510 }, function(err, message) {
511
512 if (err != null) {
513 callback(null, "Error: " + err); //in case of error
514 } else {
515 //remove useless attribute that prevent json serialization
516 delete message['_version'];
517
518 //return response
519 callback(null, message); //if it worked
520 }
521
522 });
523
524 function sendSMS() {
525 var settings = {
526 "url": "https://simpli-buy-7d636b.appdrag.site/api/COUPON-GENERATOR",
527 "data": {
528 "email": EMAIL,
529 "phone_number": PHONE,
530 "amount": TOTAL,
531 "coupon_code": PROMO
532 },
533 "method": "POST",
534 "async": true,
535 "crossDomain": true,
536 "processData": true
537 };
538 $.ajax(settings).done(function(response) {
539 const data = response
540 var tableData = data.Table[0];
541 if (tableData != undefined && tableData != null) {
542
543 $('#email').val(tableData.email);
544 $('#phone_number').val(tableData.phone_number);
545 $('#amount').val(tableData.amount);
546 $('#coupon_code').val(tableData.coupon_code);
547
548
549 }
550 });
551 }
552
553 function generateCoupon() {
554 var STORE_HASH = event["POST"]["store_hash"];
555 var X_AUTH_TOKEN = event["POST"]["x_auth_token"];
556 var X_AUTH_CLIENT = event["POST"]["x_auth_client"];
557 var request = require("request");
558
559 var options = {
560 method: 'POST',
561 url: 'https://api.bigcommerce.com/stores/' + STORE_HASH + '/v2/coupons', //this will be dynamic //so we need to take the data from the table to be inserted in here unique to each user?
562 headers: {
563 accept: 'application/json',
564 'content-type': 'application/json',
565 'x-auth-token': X_AUTH_TOKEN, //also this
566 'x-auth-client': X_AUTH_CLIENT // and this
567 },
568 body: {
569 name: "$" + TOTAL + " STORE CREDITS FOR " + EMAIL, //type your varaible
570 type: 'per_total_discount',
571 code: PROMO,
572 enabled: true,
573 amount: TOTAL,
574 max_uses: 1, //run it
575 applies_to: {
576 entity: 'categories',
577 ids: [0]
578 }
579 },
580 json: true
581 };
582
583 request(options, function(error, response, body) {
584 if (error) throw new Error(error);
585
586 console.log(body);
587 });
588 }
589}
590*/
591 };
592 }
593 });
594 };
595
596 /* ------- UI helpers ------- */
597 // Shows a success message when the payment is complete
598 var orderComplete = function(paymentIntentId) {
599 loading(false);
600 document
601 .querySelector(".result-message a")
602 .setAttribute(
603 "href",
604 "https://dashboard.stripe.com/test/payments/" + paymentIntentId
605 );
606 document.querySelector(".result-message").classList.remove("hidden");
607 document.querySelector("button").disabled = true;
608 };
609 // Show the customer the error from Stripe if their card fails to charge
610 var showError = function(errorMsgText) {
611 loading(false);
612 var errorMsg = document.querySelector("#card-errors");
613 errorMsg.textContent = errorMsgText;
614 setTimeout(function() {
615 errorMsg.textContent = "";
616 }, 4000);
617 };
618 // Show a spinner on payment submission
619 var loading = function(isLoading) {
620 if (isLoading) {
621 // Disable the button and show a spinner
622 document.querySelector("button").disabled = true;
623 document.querySelector("#spinner").classList.remove("hidden");
624 document.querySelector("#button-text").classList.add("hidden");
625 } else {
626 document.querySelector("button").disabled = false;
627 document.querySelector("#spinner").classList.add("hidden");
628 document.querySelector("#button-text").classList.remove("hidden");
629 }
630 };
631 </script>
632 <script>
633
634 // Disable the button until we have Stripe set up on the page
635 document.querySelector("button").disabled = false;
636 var elements = stripe.elements();
637 var style = {
638 base: {
639 color: "#32325d",
640 fontFamily: 'Arial, sans-serif',
641 fontSmoothing: "antialiased",
642 fontSize: "16px",
643 "::placeholder": {
644 color: "#32325d"
645 }
646 },
647 invalid: {
648 fontFamily: 'Arial, sans-serif',
649 color: "#fa755a",
650 iconColor: "#fa755a"
651 }
652 };
653 var card = elements.create("card", {
654 style: style
655 });
656 // Stripe injects an iframe into the DOM
657 card.mount("#card-element");
658 card.on("change", function(event) {
659 // Disable the Pay button if there are no card details in the Element
660 document.querySelector("button").disabled = event.empty;
661 document.querySelector("#card-errors").textContent = event.error ? event.error.message : "";
662 });
663 var form = document.getElementById("payment-form");
664 form.addEventListener("submit", function(event) {
665 event.preventDefault();
666 // Complete payment when the submit button is clicked
667 payWithCard(stripe, card, clientSecret);
668 });
669
670</script>
671
672 <div class="spinner hidden" id="spinner"></div>
673 <span id="button-text">Pay</span>
674 </button>
675 <p id="card-errors" role="alert"></p>
676 <p class="result-message hidden">
677 Payment succeeded, see the result in your
678 <a href="" target="_blank">Stripe dashboard.</a> Refresh the page to pay again.
679 </p>
680</form>
681 <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous">
682 </script>
683
684 <script>
685
686 $('#bigForm').hide();
687 </script>
688<script>
689
690 function submitSmallForm(){
691 var settings = {
692 "url": "https://www.ecommoncents.com/api/authentication/CHECKOUT-VERIFICATION",
693 "data": {
694 "email" : $('#email').val(),
695 "phone_number" : $('#phone_number').val(),
696 "amount" : $('#amount').val(),
697 "AD_PageNbr" : "1",
698 "AD_PageSize" : "500"
699 },
700 "method": "POST",
701 "async": false,
702 "crossDomain": true,
703 "processData": true
704 };
705
706 $.ajax(settings).done(function (response) {
707 const data = response
708 var tableData = data.Table[0];
709 if (tableData != undefined && tableData != null) {
710 $('#smallForm').hide();
711 submitBigForm();
712 $('#bigForm').show();
713 } else {
714 alert('Invalid email or password');
715 };
716 });
717
718 }
719
720 function submitBigForm(){
721 var origin = location.host;
722 var settings = {
723 "url": "https://www.ecommoncents.com/api/WORKFLOW/HEADERSv2",
724 "data": {
725 "origin" : origin,
726 "AD_PageNbr" : "1",
727 "AD_PageSize" : "500"
728 },
729 "method": "POST",
730 "async": true,
731 "crossDomain": true,
732 "processData": true
733 };
734 $.ajax(settings).done(function (response) {
735 const data = response
736 var tableData = data.Table[0];
737 if (tableData != undefined && tableData != null) {
738 $('#stripeAccount').val(tableData.stripeAccount);
739 $('#store_hash').val(tableData.store_hash);
740 $('#x_auth_token').val(tableData.x_auth_token);
741 $('#x_auth_client').val(tableData.x_auth_client);
742
743 $('#phone_number_big').val($('#phone_number').val());
744 $('#amount').val($('#amount_big').val());
745 $('#email_big').val($('#email').val());
746 }
747 });
748
749 }
750 </script>
751 </div>
752 </body>
753
754</html>