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"); }