Add credit card processing API
parent
f21a8baa1e
commit
e31c69c4bb
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
\Stripe\Stripe::setApiKey($SETTINGS["stripe"]["seckey"]);
|
||||
|
||||
$accountid = $database->get("accounts", ["[>]authkeys" => ["accountid"]], "accounts.accountid", ["key" => $VARS["key"]]);
|
||||
|
||||
$token = $VARS['token'];
|
||||
|
||||
$amount = $VARS["amount"] * 100.00;
|
||||
|
||||
try {
|
||||
$charge = \Stripe\Charge::create([
|
||||
'amount' => $amount,
|
||||
'currency' => 'usd',
|
||||
'description' => 'Helping Helena',
|
||||
'statement_descriptor' => "HelpingHelena",
|
||||
'source' => $token
|
||||
]);
|
||||
|
||||
$stripefees = 30 + ($amount * 0.029);
|
||||
$totalfees = $amount * $SETTINGS["stripe"]["fee"];
|
||||
|
||||
$amountadded = ($amount - max($stripefees, $totalfees)) / 100.0;
|
||||
|
||||
$database->update("accounts", ["balance[+]" => $amountadded], ["accountid" => $accountid]);
|
||||
$database->insert("log", [
|
||||
"datetime" => date("Y-m-d H:i:s"),
|
||||
"accountid" => $accountid,
|
||||
"entry" => "Added funds with card: $" . ($amount / 100.0) . " charged, $$amountadded added to balance."
|
||||
]);
|
||||
|
||||
exitWithJson([
|
||||
"status" => "OK",
|
||||
"charged_amount" => $amount / 100.0,
|
||||
"final_amount" => $amountadded
|
||||
]);
|
||||
} catch (\Stripe\Error\Card $e) {
|
||||
$body = $e->getJsonBody();
|
||||
$err = $body['error'];
|
||||
sendJsonResp("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.", "ERROR");
|
||||
} catch (\Stripe\Error\RateLimit $e) {
|
||||
sendJsonResp("We couldn't process your card because things are happening too fast. Please try again in a minute. (Error code: STRIPE_RATELIMIT)", "ERROR");
|
||||
} catch (\Stripe\Error\InvalidRequest $e) {
|
||||
sendJsonResp("We couldn't process your card because of a technical issue. Please try again later. (Error code: STRIPE_INVREQ)", "ERROR");
|
||||
} catch (\Stripe\Error\Authentication $e) {
|
||||
sendJsonResp("We can't connect to the card processor. Please try again later. (Error code: STRIPE_AUTH)", "ERROR");
|
||||
} catch (\Stripe\Error\ApiConnection $e) {
|
||||
sendJsonResp("We can't connect to the card processor. Please try again later. (Error code: STRIPE_NOAPI)", "ERROR");
|
||||
} catch (\Stripe\Error\Base $e) {
|
||||
sendJsonResp("An unknown payment error occurred. Please try again later.", "ERROR");
|
||||
} catch (Exception $e) {
|
||||
sendJsonResp("An unknown error occurred. Please try again later.", "ERROR");
|
||||
}
|
Loading…
Reference in New Issue