From c415e2f6ada3d9a9daff71de3edd02f9508ac1c0 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Fri, 30 Nov 2018 15:17:31 -0700 Subject: [PATCH] Handle membership submission and payment --- composer.json | 3 +- composer.lock | 68 +++++++++-- database.mwb | Bin 10030 -> 10839 bytes public/actions/submitmembership.php | 175 +++++++++++++++++++++++++++- public/index.php | 4 +- public/parts/pay.php | 10 -- public/parts/signup.php | 33 +++++- public/parts/thanks.php | 23 ++++ public/static/bigcheck.svg | 14 +++ public/static/signup.js | 40 ++++++- settings.template.php | 2 + 11 files changed, 348 insertions(+), 24 deletions(-) delete mode 100644 public/parts/pay.php create mode 100644 public/parts/thanks.php create mode 100644 public/static/bigcheck.svg diff --git a/composer.json b/composer.json index 5909527..ea90c45 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,8 @@ "type": "project", "require": { "catfan/medoo": "^1.5", - "guzzlehttp/guzzle": "^6.2" + "guzzlehttp/guzzle": "^6.2", + "stripe/stripe-php": "^6.24" }, "license": "MPL-2.0", "authors": [ diff --git a/composer.lock b/composer.lock index 8d36028..5535e42 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "5c7439c6e041764f2f6b0270a95ab3ae", - "content-hash": "e4e700119f47d2f68b0ed82abaf8c5c6", + "content-hash": "87c8c709e248bfe62291e8208765fd01", "packages": [ { "name": "catfan/medoo", @@ -64,7 +63,7 @@ "sql", "sqlite" ], - "time": "2018-06-14 18:59:08" + "time": "2018-06-14T18:59:08+00:00" }, { "name": "guzzlehttp/guzzle", @@ -129,7 +128,7 @@ "rest", "web service" ], - "time": "2018-04-22 15:46:56" + "time": "2018-04-22T15:46:56+00:00" }, { "name": "guzzlehttp/promises", @@ -180,7 +179,7 @@ "keywords": [ "promise" ], - "time": "2016-12-20 10:07:11" + "time": "2016-12-20T10:07:11+00:00" }, { "name": "guzzlehttp/psr7", @@ -245,7 +244,7 @@ "uri", "url" ], - "time": "2017-03-20 17:10:46" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "psr/http-message", @@ -295,7 +294,62 @@ "request", "response" ], - "time": "2016-08-06 14:39:51" + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "stripe/stripe-php", + "version": "v6.24.0", + "source": { + "type": "git", + "url": "https://github.com/stripe/stripe-php.git", + "reference": "e608b6538b45d233db66838c389c6548c1152a27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stripe/stripe-php/zipball/e608b6538b45d233db66838c389c6548c1152a27", + "reference": "e608b6538b45d233db66838c389c6548c1152a27", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "1.*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Stripe\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stripe and contributors", + "homepage": "https://github.com/stripe/stripe-php/contributors" + } + ], + "description": "Stripe PHP Library", + "homepage": "https://stripe.com/", + "keywords": [ + "api", + "payment processing", + "stripe" + ], + "time": "2018-11-28T16:32:29+00:00" } ], "packages-dev": [], diff --git a/database.mwb b/database.mwb index df06dfb844643828847a7d0ed607668b9140f125..a54c587b767db240c4db0b912d1f4dacf43e940b 100644 GIT binary patch delta 9123 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 Tdkcj0Z&vaction(function($database) { + $lastname = $_POST['familyname']; + $father = $_POST['fathername']; + $mother = $_POST['mothername']; + + if (empty($lastname)) { + errorBack("Enter a last name."); + } + if (empty($father)) { + errorBack("Enter a father name."); + } + if (empty($mother)) { + errorBack("Enter a mother name."); + } + + $phone = $_POST['phone']; + $phone = preg_replace("/[^0-9]/", "", $phone); + if (strlen($phone) == 11) { + $phone = preg_replace("/^1/", "", $phone); + } + if (strlen($phone) != 10) { + errorBack("Enter a valid 10-digit phone number."); + } + + $email = $_POST['email']; + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + errorBack("The email address looks wrong."); + } + + $address = $_POST['streetaddress']; + $city = $_POST['city']; + $state = strtoupper($_POST['state']); + $zip = $_POST['zip']; + if (empty($address)) { + errorBack("Enter a street address."); + } + if (empty($city)) { + errorBack("Enter a city."); + } + if (!preg_match("/^[A-Z]{2}$/", $state)) { + errorBack("Enter a valid two-character state (MT, WY, ID, etc)."); + } + if (!preg_match("/^[0-9]{5}(-?[0-9]{4})?$/", $zip)) { + errorBack("Enter a valid five or nine digit US ZIP code."); + } + + $newsletter = $_POST['newsletter_method']; + $membership_cost = 2500; + if (empty($newsletter)) { + errorBack("Select a newsletter preference."); + } + switch ($newsletter) { + case 1: // Email only + $membership_cost = 2500; + break; + case 2: // Print only + $membership_cost = 3500; + break; + case 3: // Email and print + $membership_cost = 3500; + break; + default: + errorBack("Select a valid newsletter preference."); + } + + $photopermission = $_POST['photo_permission']; + if (!empty($photopermission) && $photopermission == "1") { + $photopermission = true; + } else { + $photopermission = false; + } + + $database->insert("families", [ + "familyname" => $lastname, + "father_name" => $father, + "mother_name" => $mother, + "phone" => $phone, + "email" => $email, + "newsletter_method" => $newsletter, + "address" => $address, + "city" => $city, + "state" => $state, + "zip" => $zip, + "photo_permission" => $photopermission + ]); + + $familyid = $database->id(); + + $children = $_POST['child']; + + foreach ($children['ids'] as $cid) { + if (empty($children['name'][$cid])) { + continue; + } + + if (!preg_match("/^([1-9]|1[012])$/", $children['month'][$cid])) { + errorBack("Invalid birth month chosen for " . htmlentities($children['name'][$cid]) . "."); + } + + if (!is_numeric($children['year'][$cid])) { + errorBack("Invalid birth year chosen for " . htmlentities($children['name'][$cid]) . "."); + } + $children['year'][$cid] = $children['year'][$cid] * 1; + if ($children['year'][$cid] < 1980 || $children['year'][$cid] > date("Y")) { + errorBack("Invalid birth year chosen for " . htmlentities($children['name'][$cid]) . "."); + } + + $database->insert("people", [ + "familyid" => $familyid, + "name" => $children['name'][$cid], + "birthday" => $children['year'][$cid] . "-" . $children['month'][$cid] . "-00", + "graduated" => empty($children['graduate'][$cid]) ? 0 : 1 + ]); + } + + $interests = []; + foreach ($_POST['events'] as $evt) { + if ($database->has("events", ['eventid' => $evt])) { + $interests[] = ["familyid" => $familyid, "eventid" => $evt]; + } + } + $database->insert("interests", $interests); + + + try { + \Stripe\Stripe::setApiKey(STRIPE_SECKEY); + + $charge = \Stripe\Charge::create([ + 'amount' => $membership_cost, + 'currency' => 'usd', + 'description' => 'HACHE Membership', + 'source' => $_POST['stripeToken'], + 'statement_descriptor' => 'HACHE Membership 1yr', + ]); + + } catch (\Stripe\Error\Card $e) { + $body = $e->getJsonBody(); + $err = $body['error']; + errorBack("We couldn't process your card because it was declined. Your card issuer or bank sent us this message: " . $err["message"] . " That's all we know."); + } catch (\Stripe\Error\RateLimit $e) { + errorBack("We couldn't process your card because things are happening too fast. Please try again in a minute. (Error code: STRIPE_RATELIMIT)"); + } catch (\Stripe\Error\InvalidRequest $e) { + errorBack("We couldn't process your card because of a technical issue. Please try again later. (Error code: STRIPE_INVREQ)"); + } catch (\Stripe\Error\Authentication $e) { + errorBack("We can't connect to the card processor. Please try again later. (Error code: STRIPE_AUTH)"); + } catch (\Stripe\Error\ApiConnection $e) { + errorBack("We can't connect to the card processor. Please try again later. (Error code: STRIPE_NOAPI)"); + } catch (\Stripe\Error\Base $e) { + errorBack("An unknown payment error occurred. Please try again later."); + } catch (Exception $e) { + errorBack("An unknown error occurred. Please try again later."); + } + + $database->insert("payments", [ + "familyid" => $familyid, + "amount" => ($membership_cost / 100.0), + "paid" => 1, + "date" => date("Y-m-d H:i:s") + ]); + + header("Location: ../?page=thanks"); + return true; +}); diff --git a/public/index.php b/public/index.php index 7adba6f..3250e6a 100644 --- a/public/index.php +++ b/public/index.php @@ -10,8 +10,8 @@ require_once __DIR__ . "/../lib/requiredpublic.php"; $page = "signup.php"; if (!empty($_GET['page'])) { switch ($_GET['page']) { - case "pay": - $page = "pay.php"; + case "thanks": + $page = "thanks.php"; } } ?> diff --git a/public/parts/pay.php b/public/parts/pay.php deleted file mode 100644 index a9f1bc9..0000000 --- a/public/parts/pay.php +++ /dev/null @@ -1,10 +0,0 @@ - -

- -
\ No newline at end of file diff --git a/public/parts/signup.php b/public/parts/signup.php index 848f869..4cda1ce 100644 --- a/public/parts/signup.php +++ b/public/parts/signup.php @@ -6,7 +6,7 @@ */ ?>
-
+
@@ -19,6 +19,18 @@
+ +
+
+ +
+
+ +

Basic Information

@@ -72,7 +84,7 @@ "label" => "ZIP/Postal Code", "icon" => "fas fa-mail-bulk", "name" => "zip", - "maxlength" => 20, + "maxlength" => 10, "width" => 3 ], [ @@ -305,6 +317,19 @@
+
+

Pay and Submit

+
+
+ +
+ +
+
+ +
@@ -312,4 +337,8 @@
+ + \ No newline at end of file diff --git a/public/parts/thanks.php b/public/parts/thanks.php new file mode 100644 index 0000000..0d2d341 --- /dev/null +++ b/public/parts/thanks.php @@ -0,0 +1,23 @@ + +
+
+
+ +
+ HACHE: Helena Area Christian Home Educators + +

Thank You!

+ + Checkmark + +

Your membership has been submitted and paid for. We'll be in touch soon!

+
+
+
+
\ No newline at end of file diff --git a/public/static/bigcheck.svg b/public/static/bigcheck.svg new file mode 100644 index 0000000..5b6c4ba --- /dev/null +++ b/public/static/bigcheck.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/public/static/signup.js b/public/static/signup.js index 9cf94b5..833edda 100644 --- a/public/static/signup.js +++ b/public/static/signup.js @@ -7,6 +7,44 @@ $("#add_child_row").click(function () { $.get("parts/template_child_entry.php", {}, function (resp) { - $("#child_list").append(resp); + $("#child_list").append(resp); + }); +}); + +// Create a Stripe client. +var stripe = Stripe(stripe_pubkey); + +// Create an instance of Elements. +var elements = stripe.elements(); + +// Create an instance of the card Element. +var card = elements.create('card'); + +// Add an instance of the card Element into the `card-element`
. +card.mount('#card-element'); + +card.addEventListener('change', function (event) { + if (event.error) { + $("#card-errors").removeClass("d-none"); + $("#card-errors").text(event.error.message); + } else { + $("#card-errors").addClass("d-none"); + $("#card-errors").text(""); + } +}); + +$("#membershipform").on("submit", function (event) { + event.preventDefault(); + + stripe.createToken(card).then(function (result) { + if (result.error) { + // Inform the customer that there was an error. + $("#card-errors").removeClass("d-none"); + $("#card-errors").text(event.error.message); + } else { + $("#stripe-token").val(result.token.id); + console.log(result.token); + document.getElementById('membershipform').submit(); + } }); }); \ No newline at end of file diff --git a/settings.template.php b/settings.template.php index 8eb971d..b17173c 100644 --- a/settings.template.php +++ b/settings.template.php @@ -20,6 +20,8 @@ define("DB_CHARSET", "utf8"); // Name of the app. define("SITE_TITLE", "Membership Portal"); +define("STRIPE_PUBKEY", ""); +define("STRIPE_SECKEY", ""); // URL of the AccountHub API endpoint define("PORTAL_API", "http://localhost/accounthub/api.php");