Example #1
0
 * Envato: 4ffca17e-861e-4921-86c3-8931978c40ca
 * Package Date: 2015-11-25 02:55:20 
 * IP Address: 67.79.165.254
 */
require_once 'includes/plugin_paymethod_stripe/stripe-php/lib/Stripe.php';
$stripe = array("secret_key" => module_config::c('payment_method_stripe_secret_key'), "publishable_key" => module_config::c('payment_method_stripe_publishable_key'));
Stripe::setApiKey($stripe['secret_key']);
if (isset($_POST['stripeToken']) && isset($invoice_payment_data) && $invoice_payment_data['amount'] > 0) {
    $token = $_POST['stripeToken'];
    // Create the charge on Stripe's servers - this will charge the user's card
    try {
        $charge = Stripe_Charge::create(array("amount" => $invoice_payment_data['amount'] * 100, "currency" => $currency_code, "card" => $token, "description" => $description));
        if ($charge && $charge->paid && $charge->captured) {
            // successfully paid!
            update_insert("invoice_payment_id", $invoice_payment_id, "invoice_payment", array('date_paid' => date('Y-m-d'), 'amount' => $charge->amount > 0 ? $charge->amount / 100 : 0, 'method' => 'Stripe'));
            module_paymethod_stripe::add_payment_data($invoice_payment_id, 'log', "Successfully paid: " . var_export($charge, true));
            module_invoice::save_invoice($invoice_id, array());
            // success!
            // redirect to receipt page.
            redirect_browser(module_invoice::link_receipt($invoice_payment_id));
        } else {
            $error = "Something went wrong during strip payment. Please confirm invoice payment went through: " . htmlspecialchars($description);
            send_error($error);
            echo $error;
        }
    } catch (Stripe_CardError $e) {
        // The card has been declined
        $body = $e->getJsonBody();
        $err = $body['error'];
        $error = "Sorry: Payment failed. <br><br>\n\n" . htmlspecialchars($description) . ". <br><br>\n\n";
        $error .= $err['message'];
Example #2
0
 public function external_hook($hook)
 {
     switch ($hook) {
         case 'event_ipn':
             require_once 'includes/plugin_paymethod_stripe/stripe-php/lib/Stripe.php';
             $stripe = array("secret_key" => module_config::c('payment_method_stripe_secret_key'), "publishable_key" => module_config::c('payment_method_stripe_publishable_key'));
             Stripe::setApiKey($stripe['secret_key']);
             $body = @file_get_contents('php://input');
             $event_json = json_decode($body);
             ob_start();
             //                 echo "INPUT: <br>\n";
             //                 print_r($body);
             //                 echo "<br><br>\n";
             echo "UCM STRIPE DEBUG:<br><br>JSON: <br>\n";
             print_r($event_json);
             echo "<br><br>\n";
             $event_id = $event_json->id;
             try {
                 $event = Stripe_Event::retrieve($event_id);
                 // This will send receipts on succesful invoices
                 if ($event->type == 'charge.succeeded' && $event->data->object->invoice) {
                     $paid_amount = $event->data->object->amount / 100;
                     // get the invoice.
                     $invoice = Stripe_Invoice::retrieve($event->data->object->invoice);
                     echo "INVOICE: <br>\n";
                     print_r($invoice);
                     echo "<br><br>\n";
                     if ($invoice && $invoice->subscription && $invoice->paid) {
                         // this payment was for a subscription! which one though?
                         $customer = Stripe_Customer::retrieve($invoice->customer);
                         echo "CUSTOMER: <br>\n";
                         print_r($customer);
                         echo "<br><br>\n";
                         $subscription = $customer->subscriptions->retrieve($invoice->subscription);
                         echo "SUBSCRIPTION: <br>\n";
                         print_r($subscription);
                         echo "<br><br>\n";
                         // now we have the Customer and Subscription we can look through our invoice_payment_subscription table for those values.
                         /*update_insert('invoice_payment_subscription_id',$invoice_payment_subscription_id,'invoice_payment_subscription',array(
                               'status' => _INVOICE_SUBSCRIPTION_ACTIVE,
                               'date_start' => date('Y-m-d'),
                           // we also have to store the stripe details here so we can easily search for them later on.
                           'stripe_customer' => $stripe_customer->id,
                           'stripe_subscription' => $stripe_subscription->id,
                           ));*/
                         $invoice_payment_subscription = get_single('invoice_payment_subscription', array('stripe_customer', 'stripe_subscription'), array($customer->id, $subscription->id));
                         if ($invoice_payment_subscription) {
                             // FIND THE linked invoice_payment for this original invoice payment subscription, this allows us to perform the same creatE_new_invoice as paypal below:
                             $invoice_payment_subscription_id = $invoice_payment_subscription['invoice_payment_subscription_id'];
                             $invoice_payment = get_single('invoice_payment', 'invoice_payment_subscription_id', $invoice_payment_subscription_id);
                             if ($invoice_payment) {
                                 $payment_id = $invoice_payment['invoice_payment_id'];
                                 $invoice_id = $invoice_payment['invoice_id'];
                                 // we have a subscription payment. woo!
                                 // this gets a bit tricky, we have to work out if the invoice has been generated for this subscription yet.
                                 // if this invoice hasn't been generated yet then we have to generate it.
                                 // pass this back to the invoice class so we can reuse this feature in the future.
                                 $data = module_invoice::create_new_invoice_for_subscription_payment($invoice_id, $payment_id, $invoice_payment_subscription_id);
                                 if ($data && $data['invoice_id'] && $data['invoice_payment_id']) {
                                     $next_time = time();
                                     $next_time = strtotime('+' . abs((int) $invoice_payment_subscription['days']) . ' days', $next_time);
                                     $next_time = strtotime('+' . abs((int) $invoice_payment_subscription['months']) . ' months', $next_time);
                                     $next_time = strtotime('+' . abs((int) $invoice_payment_subscription['years']) . ' years', $next_time);
                                     update_insert('invoice_payment_subscription_id', $invoice_payment_subscription_id, 'invoice_payment_subscription', array('date_last_pay' => date('Y-m-d'), 'date_next' => date('Y-m-d', $next_time)));
                                     update_insert("invoice_payment_id", $data['invoice_payment_id'], "invoice_payment", array('date_paid' => date('Y-m-d'), 'amount' => $paid_amount, 'method' => 'Stripe (Subscription)', 'invoice_payment_subscription_id' => $invoice_payment_subscription_id));
                                     module_paymethod_stripe::add_payment_data($data['invoice_payment_id'], 'log', "Payment Received via Webhook: " . var_export(array('event.type' => $event->type, 'invoice.id' => $invoice->id, 'subscription.id' => $subscription->id, 'customer.id' => $customer->id, '$invoice_payment_subscription_id' => $invoice_payment_subscription_id, '$invoice_payment_id' => $payment_id), true));
                                     module_invoice::save_invoice($data['invoice_id'], array());
                                     echo "Successful Subscription Payment For Invoice " . $data['invoice_id'];
                                 } else {
                                     send_error("Stripe Webhook Subscription Error (failed to generate new invoice!) " . var_export($data, true));
                                 }
                             } else {
                                 echo 'Failed to find matching invoice payment in db';
                             }
                         } else {
                             echo 'Failed to find matching subscription payment in db';
                         }
                     }
                 }
             } catch (Exception $e) {
                 $body = $e->getJsonBody();
                 $err = $body['error'];
                 $error = "Sorry: Webhook failed. <br><br>\n\n";
                 $error .= $err['message'];
                 $error .= "\n\n\n" . var_export($e, true);
                 echo $error;
             }
             $debug = ob_get_clean();
             //mail('*****@*****.**','Stripe Webhook debug',$debug);
             if (module_config::c('stripe_payment_debug', 0)) {
                 echo $debug;
             }
             echo "Thanks! (set stripe_payment_debug to 1 in UCM to see more data here)";
             exit;
             break;
         case 'pay_subscription':
             $invoice_id = isset($_REQUEST['invoice_id']) ? $_REQUEST['invoice_id'] : false;
             $invoice_payment_id = isset($_REQUEST['invoice_payment_id']) ? $_REQUEST['invoice_payment_id'] : false;
             $invoice_payment_subscription_id = isset($_REQUEST['invoice_payment_subscription_id']) ? $_REQUEST['invoice_payment_subscription_id'] : false;
             $stripe_plan_id = isset($_REQUEST['stripe_plan_id']) ? $_REQUEST['stripe_plan_id'] : false;
             $user_id = isset($_REQUEST['user_id']) ? $_REQUEST['user_id'] : false;
             if ($invoice_id && $invoice_payment_id && $stripe_plan_id && $invoice_payment_subscription_id && $user_id && isset($_POST['stripeToken'])) {
                 $user_data = module_user::get_user($user_id);
                 $email = isset($_REQUEST['stripeEmail']) && strlen($_REQUEST['stripeEmail']) ? $_REQUEST['stripeEmail'] : $user_data['email'];
                 if (!$email || !strpos($email, '@')) {
                     die('Please ensure your user account has a valid email address before paying with stripe');
                 }
                 $invoice_payment = get_single('invoice_payment', 'invoice_payment_id', $invoice_payment_id);
                 $invoice_payment_subscription = get_single('invoice_payment_subscription', 'invoice_payment_subscription_id', $invoice_payment_subscription_id);
                 if (!$invoice_payment || !$invoice_payment_subscription || $invoice_payment['invoice_id'] != $invoice_id || $invoice_payment['invoice_payment_subscription_id'] != $invoice_payment_subscription_id) {
                     die('Invalid invoice payment subscription id');
                 }
                 $invoice_payment_data = module_invoice::get_invoice_payment($invoice_payment_id);
                 $invoice_data = module_invoice::get_invoice($invoice_id);
                 if ($invoice_payment_data && $invoice_data && $invoice_id == $invoice_data['invoice_id'] && $invoice_payment_data['invoice_id'] == $invoice_data['invoice_id']) {
                     $currency = module_config::get_currency($invoice_payment_data['currency_id']);
                     $currency_code = $currency['code'];
                     $description = isset($_REQUEST['description']) ? $_REQUEST['description'] : 'N/A';
                     $template = new module_template();
                     ob_start();
                     require_once 'includes/plugin_paymethod_stripe/stripe-php/lib/Stripe.php';
                     $stripe = array("secret_key" => module_config::c('payment_method_stripe_secret_key'), "publishable_key" => module_config::c('payment_method_stripe_publishable_key'));
                     Stripe::setApiKey($stripe['secret_key']);
                     try {
                         // todo- search for existing customer based on email address???
                         // todo: check if adding new plan to existing customer work??
                         $stripe_customer = Stripe_Customer::create(array("card" => $_POST['stripeToken'], "email" => $email, 'metadata' => array('user_id' => $user_id)));
                         if ($stripe_customer && $stripe_customer->id) {
                             //} && $stripe_customer->subscriptions){
                             $stripe_subscription = $stripe_customer->subscriptions->create(array('plan' => $stripe_plan_id));
                             if ($stripe_subscription && $stripe_subscription->id) {
                                 update_insert('invoice_payment_subscription_id', $invoice_payment_subscription_id, 'invoice_payment_subscription', array('status' => _INVOICE_SUBSCRIPTION_ACTIVE, 'date_start' => date('Y-m-d'), 'stripe_customer' => $stripe_customer->id, 'stripe_subscription' => $stripe_subscription->id));
                                 module_paymethod_stripe::add_payment_data($invoice_payment_id, 'log', "Started Stripe Subscription: " . var_export(array('customer.id' => $stripe_customer->id, 'plan.id' => $stripe_plan_id, 'subscription.id' => $stripe_subscription->id), true));
                                 // success!
                                 // redirect to receipt page.
                                 redirect_browser(module_invoice::link_public_payment_complete($invoice_id));
                             } else {
                                 echo 'Failed to create subscription with stripe';
                             }
                         }
                         $error = "Something went wrong during stripe payment. Please confirm invoice payment went through: " . htmlspecialchars($description);
                         send_error($error);
                         echo $error;
                     } catch (Stripe_CardError $e) {
                         // The card has been declined
                         $body = $e->getJsonBody();
                         $err = $body['error'];
                         $error = "Sorry: Payment failed. <br><br>\n\n" . htmlspecialchars($description) . ". <br><br>\n\n";
                         $error .= $err['message'];
                         echo $error;
                         $error .= "\n\n\n" . var_export($err, true);
                         send_error($error);
                     } catch (Exception $e) {
                         $body = $e->getJsonBody();
                         $err = $body['error'];
                         $error = "Sorry: Payment failed. <br><br>\n\n" . htmlspecialchars($description) . ". <br><br>\n\n";
                         $error .= $err['message'];
                         echo $error;
                         $error .= "\n\n\n" . var_export($err, true);
                         send_error($error);
                     }
                     $template->content = ob_get_clean();
                     echo $template->render('pretty_html');
                     exit;
                 }
             }
             echo 'Error paying via Stripe';
             exit;
         case 'pay':
             $invoice_id = isset($_REQUEST['invoice_id']) ? $_REQUEST['invoice_id'] : false;
             $invoice_payment_id = isset($_REQUEST['invoice_payment_id']) ? $_REQUEST['invoice_payment_id'] : false;
             if ($invoice_id && $invoice_payment_id && isset($_POST['stripeToken'])) {
                 $invoice_payment_data = module_invoice::get_invoice_payment($invoice_payment_id);
                 $invoice_data = module_invoice::get_invoice($invoice_id);
                 if ($invoice_payment_data && $invoice_data && $invoice_id == $invoice_data['invoice_id'] && $invoice_payment_data['invoice_id'] == $invoice_data['invoice_id']) {
                     $currency = module_config::get_currency($invoice_payment_data['currency_id']);
                     $currency_code = $currency['code'];
                     $description = _l('Payment for invoice %s', $invoice_data['name']);
                     $template = new module_template();
                     ob_start();
                     include module_theme::include_ucm('includes/plugin_paymethod_stripe/pages/stripe_form.php');
                     $template->content = ob_get_clean();
                     echo $template->render('pretty_html');
                     exit;
                 }
             }
             echo 'Error paying via Stripe';
             exit;
     }
 }
 public function external_hook($hook)
 {
     switch ($hook) {
         case 'pay':
             // result is retured via ajax and displayed on the page.
             $invoice_id = isset($_REQUEST['invoice_id']) ? $_REQUEST['invoice_id'] : false;
             $invoice_payment_id = isset($_REQUEST['invoice_payment_id']) ? $_REQUEST['invoice_payment_id'] : false;
             if ($invoice_id && $invoice_payment_id) {
                 $invoice_payment_data = module_invoice::get_invoice_payment($invoice_payment_id);
                 $invoice_data = module_invoice::get_invoice($invoice_id);
                 if ($invoice_payment_data && $invoice_data && $invoice_id == $invoice_data['invoice_id'] && $invoice_payment_data['invoice_id'] == $invoice_data['invoice_id']) {
                     $currency = module_config::get_currency($invoice_payment_data['currency_id']);
                     $currency_code = $currency['code'];
                     $description = _l('Payment for invoice %s', $invoice_data['name']);
                     require_once 'includes/plugin_paymethod_authorize/anet_php_1.1.8/AuthorizeNet.php';
                     $transaction = new AuthorizeNetAIM(module_config::c('payment_method_authorize_api_login_id', ''), module_config::c('payment_method_authorize_transaction_key', ''));
                     $transaction->setSandbox(module_config::c('payment_method_authorize_sandbox', 0));
                     $transaction->VERIFY_PEER = module_config::c('payment_method_authorize_ssl_verify', 1);
                     $transaction->amount = $invoice_payment_data['amount'];
                     // USD ONLY
                     foreach (array("address", "allow_partial_auth", "amount", "auth_code", "authentication_indicator", "bank_aba_code", "bank_acct_name", "bank_acct_num", "bank_acct_type", "bank_check_number", "bank_name", "card_code", "card_num", "cardholder_authentication_value", "city", "company", "country", "cust_id", "customer_ip", "delim_char", "delim_data", "description", "duplicate_window", "duty", "echeck_type", "email", "email_customer", "encap_char", "exp_date", "fax", "first_name", "footer_email_receipt", "freight", "header_email_receipt", "invoice_num", "last_name", "line_item", "login", "method", "phone", "po_num", "recurring_billing", "relay_response", "ship_to_address", "ship_to_city", "ship_to_company", "ship_to_country", "ship_to_first_name", "ship_to_last_name", "ship_to_state", "ship_to_zip", "split_tender_id", "state", "tax", "tax_exempt", "test_request", "tran_key", "trans_id", "type", "version", "zip") as $possible_value) {
                         if (isset($_POST[$possible_value])) {
                             $transaction->setField($possible_value, $_POST[$possible_value]);
                         }
                     }
                     $transaction->setField('card_num', isset($_POST['number']) ? $_POST['number'] : '');
                     $transaction->setField('exp_date', $_POST['month'] . '/' . $_POST['year']);
                     $transaction->setField('card_code', $_POST['cvv']);
                     //$transaction->card_num = isset($_POST['number']) ? $_POST['number'] : '';
                     //$transaction->exp_date = $_POST['month'].'/'.$_POST['year'];
                     //$transaction->card_code = $_POST['cvv'];
                     $response = $transaction->authorizeAndCapture();
                     if ($response->approved) {
                         //                          echo "<h1>Success! The test credit card has been charged!</h1>";
                         //                          echo "Transaction ID: " . $response->transaction_id;
                         update_insert("invoice_payment_id", $invoice_payment_id, "invoice_payment", array('date_paid' => date('Y-m-d')));
                         module_paymethod_stripe::add_payment_data($invoice_payment_id, 'log', "Successfully paid: " . var_export($response, true));
                         module_invoice::save_invoice($invoice_id, array());
                         // success!
                         // redirect to receipt page.
                         redirect_browser(module_invoice::link_receipt($invoice_payment_id));
                     } else {
                         echo isset($response->error_message) ? $response->error_message : (isset($response->response_reason_text) ? $response->response_reason_text : var_export($response, true));
                     }
                     exit;
                 }
             }
             echo 'Error paying via Authorize';
             exit;
     }
 }