| Server IP : 46.105.57.169 / Your IP : 216.73.216.67 Web Server : Apache System : Linux webm002.cluster120.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64 User : verseaumee ( 152031) PHP Version : 8.5.7 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/verseaumee/middletvnew/wp-content/plugins/armember/core/classes/ |
Upload File : |
<?php
if (!class_exists('ARM_Stripe')) {
class ARM_Stripe {
var $arm_stripe_api_version;
function __construct() {
$this->arm_stripe_api_version = "2020-08-27";
add_action('arm_payment_gateway_validation_from_setup', array($this, 'arm_payment_gateway_form_submit_action'), 10, 4);
//add_action('wp', array($this, 'arm_StripeEventListener'), 5);
add_action('arm_cancel_subscription_gateway_action', array($this, 'arm_cancel_stripe_subscription'), 10, 2);
add_filter('arm_payment_gateway_trial_allowed', array($this, 'arm_stripe_trial_allowed_or_not'), 10, 5);
add_action('arm_saved_subscription_plan', array($this, 'arm_update_stripe_configuration_setup'), 10, 2);
add_action('wp_ajax_arm_stripe_dismisss_admin_notice',array(&$this,'arm_stripe_dismisss_admin_notice'),10);
add_filter('arm_refund_payment_subscription_stripe',array($this,'arm_refund_payment_subscription'),10,2);
add_filter('arm_display_refund_button_from_outside',array($this,'arm_display_refund_button_from_outside'),10,2);
}
function arm_display_refund_button_from_outside($display,$pg)
{
if($pg == 'stripe')
{
$display = true;
}
return $display;
}
function arm_refund_payment_subscription($arm_refund_data,$payment_gateway)
{
global $wpdb, $ARMember, $arm_global_settings, $payment_done, $arm_payment_gateways, $arm_membership_setup,
$arm_manage_coupons, $arm_transaction, $arm_debug_payment_log_id;
$arm_transaction_id = !empty($arm_refund_data['arm_transaction_id']) ? $arm_refund_data['arm_transaction_id'] :'';
if($payment_gateway == 'stripe' && !empty($arm_refund_data))
{
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
$stripe_options = $all_payment_gateways['stripe'];
$currency = $arm_payment_gateways->arm_get_global_currency();
$arm_stripe_secret_key = "";
if ($stripe_options['stripe_payment_mode'] == 'live') {
$arm_stripe_secret_key = $stripe_options['stripe_secret_key'];
} else {
$arm_stripe_secret_key = $stripe_options['stripe_test_secret_key'];
}
if(!empty($arm_transaction_id ) && !empty($arm_refund_data['arm_refund_mode'])) {
$response = array();
if('in_' == substr($arm_transaction_id,0,3))
{
$arm_invoices_url = "https://api.stripe.com/v1/invoices/".$arm_transaction_id;
$arm_subs_data = array(
'headers' => array(
'Authorization' => 'Bearer '.$arm_stripe_secret_key
),
);
$arm_stripe_invoices_response = wp_remote_get($arm_invoices_url, $arm_subs_data);
if(!empty($arm_stripe_invoices_response))
{
$arm_stripe_invoice_response = json_decode($arm_stripe_invoices_response['body']);
$arm_transaction_id = !empty($arm_stripe_invoice_response['charge']) ? $arm_stripe_invoice_response['charge'] : '';
}
}
if('pi' == substr($arm_transaction_id, 0, 2) ) {
$arm_send_refund_data = array('payment_intent' => $arm_transaction_id);
}
else
{
$arm_send_refund_data = array('charge' => $arm_transaction_id);
}
$arm_refund_type = $arm_refund_data['arm_refund_mode'] ? $arm_refund_data['arm_refund_mode'] : '';
if($arm_refund_type != 'full') {
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
$arm_refund_amount = $arm_refund_data['arm_refund_amount'] ? $arm_refund_data['arm_refund_amount'] : 0;
$arm_send_refund_data['amount'] = ((float)$arm_refund_amount);
if (!in_array($currency, $zero_demial_currencies)) {
$arm_send_refund_data['amount'] = ((float)$arm_refund_amount) * 100;
}
}
do_action('arm_payment_log_entry', 'stripe', 'Stripe submited refund data', 'armember', $arm_send_refund_data, $arm_debug_payment_log_id);
try{
$refund_api_url = 'https://api.stripe.com/v1/refunds';
$arm_stripe_plan_headers = array(
'Authorization' => 'Bearer '.$arm_stripe_secret_key
);
$arm_stripe_plan_data = array('method' => 'POST', 'headers' => $arm_stripe_plan_headers, 'body' => $arm_send_refund_data);
$arm_get_stripe_plan_list_response = wp_remote_request($refund_api_url, $arm_stripe_plan_data);
$response_body = json_decode($arm_get_stripe_plan_list_response['body']);
if(!empty( $response_body ))
{
do_action('arm_payment_log_entry', 'stripe', 'Stripe refund resoponse', 'armember', $response_body, $arm_debug_payment_log_id);
if(!empty($response_body->id))
{
$success_message = esc_html__('Payment refunded successfully', 'ARMember');
$response['type'] = 'success';
$response['msg'] = $success_message;
}
else
{
$response['type'] = 'error';
$response['msg'] = $response_body->error->message;
}
}
return $response;
}
catch (Exception $e){
$error_message = '';
$error_message = esc_html__('Error Code', 'ARMember').':'.$e->getCode().' '. $e->getMessage();
do_action('arm_payment_log_entry', 'stripe', 'Stripe refund resoponse with error', 'armember', $error_message, $arm_debug_payment_log_id);
$response['type'] = 'error';
$response['msg'] = $error_message;
return $response;
}
}
}
}
function arm_stripe_dismisss_admin_notice()
{
if ( current_user_can( 'manage_options' )){
$arm_wp_nonce = !empty( $_POST['_wpnonce'] ) ? sanitize_text_field( $_POST['_wpnonce'] ) : ''; //phpcs:ignore
if(wp_verify_nonce( $arm_wp_nonce, 'arm_wp_nonce' )){
update_option('arm-stripe-dismiss-admin-notice', false);
echo json_encode( array( 'status' => 'success' ) );
}
else{
echo json_encode( array( 'status' => 'error', 'message' => esc_html__('Security check failed, please try again.', 'ARMember') ) );
}
}else{
echo json_encode( array( 'status' => 'error', 'message' => esc_html__('You do not have sufficient permissions to access this page.', 'ARMember') ) );
}
exit;
}
function arm_stripe_trial_allowed_or_not($trial_not_allowed, $arm_plan_id, $payment_gateway, $payment_gateway_options, $posted_data){
if($payment_gateway == "stripe"){
$trial_not_allowed = 0;
}
return $trial_not_allowed;
}
function arm_prepare_stripe_charge_details($request_data = array(), $plan = object, $setup_id = 0, $payment_cycle = 0, $plan_action = '') {
global $wpdb, $ARMember, $arm_global_settings, $payment_done, $arm_payment_gateways, $arm_membership_setup, $arm_manage_coupons, $arm_transaction, $arm_debug_payment_log_id;
$charge_details = array();
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
$arm_payment_debug_log_data = array(
'request_data' => $request_data,
'plan' => $plan,
'setup_id' => $setup_id,
'payment_cycle' => $payment_cycle,
'plan_action' => $plan_action,
);
do_action('arm_payment_log_entry', 'stripe', 'prepare charge details', 'armember', $arm_payment_debug_log_data, $arm_debug_payment_log_id);
if (!empty($request_data)) {
$currency = $arm_payment_gateways->arm_get_global_currency();
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
$entry_id = $request_data['entry_id'];
$entry_email = $request_data['entry_email'];
$stripe_card_detail = isset( $request_data['stripe'] ) ? $request_data['stripe'] : array();
$card_holder_name = isset( $stripe_card_detail['card_holder_name'] ) ? $stripe_card_detail['card_holder_name'] : '';
$card_number = isset( $stripe_card_detail['card_number'] ) ? $stripe_card_detail['card_number'] : '';
$exp_month = isset( $stripe_card_detail['exp_month'] ) ? $stripe_card_detail['exp_month'] : '';
$exp_year = isset( $stripe_card_detail['exp_year'] ) ? $stripe_card_detail['exp_year'] : '';
$cvc = isset( $stripe_card_detail['cvc'] ) ? $stripe_card_detail['cvc'] : '';
$arm_is_trial = '0';
$formSlug = isset($request_data['arm_action']) ? $request_data['arm_action'] : '';
$arm_user_old_plan = $request_data['arm_user_old_plan_ids'];
$form = new ARM_Form('slug', $formSlug);
if ($plan->is_recurring()) {
$recurring_data = $plan->prepare_recurring_data($payment_cycle);
$amount = str_replace(",", "", $recurring_data['amount']);
$payment_mode_ = !empty($request_data['arm_selected_payment_mode']) ? $request_data['arm_selected_payment_mode'] : 'manual_subscription';
if(isset($request_data['arm_payment_mode']['stripe'])){
$payment_mode_ = !empty($request_data['arm_payment_mode']['stripe']) ? $request_data['arm_payment_mode']['stripe'] : 'manual_subscription';
}
else{
$setup_data = $arm_membership_setup->arm_get_membership_setup($setup_id);
if (!empty($setup_data) && !empty($setup_data['setup_modules']['modules'])) {
$setup_modules = $setup_data['setup_modules'];
$modules = $setup_modules['modules'];
$payment_mode_ = $modules['payment_mode']['stripe'];
}
}
$plan_id = (!empty($request_data['subscription_plan'])) ? $request_data['subscription_plan'] : 0;
if ($plan_id == 0) {
$plan_id = (!empty($request_data['_subscription_plan'])) ? $request_data['_subscription_plan'] : 0;
}
$payment_mode = 'manual_subscription';
$c_mpayment_mode = "";
if(isset($request_data['arm_pay_thgough_mpayment']) && $request_data['arm_plan_type']=='recurring' && is_user_logged_in())
{
$current_user_id = get_current_user_id();
$current_user_plan_ids = get_user_meta($current_user_id, 'arm_user_plan_ids', true);
$current_user_plan_ids = !empty($current_user_plan_ids) ? $current_user_plan_ids : array();
$Current_M_PlanData = get_user_meta($current_user_id, 'arm_user_plan_' . $plan_id, true);
$Current_M_PlanDetails = $Current_M_PlanData['arm_current_plan_detail'];
if (!empty($current_user_plan_ids)) {
if(in_array($plan_id, $current_user_plan_ids) && !empty($Current_M_PlanDetails))
{
$arm_cmember_paymentcycle = $Current_M_PlanData['arm_payment_cycle'];
$arm_cmember_completed_recurrence = $Current_M_PlanData['arm_completed_recurring'];
$arm_cmember_plan = new ARM_Plan(0);
$arm_cmember_plan->init((object) $Current_M_PlanDetails);
$arm_cmember_plan_data = $arm_cmember_plan->prepare_recurring_data($arm_cmember_paymentcycle);
$arm_cmember_TotalRecurring = $arm_cmember_plan_data['rec_time'];
if ($arm_cmember_TotalRecurring == 'infinite' || ($arm_cmember_completed_recurrence !== '' && $arm_cmember_completed_recurrence != $arm_cmember_TotalRecurring)) {
$c_mpayment_mode = 1;
}
}
}
}
if(empty($c_mpayment_mode))
{
if ($payment_mode_ == 'both') {
$payment_mode = !empty($request_data['arm_selected_payment_mode']) ? $request_data['arm_selected_payment_mode'] : 'manual_subscription';
} else {
$payment_mode = $payment_mode_;
}
}
} else {
$amount = str_replace(",", "", $plan->amount);
$payment_mode = '';
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$maskCCNum = $arm_transaction->arm_mask_credit_card_number($card_number);
$extraParam = array('card_number' => $maskCCNum, 'plan_amount' => $amount, 'paid_amount' => $amount);
/* Coupon Details */
$discount_amt = $coupon_amount = $arm_coupon_on_each_subscriptions = $arm_coupon_discount = 0;
$coupon_code = $arm_coupon_discount_type_default = $arm_coupon_discount_type = '';
if ($arm_manage_coupons->isCouponFeature && isset($request_data['arm_coupon_code']) && !empty($request_data['arm_coupon_code'])) {
$couponApply = $arm_manage_coupons->arm_apply_coupon_code($request_data['arm_coupon_code'], $plan, $setup_id, $payment_cycle, $arm_user_old_plan);
if($couponApply["status"] == "success") {
$coupon_code = $request_data['arm_coupon_code'];
$coupon_amount = isset($couponApply['coupon_amt']) ? $couponApply['coupon_amt'] : 0;
$coupon_amount = str_replace(",", "", $coupon_amount);
$discount_amt = isset($couponApply['total_amt']) ? $couponApply['total_amt'] : $amount;
$discount_amt = str_replace(",", "", $discount_amt);
$arm_coupon_on_each_subscriptions = isset($couponApply['arm_coupon_on_each_subscriptions']) ? $couponApply['arm_coupon_on_each_subscriptions'] : '0';
$arm_coupon_discount_type_default = isset($couponApply['discount_type']) ? $couponApply['discount_type'] : "";
$arm_coupon_discount = (isset($couponApply['discount']) && !empty($couponApply['discount'])) ? $couponApply['discount'] : 0;
$global_currency = $arm_payment_gateways->arm_get_global_currency();
$arm_coupon_discount_type = ($couponApply['discount_type'] != 'percentage') ? $global_currency : "%";
$extraParam['coupon'] = array(
'coupon_code' => $request_data['arm_coupon_code'],
'amount' => $coupon_amount,
);
$charge_details['coupon_details'] = array (
'coupon_code' => $request_data['arm_coupon_code'],
'arm_coupon_discount' => $arm_coupon_discount,
'arm_coupon_discount_type' => $arm_coupon_discount_type,
'arm_coupon_discount_type_default' => $arm_coupon_discount_type_default,
'arm_coupon_on_each_subscriptions' => $arm_coupon_on_each_subscriptions
);
}
}
else {
$request_data['arm_coupon_code'] = '';
}
if ($payment_mode == 'auto_debit_subscription') {
/* Recurring Options */
$stripePlanID = $request_data['stripePlanID'];
if (!empty($stripePlanID)) {
$charge_details['plan'] = $stripePlanID;
}
if( $amount > 0 && $arm_coupon_on_each_subscriptions == 1 ) {
if( $couponApply['discount_type'] == "fixed" ) {
$amount = $amount - $couponApply['discount'];
}
else if($couponApply['discount_type'] == "percentage") {
$arm_amount_to_minus = ( $amount * $couponApply['discount'] ) / 100;
$amount = $amount - $arm_amount_to_minus;
}
if( $amount < 0 ) {
$amount = 0;
}
}
if($request_data['tax_percentage'] > 0) {
$tax_display_type = (!empty($request_data['arm_tax_include_exclude_flag']) && $request_data['arm_tax_include_exclude_flag'] == 1) ? 1 : 0;
if(empty($tax_display_type))
{
$extraParam['arm_tax_include_exclude_flag'] = 0;
$tax_amount = ($request_data['tax_percentage'] * $amount)/100;
$tax_amount= number_format((float) $tax_amount, $arm_currency_decimal, '.', '');
$amount = $amount + $tax_amount;
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
}
else
{
$extraParam['arm_tax_include_exclude_flag'] = 1;
$tax_amount = $arm_membership_setup->arm_calculate_included_tax($amount,$tax_percentage);
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
}
$charge_details['tax_amount'] = $tax_amount;
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
if ($plan->has_trial_period() && $plan_action == 'new_subscription') {
if(empty($arm_coupon_on_each_subscriptions))
{
unset($charge_details['coupon_details']);
}
}
} else if ($payment_mode == 'manual_subscription') {
$rec_opt = $plan->prepare_recurring_data($payment_cycle);
$allow_trial = true;
if (is_user_logged_in()) {
$user_id = get_current_user_id();
$user_plan = get_user_meta($user_id, 'arm_user_plan_ids', true);
if (!empty($user_plan)) {
$allow_trial = false;
}
}
if ($plan->has_trial_period() && $allow_trial) {
$arm_is_trial = '1';
$amount = $rec_opt['trial']['amount'];
$trial_amount = $rec_opt['trial']['amount'];
$trial_period = $rec_opt['trial']['period'];
$trial_interval = $rec_opt['trial']['interval'];
$extraParam['trial'] = array(
'amount' => $trial_amount,
'period' => $trial_period,
'interval' => $trial_interval,
);
}
if (!empty($coupon_amount) && $coupon_amount > 0) {
$amount = $discount_amt;
}
$amount = str_replace(",", "", $amount);
if($request_data['tax_percentage'] > 0){
$tax_amount = ($request_data['tax_percentage'] * $amount)/100;
$tax_amount= number_format((float) $tax_amount, $arm_currency_decimal, '.', '');
$amount = $amount + $tax_amount;
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
$charge_details['tax_amount'] = $tax_amount;
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
if (!empty($amount)) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount * $arm_stripe_amount_multiply;
$amount = number_format($amount,0,".","");
}
else{
$amount = number_format((float) $amount, 0);
$amount = str_replace(",", "", $amount);
}
}
else {
$amount = "0.00";
}
$charge_details['amount'] = $amount;
$charge_details['currency'] = $currency;
if ($amount == 0 || $amount == '0.00') {
$return_array = array();
unset($extraParam['card_number']);
if (is_user_logged_in()) {
$current_user_id = get_current_user_id();
$return_array['arm_user_id'] = $current_user_id;
$arm_user_info = get_userdata($current_user_id);
$return_array['arm_first_name']=$arm_user_info->first_name;
$return_array['arm_last_name']= $arm_user_info->last_name;
}else{
$return_array['arm_first_name']=(isset($request_data['first_name']))?$request_data['first_name']:'';
$return_array['arm_last_name']=(isset($request_data['last_name']))?$request_data['last_name']:'';
}
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'stripe';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = $entry_email;
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = $payment_mode;
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = 0;
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = @$coupon_code;
$return_array['arm_coupon_discount'] = @$arm_coupon_discount;
$return_array['arm_coupon_discount_type'] = @$arm_coupon_discount_type;
$return_array['arm_extra_vars'] = maybe_serialize($extraParam);
$return_array['arm_is_trial'] = $arm_is_trial;
$return_array['arm_created_date'] = current_time('mysql');
$return_array['arm_coupon_on_each_subscriptions'] = $arm_coupon_on_each_subscriptions;
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
do_action('arm_after_stripe_free_manual_payment', $plan, $payment_log_id, $arm_is_trial, @$coupon_code, $extraParam);
return array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
}
} else {
/* Coupon Details */
if (!empty($coupon_amount) && $coupon_amount > 0) {
$amount = $discount_amt;
}
$amount = str_replace(",", "", $amount);
/* Make Amount in Cent */
if($request_data['tax_percentage'] > 0){
$tax_amount = ($request_data['tax_percentage'] * $amount)/100;
$tax_amount= number_format((float) $tax_amount, $arm_currency_decimal, '.', '');
$amount = $amount + $tax_amount;
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
$charge_details['tax_amount'] = $tax_amount;
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
if (!empty($amount)) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount * $arm_stripe_amount_multiply;
$amount = number_format($amount,0,".","");
}
else{
$amount = number_format((float) $amount, 0);
$amount = str_replace(",", "", $amount);
}
} else {
$amount = "0";
}
$charge_details['amount'] = $amount;
$charge_details['currency'] = $currency;
if ($amount == 0 || $amount == '0.00') {
$return_array = array();
unset($extraParam['card_number']);
if (is_user_logged_in()) {
$current_user_id = get_current_user_id();
$return_array['arm_user_id'] = $current_user_id;
$arm_user_info = get_userdata($current_user_id);
$return_array['arm_first_name']=$arm_user_info->first_name;
$return_array['arm_last_name']=$arm_user_info->last_name;
}else{
$return_array['arm_first_name']=(isset($request_data['first_name']))?$request_data['first_name']:'';
$return_array['arm_last_name']=(isset($request_data['last_name']))?$request_data['last_name']:'';
}
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'stripe';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = $entry_email;
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = '';
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = 0;
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = @$coupon_code;
$return_array['arm_coupon_discount'] = @$arm_coupon_discount;
$return_array['arm_coupon_discount_type'] = @$arm_coupon_discount_type;
$return_array['arm_extra_vars'] = maybe_serialize($extraParam);
$return_array['arm_is_trial'] = $arm_is_trial;
$return_array['arm_created_date'] = current_time('mysql');
$return_array['arm_coupon_on_each_subscriptions'] = $arm_coupon_on_each_subscriptions;
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
do_action('arm_after_stripe_free_payment', $plan, $payment_log_id, $arm_is_trial, @$coupon_code, $extraParam);
return array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
}
if (isset($request_data['user_email']) && $request_data['user_email'] != "") {
$charge_details['receipt_email'] = $request_data['user_email'];
}
if ($plan->name != "") {
$charge_details['description'] = $plan->name;
}
}
$custom_var = $entry_id . '|' . $entry_email . '|' . $form->ID . '|' . $plan->payment_type . '|' . $payment_mode;
$charge_details['metadata'] = array('custom' => $custom_var, 'tax_percentage' => $request_data['tax_percentage'].'%','customer_email' => $entry_email);
/*if (!empty($request_data['stripeToken'])) {
$charge_details['source'] = $request_data['stripeToken'];
} else {*/
$first_name = (isset($request_data['first_name']) && !empty($request_data['first_name'])) ? $request_data['first_name'] : '';
$last_name = (isset($request_data['last_name']) && !empty($request_data['last_name'])) ? $request_data['last_name'] : '';
if($card_holder_name != '') {
$stripe_display_name = $card_holder_name;
}
else if ($first_name != '' && $last_name != '') {
$stripe_display_name = $first_name . " " . $last_name;
} else {
$stripe_display_name = sanitize_user($entry_email);
}
$charge_details['card'] = array(
"number" => $card_number,
"exp_month" => $exp_month,
"exp_year" => $exp_year,
"cvc" => $cvc,
'name' => $stripe_display_name,
'email' => sanitize_user($entry_email),
'address_line1' => '',
'address_line2' => '',
'address_city' => '',
'address_zip' => '',
'address_state' => '',
'address_country' => '',
);
//}
$charge_details['email'] = sanitize_user($entry_email);
$extraParam['arm_is_trial'] = $arm_is_trial;
$charge_details['extraVars'] = $extraParam;
}
do_action('arm_payment_log_entry', 'stripe', 'return prepared charge details', 'armember', $charge_details, $arm_debug_payment_log_id);
return $charge_details;
}
function arm_prepare_stripe_charge_details_for_single_payment($request_data = array(), $setup_id = 0, $payment_cycle = 0,$arm_return_data=array()) {
global $wpdb, $ARMember, $arm_global_settings, $payment_done, $arm_payment_gateways, $arm_membership_setup, $arm_manage_coupons, $arm_transaction, $arm_debug_payment_log_id,$arm_pro_ration_feature;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
$arm_debug_payment_log_data = array(
'request_data' => $request_data,
'setup_id' => $setup_id,
'payment_cycle' => $payment_cycle,
);
do_action('arm_payment_log_entry', 'stripe', 'prepare charge details for single payment', 'armember', $arm_debug_payment_log_data, $arm_debug_payment_log_id);
$charge_details = array();
if (!empty($request_data)) {
$currency = $arm_payment_gateways->arm_get_global_currency();
$entry_id = $request_data['entry_id'];
$entry_email = $request_data['entry_email'];
$stripe_card_detail = !empty($request_data['stripe']) ? $request_data['stripe'] : '';
$card_holder_name = !empty($stripe_card_detail['card_holder_name']) ? $stripe_card_detail['card_holder_name'] : '';
$card_number = !empty($stripe_card_detail['card_number']) ? $stripe_card_detail['card_number']: '';
$exp_month = !empty($stripe_card_detail['exp_month']) ? $stripe_card_detail['exp_month'] : '';
$exp_year = !empty($stripe_card_detail['exp_year']) ? $stripe_card_detail['exp_year'] : '';
$cvc = !empty($stripe_card_detail['cvc']) ? $stripe_card_detail['cvc'] :'';
$formSlug = isset($request_data['arm_action']) ? $request_data['arm_action'] : '';
$arm_user_old_plan = $request_data['arm_user_old_plan_ids'];
$subscriptionPlanID = (!empty($request_data['subscription_plan'])) ? $request_data['subscription_plan'] : 0;
if ($subscriptionPlanID == 0) {
$subscriptionPlanID = (!empty($request_data['_subscription_plan'])) ? $request_data['_subscription_plan'] : 0;
}
$form = new ARM_Form('slug', $formSlug);
$plan = ($arm_pro_ration_feature->isProRationFeature && !empty( $arm_return_data['arm_is_prorated'] ) && !empty($arm_return_data['arm_plan_obj'])) ? $arm_return_data['arm_plan_obj'] : new ARM_Plan($subscriptionPlanID);
$recurring_data = $plan->prepare_recurring_data($payment_cycle);
$amount = $recurring_data['trial']['amount'];
$amount = str_replace(",", "", $amount);
$trial_period = $recurring_data['trial']['period'];
$trial_interval = $recurring_data['trial']['interval'];
$plan_amount = $recurring_data['amount'];
$plan_amount = str_replace(",", "", $plan_amount);
$maskCCNum = $arm_transaction->arm_mask_credit_card_number($card_number);
$extraParam = array('card_number' => $maskCCNum, 'plan_amount' => $amount, 'paid_amount' => $amount);
$discount_amt = $coupon_amount = 0;
/* Coupon Details */
if ($arm_manage_coupons->isCouponFeature && isset($request_data['arm_coupon_code']) && !empty($request_data['arm_coupon_code'])) {
$couponApply = $arm_manage_coupons->arm_apply_coupon_code($request_data['arm_coupon_code'], $plan, $setup_id, $payment_cycle, $arm_user_old_plan);
$coupon_amount = isset($couponApply['coupon_amt']) ? $couponApply['coupon_amt'] : 0;
$coupon_amount = str_replace(",", "", $coupon_amount);
$discount_amt = isset($couponApply['total_amt']) ? $couponApply['total_amt'] : $amount;
$discount_amt = str_replace(",", "", $discount_amt);
$arm_coupon_on_each_subscriptions = isset($couponApply['arm_coupon_on_each_subscriptions']) ? $couponApply['arm_coupon_on_each_subscriptions'] : '0';
$arm_coupon_discount_type_default = isset($couponApply['discount_type']) ? $couponApply['discount_type'] : "";
$arm_coupon_discount = (isset($couponApply['discount']) && !empty($couponApply['discount'])) ? $couponApply['discount'] : 0;
$global_currency = $arm_payment_gateways->arm_get_global_currency();
$arm_coupon_discount_type = ($couponApply['discount_type'] != 'percentage') ? $global_currency : "%";
if (!empty($coupon_amount) && $coupon_amount > 0) {
$extraParam['coupon'] = array(
'coupon_code' => $request_data['arm_coupon_code'],
'amount' => $coupon_amount,
);
$charge_details['coupon_details'] = array(
'coupon_code' => $request_data['arm_coupon_code'],
'arm_coupon_discount' => $arm_coupon_discount,
'arm_coupon_discount_type' => $arm_coupon_discount_type,
'arm_coupon_discount_type_default' => $arm_coupon_discount_type_default,
'arm_coupon_on_each_subscriptions' => $arm_coupon_on_each_subscriptions
);
}
} else {
$request_data['arm_coupon_code'] = '';
}
$extraParam['trial'] = array(
'amount' => $amount,
'period' => $trial_period,
'interval' => $trial_interval,
);
/* Coupon Details */
if (!empty($coupon_amount) && $coupon_amount > 0) {
$amount = $discount_amt;
}
$amount = str_replace(",", "", $amount);
if(!empty($arm_pro_ration_feature->isProRationFeature) && !empty( $arm_return_data['arm_is_prorated'] ) ){
$request_data['tax_percentage'] = 0;
}
if($request_data['tax_percentage'] > 0 ) {
$tax_display_type = (!empty($request_data['arm_tax_include_exclude_flag']) && $request_data['arm_tax_include_exclude_flag'] == 1) ? 1 : 0;
if( empty($tax_display_type) )
{
$extraParam['arm_tax_include_exclude_flag'] = 0;
$tax_amount = ($request_data['tax_percentage'] * $amount)/100;
$tax_amount= number_format((float) $tax_amount, $arm_currency_decimal, '.', '');
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
$amount = $amount + $tax_amount;
}
else
{
$extraParam['arm_tax_include_exclude_flag'] = 1;
$tax_amount = $arm_membership_setup->arm_calculate_included_tax($amount,$request_data['tax_percentage']);
$tax_amount= number_format((float) $tax_amount, $arm_currency_decimal, '.', '');
}
$charge_details['tax_amount'] = $tax_amount;
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
if (!empty($amount)) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount * $arm_stripe_amount_multiply;
$amount = number_format($amount,0,".","");
}
else{
$amount = number_format($amount, 0,".",'');
$amount = str_replace(",", "", $amount);
}
} else {
$amount = "0.00";
}
/* Make Amount in Cent */
$charge_details['amount'] = $amount;
$charge_details['currency'] = $currency;
//if (isset($request_data['user_email']) && $request_data['user_email'] != "") {
$charge_details['receipt_email'] = !empty($request_data['user_email']) ? $request_data['user_email'] : $entry_email;
//}
if ($plan->name != "") {
$charge_details['description'] = $plan->name;
}
$custom_var = $entry_id . '|' . $entry_email . '|' . $form->ID . '|' . $plan->payment_type;
$charge_details['metadata'] = array('custom' => $custom_var, 'tax_percentage' => $request_data['tax_percentage'].'%','customer_email' => $entry_email);
// if (!empty($request_data['stripeToken'])) {
// $charge_details['source'] = $request_data['stripeToken'];
// } else {
$first_name = (isset($request_data['first_name']) && !empty($request_data['first_name'])) ? $request_data['first_name'] : '';
$last_name = (isset($request_data['last_name']) && !empty($request_data['last_name'])) ? $request_data['last_name'] : '';
if($card_holder_name != '') {
$stripe_display_name = $card_holder_name;
}
else if ($first_name != '' && $last_name != '') {
$stripe_display_name = $first_name . " " . $last_name;
} else {
$stripe_display_name = sanitize_user($entry_email);
}
$charge_details['card'] = array(
"number" => $card_number,
"exp_month" => $exp_month,
"exp_year" => $exp_year,
"cvc" => $cvc,
'name' => $stripe_display_name,
'email' => sanitize_user($entry_email),
'address_line1' => '',
'address_line2' => '',
'address_city' => '',
'address_zip' => '',
'address_state' => '',
'address_country' => '',
);
//}
$charge_details['email'] = sanitize_user($entry_email);
$extraParam['arm_is_trial'] = '1';
$charge_details['extraVars'] = $extraParam;
}
do_action('arm_payment_log_entry', 'stripe', 'return charge details for single payment', 'armember', $charge_details, $arm_debug_payment_log_id);
return $charge_details;
}
function arm_payment_gateway_form_submit_action($payment_gateway, $payment_gateway_options, $posted_data, $entry_id){
global $wpdb, $ARMember, $arm_global_settings, $payment_done, $paid_trial_stripe_payment_done, $arm_payment_gateways, $arm_membership_setup, $arm_subscription_plans, $arm_manage_communication, $arm_transaction, $arm_debug_payment_log_id, $arm_pro_ration_feature;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
if($payment_gateway == "stripe"){
$arm_debug_log_data = array(
'payment_gateway' => $payment_gateway,
'gateway_options' => $payment_gateway_options,
'posted_data' => $posted_data,
'entry_id' => $entry_id,
);
do_action('arm_payment_log_entry', 'stripe', 'Submit payment form args', 'armember', $arm_debug_log_data, $arm_debug_payment_log_id);
$arm_return_data = array();
$arm_return_data = apply_filters('arm_calculate_payment_gateway_submit_data', $arm_return_data, $payment_gateway, $payment_gateway_options, $posted_data, $entry_id);
do_action('arm_payment_log_entry', 'stripe', 'Payment form submit data', 'armember', $arm_return_data, $arm_debug_payment_log_id);
$entry_data = $arm_return_data['arm_entry_data'];
$entry_email = $arm_return_data['arm_user_email'];
$posted_data['entry_email'] = $entry_email;
$posted_data['entry_id'] = $entry_id;
$user_id = $entry_data['arm_user_id'];
$setup_id = $posted_data['setup_id'];
$entry_values = maybe_unserialize($entry_data['arm_entry_value']);
$arm_pro_rata_return_data = !empty($entry_data['arm_return_data'] ) ? maybe_unserialize( $entry_data['arm_return_data'] ) : array();
$arm_user_old_plan = (!empty($entry_values['arm_user_old_plan'])) ? explode(',', $entry_values['arm_user_old_plan']) : array();
$posted_data['tax_percentage'] = $tax_percentage = !empty($entry_values['tax_percentage']) ? $entry_values['tax_percentage'] : 0;
$posted_data['arm_user_old_plan_ids'] = $arm_user_old_plan;
$payment_cycle = $entry_values['arm_selected_payment_cycle'];
$setup_detail = $arm_membership_setup->arm_get_membership_setup($setup_id);
$plan_id = !empty($arm_return_data['arm_plan_id']) ? $arm_return_data['arm_plan_id'] : 0;
$plan = !empty($arm_return_data['arm_plan_obj']) ? $arm_return_data['arm_plan_obj'] : array();
if(empty($plan_id)){
$plan_id = (!empty($posted_data['_subscription_plan'])) ? $posted_data['_subscription_plan'] : 0;
$plan = ($arm_pro_ration_feature->isProRationFeature && !empty($arm_return_data['arm_plan_obj'])) ? $arm_return_data['arm_plan_obj'] : new ARM_Plan($plan_id);
}
$arm_plan_is_recurring = $plan->is_recurring();
if (isset($plan->options['payment_cycles']) && !empty($plan->options['payment_cycles'])) {
$payment_cycle_key = !empty($plan->options['payment_cycles'][$payment_cycle]['cycle_key']) ? $plan->options['payment_cycles'][$payment_cycle]['cycle_key'] : $payment_cycle ;
if (!empty($setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id])) {
if (is_array($setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id])) {
if (isset($setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id][$payment_cycle_key])) {
$stripePlanID = $setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id][$payment_cycle_key];
} else {
$stripePlanID = '';
}
} else {
$stripePlanID = $setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id];
}
$posted_data['stripePlanID'] = $stripePlanID;
} else {
$posted_data['stripePlanID'] = '';
}
} else {
if (!empty($setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id])) {
if (is_array($setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id])) {
$stripePlanID = $setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id]['arm0'];
} else {
$stripePlanID = $setup_detail['setup_modules']['modules']['stripe_plans'][$plan_id];
}
$posted_data['stripePlanID'] = $stripePlanID;
} else {
$posted_data['stripePlanID'] = '';
}
}
if ($arm_plan_is_recurring) {
$payment_mode = !empty($arm_return_data['arm_payment_mode']) ? $arm_return_data['arm_payment_mode'] : 'manual_subscription';
} else {
$payment_mode = '';
}
$plan_action = !empty($arm_return_data['arm_plan_action']) ? $arm_return_data['arm_plan_action'] : 'new_subscription';
$plan_expiry_date = !empty($arm_return_data['arm_plan_expiry_date']) ? $arm_return_data['arm_plan_expiry_date'] : "now";
if ($payment_mode == 'auto_debit_subscription') {
if ($arm_plan_is_recurring) {
if ($plan_action == 'new_subscription') {
if (!($plan->is_support_stripe($payment_cycle))) {
$err_msg = esc_html__('Payment through Stripe is not supported for selected plan.', 'ARMember');
return $payment_done = array('status' => FALSE, 'error' => $err_msg);
}
} else {
if (!($plan->is_support_stripe_without_trial($payment_cycle))) {
$err_msg = esc_html__('Payment through Stripe is not supported for selected plan.', 'ARMember');
return $payment_done = array('status' => FALSE, 'error' => $err_msg);
}
}
}
}
// Charge Details Code Started
//-------------------------------------------------------------
$charge_details = array();
$currency = $arm_payment_gateways->arm_get_global_currency();
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
$stripe_card_detail = isset($posted_data['stripe']) ? $posted_data['stripe'] : array();
$card_holder_name = isset( $stripe_card_detail['card_holder_name'] ) ? $stripe_card_detail['card_holder_name'] : '';
$card_number = isset($stripe_card_detail['card_number']) ? $stripe_card_detail['card_number'] : '';
$exp_month = isset($stripe_card_detail['exp_month']) ? $stripe_card_detail['exp_month'] : '';
$exp_year = isset($stripe_card_detail['exp_year']) ? $stripe_card_detail['exp_year'] : '';
$cvc = isset($stripe_card_detail['cvc']) ? $stripe_card_detail['cvc'] : '';
$arm_is_trial = '0';
$formSlug = isset($posted_data['arm_action']) ? $posted_data['arm_action'] : '';
$form = new ARM_Form('slug', $formSlug);
if($arm_plan_is_recurring){
$recurring_data = $arm_return_data['arm_recurring_data'];
$amount = str_replace(",", "", $recurring_data['amount']);
}else{
$amount = str_replace(",", "", $plan->amount);
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$maskCCNum = $arm_transaction->arm_mask_credit_card_number($card_number);
$extraParam = array('card_number' => $maskCCNum, 'plan_amount' => $amount, 'paid_amount' => $amount);
// Coupon Data Calculation
//-------------------------
$discount_amt = $coupon_amount = $arm_coupon_on_each_subscriptions = $arm_coupon_discount = 0;
$coupon_code = $arm_coupon_discount_type_default = $arm_coupon_discount_type = '';
$coupon_details = array();
$arm_coupon_data = !empty($arm_return_data['arm_coupon_data']) ? $arm_return_data['arm_coupon_data'] : array();
if( !empty($arm_coupon_data) ){
$coupon_code = !empty($arm_coupon_data['arm_coupon_code']) ? $arm_coupon_data['arm_coupon_code'] : '';
$coupon_amount = !empty($arm_coupon_data['coupon_amt']) ? $arm_coupon_data['coupon_amt'] : 0;
$discount_amt = !empty($arm_coupon_data['total_amt']) ? $arm_coupon_data['total_amt'] : 0;
$discount_amt = str_replace(",", "", $discount_amt);
$arm_coupon_on_each_subscriptions = !empty($arm_coupon_data['arm_coupon_on_each_subscriptions']) ? $arm_coupon_data['arm_coupon_on_each_subscriptions'] : '0';
$arm_coupon_discount_type_default = !empty($arm_coupon_data['discount_type']) ? $arm_coupon_data['discount_type'] : '';
$arm_coupon_discount = !empty($arm_coupon_data['discount']) ? $arm_coupon_data['discount'] : 0;
$global_currency = $arm_payment_gateways->arm_get_global_currency();
$arm_coupon_discount_type = ($arm_coupon_data['discount_type'] != 'percentage') ? $global_currency : "%";
$extraParam['coupon'] = array(
'coupon_code' => $coupon_code,
'amount' => $coupon_amount,
);
$coupon_details = array(
'coupon_code' => $coupon_code,
'arm_coupon_discount' => $arm_coupon_discount,
'arm_coupon_discount_type' => $arm_coupon_discount_type,
'arm_coupon_discount_type_default' => $arm_coupon_discount_type_default,
'arm_coupon_on_each_subscriptions' => $arm_coupon_on_each_subscriptions,
'amount' => $coupon_amount,
);
$extraParam['coupon'] = $coupon_details;
if( ( !empty($arm_return_data['arm_is_prorated']) && $arm_coupon_on_each_subscriptions != '0') )
{
$charge_details['coupon_details'] = $coupon_details;
}
else if( empty($arm_return_data['arm_is_prorated']) ) {
$charge_details['coupon_details'] = $coupon_details;
}
}else{
$posted_data['arm_coupon_code'] = '';
}
//-------------------------
$tax_display_type = !empty($arm_return_data['arm_tax_data']['arm_tax_include_exclude_flag']) ? $arm_return_data['arm_tax_data']['arm_tax_include_exclude_flag'] : 0;
if($payment_mode == 'auto_debit_subscription'){
$stripePlanID = $posted_data['stripePlanID'];
if (!empty($stripePlanID)) {
$charge_details['plan'] = $stripePlanID;
}
if($amount > 0 && $arm_coupon_on_each_subscriptions == 1){
$amount = !empty($arm_return_data['arm_coupon_amount_on_each_subs']) ? $arm_return_data['arm_coupon_amount_on_each_subs'] : 0;
}
if( empty($arm_return_data['arm_is_prorated']) ) {
$arm_hook_return_type = "amount";
$amount = apply_filters('arm_modify_membership_plan_amount_external', $amount, $arm_hook_return_type, $user_id,$plan_id, $payment_cycle,$plan,$entry_id);
}
$arm_tax_data = !empty($arm_return_data['arm_tax_data']) ? $arm_return_data['arm_tax_data'] : array();
if(!empty($arm_tax_data) && empty($arm_return_data['arm_is_prorated'])){
if(empty($tax_display_type))
{
$extraParam['arm_tax_include_exclude_flag'] = 0;
$tax_amount = $arm_tax_data['tax_amount'];
$amount = $arm_tax_data['tax_final_amount'];
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
}
else
{
$extraParam['arm_tax_include_exclude_flag'] = 1;
$tax_amount = $arm_membership_setup->arm_calculate_included_tax($amount,$tax_percentage);
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.','');
}
$charge_details['tax_amount'] = $tax_amount;
}
$amount = apply_filters("arm_update_coupon_discount_amount_external", $amount, $coupon_amount, $discount_amt );
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
$rec_opt = !empty($arm_return_data['arm_recurring_data']) ? $arm_return_data['arm_recurring_data'] : array();
if ($arm_pro_ration_feature->isProRationFeature && (!empty($arm_return_data['arm_pro_rated_trial']) && !empty($rec_opt['trial']))) {
$allow_trial = true;
$arm_is_trial = '1';
$amount = $rec_opt['trial']['amount'];
$trial_amount = $rec_opt['trial']['amount'];
$trial_period = $rec_opt['trial']['period'];
$trial_interval = $rec_opt['trial']['interval'];
$extraParam['paid_amount'] = $trial_amount;
$extraParam['trial'] = array(
'amount' => $trial_amount,
'period' => $trial_period,
'interval' => $trial_interval,
);
} else {
$allow_trial = false;
}
if ($plan->has_trial_period() && $plan_action == 'new_subscription') {
if(empty($arm_coupon_on_each_subscriptions))
{
unset($charge_details['coupon_details']);
}
}
}
else if($payment_mode == 'manual_subscription'){
$rec_opt = !empty($arm_return_data['arm_recurring_data']) ? $arm_return_data['arm_recurring_data'] : array();
$allow_trial = true;
if (is_user_logged_in()) {
$user_id = get_current_user_id();
$user_plan = get_user_meta($user_id, 'arm_user_plan_ids', true);
if (!empty($user_plan) && empty($arm_return_data['arm_is_prorated'])) {
$allow_trial = false;
}
}
if ($plan->has_trial_period() && $allow_trial) {
$allow_trial = true;
$arm_is_trial = '1';
$amount = $rec_opt['trial']['amount'];
$trial_amount = $rec_opt['trial']['amount'];
$trial_period = $rec_opt['trial']['period'];
$trial_interval = $rec_opt['trial']['interval'];
$extraParam['trial'] = array(
'amount' => $trial_amount,
'period' => $trial_period,
'interval' => $trial_interval,
);
} else {
$allow_trial = false;
}
if (!empty($coupon_amount) && $coupon_amount > 0) {
$amount = $discount_amt;
}
if( empty($arm_return_data['arm_is_prorated']) && $arm_coupon_on_each_subscriptions != 1 ) {
$arm_hook_return_type = "amount";
$amount = apply_filters('arm_modify_membership_plan_amount_external', $amount, $arm_hook_return_type, $user_id,$plan_id, $payment_cycle,$plan,$entry_id);
}
if(empty($arm_return_data['arm_is_prorated']) && !empty($arm_return_data['arm_tax_data']))
{
if( empty( $tax_display_type ) )
{
$extraVars['arm_tax_include_exclude_flag'] = 0;
if($amount > 0 && $tax_percentage > 0 && $allow_trial){
$amount = $arm_return_data['arm_tax_data']['final_trial_amount'];
//$charge_details['tax_amount'] = $arm_return_data['arm_tax_data']['trial_tax_amount'];
} else if($amount > 0 && $tax_percentage > 0 && !$allow_trial ){
$amount = $arm_return_data['arm_tax_data']['tax_final_amount'];
//$charge_details['tax_amount'] = $arm_return_data['arm_tax_data']['tax_amount'];
}
}
if($allow_trial)
{
$charge_details['tax_amount'] = $arm_return_data['arm_tax_data']['trial_tax_amount'];
}
else
{
$charge_details['tax_amount'] = $arm_return_data['arm_tax_data']['tax_amount'];
}
if(!empty($tax_display_type) && $tax_percentage > 0)
{
$tax_amount = $amount - ( $amount/ (($tax_percentage/100)+1) );
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.','');
$charge_details['tax_amount'] = $tax_amount;
}
}
$amount = str_replace(",", "", $amount);
$extraParam['paid_amount'] = $amount;
if (!empty($amount)) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount * $arm_stripe_amount_multiply;
$amount = number_format($amount,0,".","");
}
else{
$amount = number_format((float) $amount, 0);
$amount = str_replace(",", "", $amount);
}
}
else {
$amount = "0.00";
}
$charge_details['amount'] = $amount;
$charge_details['currency'] = $currency;
if ($amount == 0 || $amount == '0.00') {
$return_array = array();
unset($extraParam['card_number']);
if (is_user_logged_in()) {
$current_user_id = get_current_user_id();
$return_array['arm_user_id'] = $current_user_id;
$arm_user_info = get_userdata($current_user_id);
$return_array['arm_first_name']=$arm_user_info->first_name;
$return_array['arm_last_name']= $arm_user_info->last_name;
}else{
$return_array['arm_first_name']=(isset($request_data['first_name']))?$request_data['first_name']:'';
$return_array['arm_last_name']=(isset($request_data['last_name']))?$request_data['last_name']:'';
}
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'stripe';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = $entry_email;
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = $payment_mode;
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = 0;
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = @$coupon_code;
$return_array['arm_coupon_discount'] = @$arm_coupon_discount;
$return_array['arm_coupon_discount_type'] = @$arm_coupon_discount_type;
$return_array['arm_extra_vars'] = maybe_serialize($extraParam);
$return_array['arm_is_trial'] = $arm_is_trial;
$return_array['arm_created_date'] = current_time('mysql');
$return_array['arm_coupon_on_each_subscriptions'] = $arm_coupon_on_each_subscriptions;
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
do_action('arm_after_stripe_free_manual_payment', $plan, $payment_log_id, $arm_is_trial, @$coupon_code, $extraParam);
$charge_details['status'] = TRUE;
$charge_details['log_id'] = $payment_log_id;
//return array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
}
}
else{
if (!empty($coupon_amount) && $coupon_amount > 0) {
$amount = $discount_amt;
}
if( empty($arm_return_data['arm_is_prorated']) && $arm_coupon_on_each_subscriptions != 1) {
$arm_hook_return_type = "amount";
$amount = apply_filters('arm_modify_membership_plan_amount_external', $amount, $arm_hook_return_type, $user_id,$plan_id, $payment_cycle,$plan,$entry_id);
}
$amount = str_replace(",", "", $amount);
$arm_tax_data = !empty($arm_return_data['arm_tax_data']) ? $arm_return_data['arm_tax_data'] : array();
if(!empty($arm_tax_data) && empty($arm_return_data['arm_is_prorated']) ){
if( empty( $tax_display_type ) )
{
$extraParam['arm_tax_include_exclude_flag'] = 0;
$tax_amount = $arm_tax_data['tax_amount'];
$amount = $arm_tax_data['tax_final_amount'];
$tax_amount = $arm_payment_gateways->arm_amount_set_separator($currency, $tax_amount);
}
else
{
$extraParam['arm_tax_include_exclude_flag'] = 1;
$tax_amount = $arm_membership_setup->arm_calculate_included_tax($amount,$tax_percentage);
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.','');
}
$charge_details['tax_amount'] = $tax_amount;
}
$amount = number_format((float) $amount, $arm_currency_decimal, '.', '');
$extraParam['paid_amount'] = $amount;
if (!empty($amount)) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount * $arm_stripe_amount_multiply;
$amount = number_format($amount,0,".","");
}
else{
$amount = number_format((float) $amount, 0);
$amount = str_replace(",", "", $amount);
}
} else {
$amount = "0";
}
$charge_details['amount'] = $amount;
$charge_details['currency'] = $currency;
if ($amount == 0 || $amount == '0.00') {
$return_array = array();
unset($extraParam['card_number']);
if (is_user_logged_in()) {
$current_user_id = get_current_user_id();
$return_array['arm_user_id'] = $current_user_id;
$arm_user_info = get_userdata($current_user_id);
$return_array['arm_first_name']=$arm_user_info->first_name;
$return_array['arm_last_name']=$arm_user_info->last_name;
}else{
$return_array['arm_first_name']=(isset($request_data['first_name']))?$request_data['first_name']:'';
$return_array['arm_last_name']=(isset($request_data['last_name']))?$request_data['last_name']:'';
}
$return_array['arm_plan_id'] = $plan->ID;
$return_array['arm_payment_gateway'] = 'stripe';
$return_array['arm_payment_type'] = $plan->payment_type;
$return_array['arm_token'] = '-';
$return_array['arm_payer_email'] = $entry_email;
$return_array['arm_receiver_email'] = '';
$return_array['arm_transaction_id'] = '-';
$return_array['arm_transaction_payment_type'] = $plan->payment_type;
$return_array['arm_transaction_status'] = 'completed';
$return_array['arm_payment_mode'] = '';
$return_array['arm_payment_date'] = current_time( 'mysql' );
$return_array['arm_amount'] = 0;
$return_array['arm_currency'] = $currency;
$return_array['arm_coupon_code'] = @$coupon_code;
$return_array['arm_coupon_discount'] = @$arm_coupon_discount;
$return_array['arm_coupon_discount_type'] = @$arm_coupon_discount_type;
$return_array['arm_extra_vars'] = maybe_serialize($extraParam);
$return_array['arm_is_trial'] = $arm_is_trial;
$return_array['arm_created_date'] = current_time('mysql');
$return_array['arm_coupon_on_each_subscriptions'] = $arm_coupon_on_each_subscriptions;
$payment_log_id = $arm_payment_gateways->arm_save_payment_log($return_array);
do_action('arm_after_stripe_free_payment', $plan, $payment_log_id, $arm_is_trial, @$coupon_code, $extraParam);
$charge_details['status'] = TRUE;
$charge_details['log_id'] = $payment_log_id;
//return array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
}
if (isset($entry_email) && $entry_email != "") {
$charge_details['receipt_email'] = $entry_email;
}
if ($plan->name != "") {
$charge_details['description'] = $plan->name;
}
}
$custom_var = $entry_id . '|' . $entry_email . '|' . $form->ID . '|' . $plan->payment_type . '|' . $payment_mode;
$charge_details['metadata'] = array('custom' => $custom_var, 'tax_percentage' => $posted_data['tax_percentage'].'%','customer_email' => $entry_email);
$first_name = (isset($posted_data['first_name']) && !empty($posted_data['first_name'])) ? $posted_data['first_name'] : '';
$last_name = (isset($posted_data['last_name']) && !empty($posted_data['last_name'])) ? $posted_data['last_name'] : '';
if($card_holder_name != '') {
$stripe_display_name = $card_holder_name;
}
else if ($first_name != '' && $last_name != '') {
$stripe_display_name = $first_name . " " . $last_name;
} else {
$stripe_display_name = sanitize_user($entry_email);
}
$charge_details['card'] = array(
"number" => $card_number,
"exp_month" => $exp_month,
"exp_year" => $exp_year,
"cvc" => $cvc,
'name' => $stripe_display_name,
'email' => sanitize_user($entry_email),
'address_line1' => '',
'address_line2' => '',
'address_city' => '',
'address_zip' => '',
'address_state' => '',
'address_country' => '',
);
$charge_details['email'] = sanitize_user($entry_email);
$extraParam['arm_is_trial'] = $arm_is_trial;
$charge_details['extraVars'] = $extraParam;
//-------------------------------------------------------------
$arm_stripe_avail_payment_methods = array();
$arm_stripe_avail_payment_methods = apply_filters( 'arm_get_available_stripe_payment_methods',$arm_stripe_avail_payment_methods);
if(!empty($posted_data['stripe_payment_method']) && !empty($arm_stripe_avail_payment_methods) && is_array($arm_stripe_avail_payment_methods) && array_key_exists($posted_data['stripe_payment_method'],$arm_stripe_avail_payment_methods))
{
$payment_done = apply_filters( 'arm_stripe_process_other_payment_method', $posted_data, $arm_return_data, $payment_gateway, $payment_gateway_options, $charge_details,$entry_values,$entry_id);
return $payment_done;
exit;
}
if(!empty($payment_gateway_options['stripe_payment_method']) && ($payment_gateway_options['stripe_payment_method'] == "popup")){
global $arm_stripe_sca;
$arm_stripe_sca->arm_stripe_sca_form_render($posted_data, $arm_return_data, $payment_gateway, $payment_gateway_options, $charge_details);
if( false == $payment_done['status'] || (isset( $payment_done['status2']) && true == $payment_done['status2'] ) ){
return $payment_done;
}
die;
}
$stripe_response = array();
$stripe_error_msg = (isset($arm_global_settings->common_message['arm_payment_fail_stripe'])) ? $arm_global_settings->common_message['arm_payment_fail_stripe'] : esc_html__('Sorry something went wrong while processing payment with Stripe.', 'ARMember');
$payment_done = array('status' => FALSE, 'error' => $stripe_error_msg, 'gateway' => 'stripe');
if (!empty($charge_details)) {
$extraVars = array();
if (isset($charge_details['status']) && $charge_details['status'] == TRUE) {
$payment_done = $charge_details;
return $payment_done;
}
if (isset($charge_details['extraVars'])) {
$extraVars = $charge_details['extraVars'];
unset($charge_details['extraVars']);
}
$coupon_details = array();
if (isset($charge_details['coupon_details'])) {
$coupon_details = $charge_details['coupon_details'];
}
$charge_details['plan_action'] = $plan_action;
$charge_details['expire_date'] = $plan_expiry_date;
$charge_details['tax_percentage'] = $tax_percentage;
$extraVars['tax_percentage'] = $tax_percentage;
$extraVars['tax_amount'] = isset($charge_details['tax_amount'])? $charge_details['tax_amount'] : 0;
unset($charge_details['tax_amount']);
//$plan = new ARM_Plan($plan_id);
$update_payment = false;
$stripe_response1 = $stripe_response = array();
if( ($plan_action == 'new_subscription' || $arm_pro_ration_feature->isProRationFeature) && $plan->is_recurring() && $payment_mode == 'auto_debit_subscription' && $plan->has_trial_period() ) {
$opt_trial = $plan->options['trial'];
$stripe_response1['message_error'] = array();
if ($opt_trial['amount'] > 0) {
$charge_details1 = self::arm_prepare_stripe_charge_details_for_single_payment($posted_data, $setup_id, $payment_cycle,$arm_return_data);
if (!empty($charge_details1)) {
$extraVars1 = array();
if (isset($charge_details1['extraVars'])) {
$extraVars1 = $charge_details1['extraVars'];
unset($charge_details1['extraVars']);
}
$coupon_details = array();
if (isset($charge_details1['coupon_details'])) {
$coupon_details = $charge_details1['coupon_details'];
if(empty($charge_details1['coupon_details']['arm_coupon_on_each_subscriptions']))
{
unset($charge_details1['coupon_details']);
}
}
unset($charge_details1['source']);
//$charge_details1['customer'] = $stripe_response->customer;
$extraVars1['tax_percentage'] = $charge_details1['tax_percentage'] = $tax_percentage;
$extraVars1['tax_amount'] = isset($charge_details1['tax_amount'])? $charge_details1['tax_amount'] : 0;
unset($charge_details1['tax_amount']);
if($charge_details1['amount'] > 0)
{
$stripe_response1 = self::arm_StripePayment($charge_details1, $plan, $payment_mode, $arm_pro_rata_return_data);
$update_payment = true;
}
} else {
$stripe_response1['message_error'] = (isset($arm_global_settings->common_message['arm_payment_fail_stripe'])) ? $arm_global_settings->common_message['arm_payment_fail_stripe'] : esc_html__('Sorry something went wrong while processing payment with Stripe.', 'ARMember');
}
}
if (!empty($stripe_response1['message_error'])) {
$payment_done = array('status' => FALSE, 'error' => $stripe_response1['message_error'], 'gateway' => 'stripe');
return $payment_done;
} else {
if(!empty($stripe_response1)){
$stripe_response = self::arm_StripePayment($charge_details, $plan, $payment_mode, $arm_pro_rata_return_data);
if (!empty($stripe_response['message_error'])) {
$payment_done = array('status' => FALSE, 'error' => $stripe_response['message_error'], 'gateway' => 'stripe');
}
else{
$payment_log_id = self::arm_store_stripe_log($stripe_response, $plan_id, $user_id, $posted_data['entry_email'], $extraVars, $payment_mode, $coupon_details);
sleep(2);
$payment_done = array();
if ($payment_log_id) {
if( $update_payment ){
self::arm_update_stripe_charge( $stripe_response1->id, $stripe_response->customer );
}
$payment_done = array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
if(!empty($coupon_details) && !empty($coupon_details["arm_coupon_on_each_subscriptions"])) {
$payment_done["coupon_on_each"] = TRUE;
$payment_done["trans_log_id"] = $payment_log_id;
}
}
$payment_log_id1 = self::arm_store_stripe_log($stripe_response1, $plan_id, $user_id, $posted_data['entry_email'], $extraVars1, $payment_mode, $coupon_details);
$paid_trial_stripe_payment_done = array();
if ($payment_log_id1) {
$paid_trial_stripe_payment_done = array('status' => TRUE, 'log_id' => $payment_log_id1, 'entry_id' => $entry_id, 'gateway' => 'stripe');
}
}
}
}
}
else{
if($plan->is_recurring() && $payment_mode == 'auto_debit_subscription') {
$arm_selected_payment_plan = $posted_data['subscription_plan'];
$arm_selected_payment_cycle = $posted_data['payment_cycle_'.$arm_selected_payment_plan];
$arm_subscribe_plan_cycles = array();
array_push($arm_subscribe_plan_cycles, $plan->options['payment_cycles'][$arm_selected_payment_cycle]);
$arm_new_stripe_subscribe_plans = $this->arm_stripe_get_stripe_plan($arm_selected_payment_plan, $arm_subscribe_plan_cycles);
$charge_details['plan'] = $arm_new_stripe_subscribe_plans[0];
}
$stripe_response = self::arm_StripePayment($charge_details, $plan, $payment_mode, $arm_pro_rata_return_data);
if (empty($stripe_response['message_error'])) {
if($plan->is_recurring() && $payment_mode == 'auto_debit_subscription')
{
$arm_subscription_plan_options['arm_subscription_plan_options'] = $plan->arm_subscription_plan_options;
//Update Plan Setup Configuration
$this->arm_update_stripe_configuration_setup($arm_selected_payment_plan, $arm_subscription_plan_options);
}
}
else
{
$payment_done = array('status' => FALSE, 'error' => $stripe_response['message_error'], 'gateway' => 'stripe');
return $payment_done;
}
if($plan_action=='recurring_payment')
{
$stripe_response['plan_action'] = 'recurring_subscription';
}
$payment_log_id = self::arm_store_stripe_log($stripe_response, $plan_id, $user_id, $posted_data['entry_email'], $extraVars, $payment_mode, $coupon_details);
sleep(2);
$payment_done = array();
if ($payment_log_id) {
$payment_done = array('status' => TRUE, 'log_id' => $payment_log_id, 'entry_id' => $entry_id);
if($plan_action=='renew_subscription' && !empty($coupon_details) && !empty($coupon_details["arm_coupon_on_each_subscriptions"]))
{
$payment_done["coupon_on_each"] = TRUE;
$payment_done["trans_log_id"] = $payment_log_id;
}
/*
else if($plan_action=='recurring_payment')
{
do_action('arm_after_recurring_payment_success_outside', $user_id, $plan_id, 'stripe', $payment_mode, $user_subsdata);
}
*/
}
}
}
}
}
function arm_cancel_stripe_subscription($user_id, $plan_id) {
global $wpdb, $ARMember, $arm_global_settings, $arm_subscription_plans, $arm_member_forms, $arm_payment_gateways, $arm_manage_communication, $arm_subscription_cancel_msg, $arm_debug_payment_log_id;
$arm_cancel_subscription_data = array();
$arm_cancel_subscription_data = apply_filters('arm_gateway_cancel_subscription_data', $arm_cancel_subscription_data, $user_id, $plan_id, 'stripe', 'transaction_id', '', 'customer_id');
if(!empty($arm_cancel_subscription_data)){
do_action('arm_payment_log_entry', 'stripe', 'cancel subscription data', 'armember', $arm_cancel_subscription_data, $arm_debug_payment_log_id);
$arm_payment_mode = !empty($arm_cancel_subscription_data['arm_payment_mode']) ? $arm_cancel_subscription_data['arm_payment_mode'] : 'manual_subscription';
$arm_subscr_id = !empty($arm_cancel_subscription_data['arm_subscr_id']) ? $arm_cancel_subscription_data['arm_subscr_id'] : '';
$arm_customer_id = !empty($arm_cancel_subscription_data['arm_customer_id']) ? $arm_cancel_subscription_data['arm_customer_id'] : '';
$arm_transaction_id = !empty($arm_cancel_subscription_data['arm_transaction_id']) ? $arm_cancel_subscription_data['arm_transaction_id'] : '';
$arm_cancel_amount = !empty($arm_cancel_subscription_data['arm_cancel_amount']) ? $arm_cancel_subscription_data['arm_cancel_amount'] : 0;
$stripe_options = $arm_cancel_subscription_data['payment_gateway_options'];
if( isset( $stripe_options['stripe_payment_method'] ) && 'popup' == $stripe_options['stripe_payment_method'] ){
global $arm_stripe_sca;
$arm_stripe_sca->arm_cancel_stripe_sca_subscription($arm_cancel_subscription_data);
return;
}
if($arm_payment_mode == "auto_debit_subscription"){
if(!empty($arm_subscr_id)){
if (file_exists(MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php")) {
require_once (MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php");
}
if ($stripe_options['stripe_payment_mode'] == 'live') {
$apikey = $stripe_options['stripe_secret_key'];
} else {
$apikey = $stripe_options['stripe_test_secret_key'];
}
Stripe\Stripe::setApiKey($apikey);
Stripe\Stripe::setApiVersion($this->arm_stripe_api_version);
try {
$arm_stripe_obj = new \Stripe\StripeClient($apikey);
$StripeAcion = $arm_stripe_obj->subscriptions->cancel($arm_subscr_id);
do_action('arm_payment_log_entry', 'stripe', 'cancel subscription response', 'armember', $StripeAcion, $arm_debug_payment_log_id);
if((!empty($StripeAcion) && (empty($StripeAcion->status) || ($StripeAcion->status != "canceled"))) || empty($StripeAcion))
{
$common_messages = isset($arm_global_settings->common_message) ? $arm_global_settings->common_message : array();
$arm_subscription_cancel_msg = isset($common_messages['arm_payment_gateway_subscription_failed_error_msg']) ? $common_messages['arm_payment_gateway_subscription_failed_error_msg'] : esc_html__("Membership plan couldn't cancel. Please contact the site administrator.", 'ARMember');
return;
}
} catch (Exception $e) {
$errormsgchk = $e->getMessage();
if(strpos($errormsgchk, 'No such subscription:')===false)
{
do_action('arm_payment_log_entry', 'stripe', 'cancel subscription error', 'armember', $e->getMessage(), $arm_debug_payment_log_id);
$arm_enable_debug_mode = isset($stripe_options['enable_debug_mode']) ? $stripe_options['enable_debug_mode'] : 0;
if($arm_enable_debug_mode)
{
$arm_subscription_cancel_msg = esc_html__("Error in subscription cancel from Payment Gateway:", "ARMember")." ".$e->getMessage();
}
else
{
$common_messages = isset($arm_global_settings->common_message) ? $arm_global_settings->common_message : array();
$arm_subscription_cancel_msg = isset($common_messages['arm_payment_gateway_subscription_failed_error_msg']) ? $common_messages['arm_payment_gateway_subscription_failed_error_msg'] : esc_html__("Membership plan couldn't cancel. Please contact the site administrator.", 'ARMember');
}
return;
}
}
}
}
do_action('arm_cancel_subscription_payment_log_entry', $user_id, $plan_id, 'stripe', $arm_subscr_id, $arm_subscr_id, $arm_customer_id, $arm_payment_mode, $arm_cancel_amount);
}
}
function arm_update_stripe_charge( $charge_id, $customer_id ){
global $wpdb, $ARMember, $arm_payment_gateways, $arm_debug_payment_log_id;
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
$arm_debug_log_data = array(
'charge_id' => $charge_id,
'customer_id' => $customer_id,
);
do_action('arm_payment_log_entry', 'stripe', 'update charge data', 'armember', $arm_debug_log_data, $arm_debug_payment_log_id);
if( isset( $all_payment_gateways['stripe'] ) && !empty( $all_payment_gateways['stripe'] ) ){
if( file_exists( MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php" ) ){
require_once( MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php" );
}
$apikey = "";
$stripe_options = $all_payment_gateways['stripe'];
if( "live" == $stripe_options['stripe_payment_mode'] ){
$apikey = $stripe_options['stripe_secret_key'];
} else {
$apikey = $stripe_options['stripe_test_secret_key'];
}
$stripe_client = new \Stripe\StripeClient($apikey);
Stripe\Stripe::setApiVersion($this->arm_stripe_api_version);
$update_charge = $stripe_client->charges->update($charge_id, array(
'customer'=>$customer_id
));
do_action('arm_payment_log_entry', 'stripe', 'update charge response', 'armember', $update_charge, $arm_debug_payment_log_id);
}
}
function arm_StripePayment($charge_details, $plan='', $payment_mode='manual_subscription', $arm_pro_rata_return_data=array() ) {
global $wpdb, $ARMember, $arm_global_settings, $arm_member_forms, $arm_payment_gateways, $arm_debug_payment_log_id,$arm_pro_ration_feature;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
$arm_debug_log_data = $arm_debug_log_data_log = array(
'charge_details' => $charge_details,
'plan' => $plan,
'payment_mode' => $payment_mode,
);
if(isset($arm_debug_log_data_log['charge_details']['card']))
{
unset($arm_debug_log_data_log['charge_details']['card']);
}
do_action('arm_payment_log_entry', 'stripe', 'Payment Data', 'armember', $arm_debug_log_data_log, $arm_debug_payment_log_id);
$errors = array();
$err_msg = (isset($arm_global_settings->common_message['arm_payment_fail_stripe'])) ? $arm_global_settings->common_message['arm_payment_fail_stripe'] : esc_html__('Sorry something went wrong while processing payment with Stripe.', 'ARMember');
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
if (isset($all_payment_gateways['stripe']) && !empty($all_payment_gateways['stripe'])) {
if (file_exists(MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php")) {
require_once (MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php");
}
$apikey = "";
$stripe_options = $all_payment_gateways['stripe'];
$arm_stripe_enable_debug_mode = isset($stripe_options['enable_debug_mode']) ? $stripe_options['enable_debug_mode'] : 0;
$arm_help_link = '<a href="https://stripe.com/docs/error-codes" target="_blank">'.esc_html__('Click Here', 'ARMember').'</a>';
if ($stripe_options['stripe_payment_mode'] == 'live') {
$apikey = $stripe_options['stripe_secret_key'];
} else {
$apikey = $stripe_options['stripe_test_secret_key'];
}
Stripe\Stripe::setApiKey($apikey);
Stripe\Stripe::setApiVersion($this->arm_stripe_api_version);
$plan_action = isset($charge_details['plan_action']) ? $charge_details['plan_action'] : 'new_subscription';
$expire_date = isset($charge_details['expire_date']) ? $charge_details['expire_date'] : "now";
$coupon_details = isset($charge_details['coupon_details']) ? $charge_details['coupon_details'] : array();
$customer_email = isset($charge_details['email']) ? $charge_details['email'] : '';
$tax_percentage = isset($charge_details['tax_percentage']) ? number_format((float)$charge_details['tax_percentage'], $arm_currency_decimal, '.',''): 0;
unset($charge_details['expire_date']);
unset($charge_details['plan_action']);
unset($charge_details['coupon_details']);
unset($charge_details['email']);
unset($charge_details['tax_percentage']);
try {
if (isset($charge_details['plan']) && !empty($charge_details['plan'])) {
if (isset($charge_details['source']) && !empty($charge_details['source'])) {
$cust_detail = array('source' => $charge_details['source']);
unset($charge_details['source']);
} else {
$cust_detail = array('card' => $charge_details['card']);
unset($charge_details['card']);
}
$cust_detail['email'] = $customer_email;
$cust_detail['name'] = $cust_detail['card']['name'];
if (class_exists('Stripe\Customer')) {
if (!empty($coupon_details)) {
$coupon_code = $coupon_details['coupon_code'];
$coupon_discount_type = $coupon_details['arm_coupon_discount_type'];
$arm_coupon_on_each_subscriptions = isset($coupon_details['arm_coupon_on_each_subscriptions']) ? $coupon_details['arm_coupon_on_each_subscriptions'] : '0';
$coupon_duration = "once";
if(!empty($arm_coupon_on_each_subscriptions))
{
$coupon_duration = "forever";
}
$stripe_coupon_details = array();
try {
$stripe_coupon_details = Stripe\Coupon::retrieve($coupon_code);
} catch (Exception $ex) {
}
if (!empty($stripe_coupon_details)) {
$coupon_created_date = $stripe_coupon_details->created;
$coupon_updated_date = $wpdb->get_var($wpdb->prepare("SELECT `arm_coupon_added_date` FROM `$ARMember->tbl_arm_coupons` WHERE `arm_coupon_code` = %s", $coupon_code)); //phpcs:ignore --Reason $ARMember->tbl_arm_coupons is a table name
if (strtotime($coupon_updated_date) > $coupon_created_date) {
$stripe_coupon_details->delete();
$stripe_coupon_details = array();
}
}
if (empty($stripe_coupon_details)) {
$currency = $arm_payment_gateways->arm_get_global_currency();
$create_coupon = array();
try {
if ($coupon_discount_type == '%') {
$coupon_amount = str_replace(",", "", $coupon_details['arm_coupon_discount']);
$coupon_amount = number_format((float) $coupon_amount, 0, '', '');
$create_coupon = Stripe\Coupon::create(array(
"percent_off" => $coupon_amount,
"duration" => $coupon_duration,
"id" => $coupon_code)
);
} else {
$coupon_amount = str_replace(",", "", $coupon_details['arm_coupon_discount']);
$coupon_amount = number_format((float) $coupon_amount, $arm_currency_decimal, '.', '');
if (!empty($coupon_amount)) {
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
if (!in_array($currency, $zero_demial_currencies)) {
$coupon_amount = $coupon_amount * $arm_stripe_amount_multiply;
$coupon_amount = number_format($coupon_amount,0,".","");
}
else{
$coupon_amount = number_format((float) $coupon_amount, 0);
$coupon_amount = str_replace(",", "", $coupon_amount);
}
}
$create_coupon = Stripe\Coupon::create(array(
"amount_off" => $coupon_amount,
"duration" => $coupon_duration,
"id" => $coupon_code,
"currency" => $currency)
);
}
} catch (Exception $ex) {
if($arm_stripe_enable_debug_mode == '1')
{
$error_msg = $ex->getJsonBody();
$actual_error = isset($error_msg['error']['message']) ? $error_msg['error']['message'] : '';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : esc_html__('coupon could not be applied', 'ARMember');
$ARMember->arm_write_response( " Stripe Event Data Log 55 == coupon not applied == " . maybe_serialize($error_msg) );
$errors['message_error'] = $actualmsg;
} else {
$errors['message_error'] = esc_html__('coupon could not be applied', 'ARMember');
}
return $errors;
$create_coupon = array();
}
} else {
$create_coupon = $stripe_coupon_details;
}
}
if(isset($cust_detail['card']['email'])) {
unset($cust_detail['card']['email']);
}
if ($plan_action == 'new_subscription' && $plan->is_recurring() && $payment_mode == 'auto_debit_subscription' && $plan->has_trial_period()) {
$opt_trial_days = $plan->options['trial']['days'];
$charge_details["trial_period_days"] = $opt_trial_days;
}
$token = Stripe\Token::create(array("card" => $cust_detail['card']));
$request_token = $token->id;
$cust_detail['card'] = $request_token;
$new_cust = new \Stripe\StripeClient($apikey);
$customer_obj = $new_cust->customers->create($cust_detail);
$charge_details['customer'] = $customer_obj->id;
if ($plan_action == 'change_subscription')
{
$charge_details["trial_end"] = "now";
if($arm_pro_ration_feature->isProRationFeature)
{
if( !empty($arm_pro_rata_return_data) )
{
$charge_details["trial_end"] = $arm_pro_rata_return_data['arm_trial_end_date'];
}
}
} else if ($plan_action == 'renew_subscription') {
$charge_details["trial_end"] = $expire_date;
}
if (!empty($coupon_details) && !empty($create_coupon)) {
$charge_details['coupon'] = $coupon_code;
}
if(!empty($tax_percentage) && empty($charge_details['extraVars']['arm_tax_include_exclude_flag'])){
//Create Tax Rate
$armCreateTax = $new_cust->taxRates->create([
'display_name' => 'Tax',
'inclusive' => false,
'percentage' => $tax_percentage
]);
$armTaxID = $armCreateTax->id;
$charge_details['default_tax_rates'] = array($armTaxID);
}
$charge = $new_cust->subscriptions->create($charge_details);
do_action('arm_payment_log_entry', 'stripe', 'Created Subscription Response', 'armember', $charge, $arm_debug_payment_log_id);
} else {
$errors['message_error'] = $err_msg;
do_action('arm_payment_log_entry', 'stripe', 'Created Subscription Error', 'armember', $err_msg, $arm_debug_payment_log_id);
}
} else {
if (class_exists('Stripe\Customer')) {
if(isset($charge_details['card']['email'])) {
unset($charge_details['card']['email']);
}
if( $plan->type != 'recurring' ){
if (isset($charge_details['source']) && !empty($charge_details['source'])) {
$cust_detail = array('source' => $charge_details['source']);
unset($charge_details['source']);
} else {
$cust_detail = array('card' => $charge_details['card']);
unset($charge_details['card']);
}
$token = Stripe\Token::create(array("card" => $cust_detail['card']));
$request_token = $token->id;
$cust_detail['card'] = $request_token;
$cust_detail['email'] = $customer_email;
$new_cust = new \Stripe\StripeClient($apikey);
$customer_obj = $new_cust->customers->create($cust_detail);
$charge_details['customer'] = $customer_obj->id;
} else {
$token = Stripe\Token::create(array("card" => $charge_details['card']));
$request_token = $token->id;
$charge_details['card'] = $request_token;
}
$new_cust = new \Stripe\StripeClient($apikey);
$charge = $new_cust->charges->create($charge_details);
do_action('arm_payment_log_entry', 'stripe', 'Completed payment details', 'armember', $charge, $arm_debug_payment_log_id);
} else {
do_action('arm_payment_log_entry', 'stripe', 'Completed Payment error', 'armember', $err_msg, $arm_debug_payment_log_id);
$errors['message_error'] = $err_msg;
}
}
} catch (Stripe\Error\Stripe_Card $e) {
$actual = $e->getJsonBody();
do_action('arm_payment_log_entry', 'stripe', 'Completed Payment error 2', 'armember', $actual, $arm_debug_payment_log_id);
$ARMember->arm_write_response("error1 ".maybe_serialize($actual));
$card_err_msg = '';
/* Since it's a decline, Stripe_CardError will be caught $body = $e->getJsonBody(); */
if (!empty($actual)) {
$actual_error = isset($actual['error']['message']) ? $actual['error']['message'] : '';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : '';
if (isset($actual['error']['code']) && $actual['error']['code'] == 'card_declined') {
$card_err_msg = $arm_global_settings->common_message['arm_credit_card_declined'];
$card_err_msg = (!empty($card_err_msg)) ? $card_err_msg : esc_html__('Your Card is declined.', 'ARMember');
} else {
$card_err_msg = $arm_global_settings->common_message['arm_invalid_credit_card'];
$card_err_msg = (!empty($card_err_msg)) ? $card_err_msg : esc_html__('Please enter correct card details.', 'ARMember');
}
} else {
$card_err_msg = $arm_global_settings->common_message['arm_credit_card_declined'];
$card_err_msg = (!empty($card_err_msg)) ? $card_err_msg : esc_html__('Your Card is declined.', 'ARMember');
}
if($arm_stripe_enable_debug_mode == '1')
{
$errors['message_error'] = $actual_error;
$ARMember->arm_write_response( " Stripe Event Data Log 1 == " . maybe_serialize($actual) );
}
else
{
$errors['message_error'] = $card_err_msg;
}
} catch (Stripe\Error\Stripe_InvalidRequest $e) {
$error_msg = $e->getJsonBody();
do_action('arm_payment_log_entry', 'stripe', 'Completed Payment Invalid Request Error', 'armember', $error_msg, $arm_debug_payment_log_id);
$actual_error = isset($error_msg['error']['message']) ? $error_msg['error']['message'] : '';
$arme_msg=(!empty($e->getMessage()))?$e->getMessage():'';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : $arme_msg;
$actualmsg = ($arm_stripe_enable_debug_mode == '1') ? $actual_error : $err_msg;
if($arm_stripe_enable_debug_mode == '1') {
$ARMember->arm_write_response( " Stripe Event Data Log 2 == " . maybe_serialize($error_msg) );
}
/* Invalid parameters were supplied to Stripe's API */
$errors['message_error'] = $actualmsg;
} catch (Stripe\Error\Stripe_Authentication $e) {
$error_msg = $e->getJsonBody();
do_action('arm_payment_log_entry', 'stripe', 'Completed Payment Authentication error', 'armember', $error_msg, $arm_debug_payment_log_id);
$actual_error = isset($error_msg['error']['message']) ? $error_msg['error']['message'] : '' ;
$arme_msg=(!empty($e->getMessage()))?$e->getMessage():'';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : $arme_msg;
$actualmsg = ($arm_stripe_enable_debug_mode == '1') ? $actual_error : $err_msg;
if($arm_stripe_enable_debug_mode == '1') {
$ARMember->arm_write_response( " Stripe Event Data Log 3 == " . maybe_serialize($error_msg) );
}
/* Authentication with Stripe's API failed */
/* (maybe you changed API keys recently) */
$errors['message_error'] = $actualmsg;
} catch (Stripe\Error\Stripe_ApiConnection $e) {
$error_msg = $e->getJsonBody();
do_action('arm_payment_log_entry', 'stripe', 'Completed payment connection error', 'armember', $error_msg, $arm_debug_payment_log_id);
$actual_error = isset($error_msg['error']['message']) ? $error_msg['error']['message'] : '';
$arme_msg=(!empty($e->getMessage()))?$e->getMessage():'';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : $arme_msg;
$actualmsg = ($arm_stripe_enable_debug_mode == '1') ? $actual_error : $err_msg;
if($arm_stripe_enable_debug_mode == '1') {
$ARMember->arm_write_response( " Stripe Event Data Log 4 == " . maybe_serialize($error_msg) );
}
/* Network communication with Stripe failed */
$errors['message_error'] = $actualmsg;
} catch (Exception $e) {
$error_msg = $e->getJsonBody();
do_action('arm_payment_log_entry', 'stripe', 'Completed payment network communication error', 'armember', $error_msg, $arm_debug_payment_log_id);
$actual_error = isset($error_msg['error']['message']) ? $error_msg['error']['message'] : '';
$arme_msg=(!empty($e->getMessage()))?$e->getMessage():'';
$actual_error = !empty($actual_error) ? $actual_error.' '.$arm_help_link : $arme_msg;
$actualmsg = ($arm_stripe_enable_debug_mode == '1') ? $actual_error : $err_msg;
if($arm_stripe_enable_debug_mode == '1') {
$ARMember->arm_write_response( " Stripe Event Data Log 5 == " . maybe_serialize($error_msg) );
}
/* Something else happened, completely unrelated to Stripe */
$errors['message_error'] = $actualmsg;
}
} else {
$errors['message_error'] = $err_msg;
}
if (!empty($errors)) {
return $errors;
} else {
if(isset($charge->status) && $charge->status=='incomplete')
{
$errors['message_error'] = esc_html__('Your card required Stripe 3D authentication. Recommend to use Stripe SCA Method', 'ARMember');
return $errors;
}
else {
do_action('arm_payment_log_entry', 'stripe', 'Payment 3D authentication error', 'armember', $charge, $arm_debug_payment_log_id);
return $charge;
}
}
}
function arm_StripeEventListener() {
global $wpdb, $ARMember, $arm_global_settings, $arm_member_forms, $arm_payment_gateways, $arm_subscription_plans, $arm_manage_communication, $arm_members_class, $arm_debug_payment_log_id;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
//$arm_stripe_amount_multiply = 100;
/**
* Need to set web-hook url like this (ie. http://sitename.com/?arm-listener=arm_stripe_api)
*/
if (isset($_REQUEST['arm-listener']) && in_array($_REQUEST['arm-listener'], array('arm_stripe_api', 'arm_stripe_notify', 'stripe'))) {
do_action('arm_payment_log_entry', 'stripe', 'webhook data', 'payment_gateway', $_REQUEST, $arm_debug_payment_log_id);
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
if (isset($all_payment_gateways['stripe']) && !empty($all_payment_gateways['stripe'])) {
if (file_exists(MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php")) {
require_once (MEMBERSHIP_DIR . "/lib/Stripe/vendor/autoload.php");
}
$secret_key = "";
$stripe_options = $all_payment_gateways['stripe'];
if ($stripe_options['stripe_payment_mode'] == 'live') {
$secret_key = $stripe_options['stripe_secret_key'];
} else {
$secret_key = $stripe_options['stripe_test_secret_key'];
}
Stripe\Stripe::setApiVersion($this->arm_stripe_api_version);
$errors = array();
/* Retrieve the request's body and parse it as JSON */
$body = @file_get_contents('php://input');
/* Grab the event information */
$event_json = json_decode($body);
do_action('arm_payment_log_entry', 'stripe', 'webhook requested data', 'payment_gateway', $event_json, $arm_debug_payment_log_id);
/* Retrieve the event from Stripe request body */
$event_id = !empty($event_json->id) ? $event_json->id : '';
if (!empty($event_id)) {
$payment_data = array();
try {
/* to verify this is a real event, we re-retrieve the event from Stripe */
//New API Request
$stripe_client_obj = new \Stripe\StripeClient($secret_key);
$event = $stripe_client_obj->events->retrieve($event_id);
$invoice = $event->data->object;
do_action('arm_payment_log_entry', 'stripe', 'webhook generated invoice data', 'payment_gateway', $invoice, $arm_debug_payment_log_id);
$customs = !empty($invoice->metadata->custom) ? explode('|', $invoice->metadata->custom) : array();
$entry_id = isset($customs[0]) ? $customs[0] : '' ;
$entry_email = isset($customs[1]) ? $customs[1] : '';
$subscription_id = $invoice->id; //Returns Subscription ID
$arm_transaction_id = !empty($invoice->latest_invoice) ? $invoice->latest_invoice : ''; //Returns Invoice ID
$arm_debug_log_data = array(
'custom_data' => $customs,
'entry_id' => $entry_id,
'entry_email' => $entry_email,
'subscription_id' => $subscription_id,
'transaction_id' => $arm_transaction_id,
'event_type' => $event->type,
);
do_action('arm_payment_log_entry', 'stripe', 'webhook submit data for entry', 'payment_gateway', $arm_debug_log_data, $arm_debug_payment_log_id);
if(!empty($arm_transaction_id) && (!empty($event->type) && $event->type != "customer.subscription.deleted"))
{
$payLog_data = $wpdb->get_row( $wpdb->prepare("SELECT `arm_user_id`, `arm_plan_id`, `arm_extra_vars` FROM `" . $ARMember->tbl_arm_payment_log . "` WHERE `arm_transaction_id`=%s AND `arm_payment_gateway`=%s AND arm_transaction_status != %s ORDER BY `arm_log_id` DESC",$arm_transaction_id,'stripe','failed'), ARRAY_A); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is a table name
do_action('arm_payment_log_entry', 'stripe', 'webhook existing transaction data', 'payment_gateway', $payLog_data, $arm_debug_payment_log_id);
if(!empty($payLog_data))
{
return;
}
}
$payLog_data = $wpdb->get_row( $wpdb->prepare("SELECT `arm_user_id`, `arm_plan_id`, `arm_extra_vars` FROM `" . $ARMember->tbl_arm_payment_log . "` WHERE (`arm_transaction_id`=%s OR `arm_token`=%s) AND `arm_payment_gateway`=%s ORDER BY `arm_log_id` DESC",$subscription_id,$subscription_id,'stripe'), ARRAY_A); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is a table name
do_action('arm_payment_log_entry', 'stripe', 'webhook existing subscription data', 'payment_gateway', $payLog_data, $arm_debug_payment_log_id);
if (!empty($subscription_id) && !empty($payLog_data)) {
$payment_log_user_id = $payLog_data['arm_user_id'];
if(empty($payment_log_user_id))
{
$get_user_id_by_subscription = $wpdb->get_row( $wpdb->prepare("SELECT * FROM ".$wpdb->usermeta." WHERE meta_value like %s",'%'.$subscription_id.'%'), ARRAY_A); //phpcs:ignore --Reason $wpdb->usermeta is a table name
if(!empty($get_user_id_by_subscription))
{
$payment_log_user_id = $get_user_id_by_subscription['user_id'];
}
}
$user_info = get_user_by('ID', $payment_log_user_id);
$entry_plan = $payLog_data['arm_plan_id'];
$extraVars = $payLog_data['arm_extra_vars'];
$tax_percentage = $tax_amount = 0;
if(isset($extraVars) && !empty($extraVars)){
$unserialized_extravars = maybe_unserialize($extraVars);
$tax_percentage = (isset($unserialized_extravars['tax_percentage']) && $unserialized_extravars['tax_percentage'] != '' )? $unserialized_extravars['tax_percentage'] : 0;
}
if (!empty($user_info)) {
$user_id = $user_info->ID;
$userPlan = get_user_meta($user_id, 'arm_user_plan_ids', true);
$userPlan = !empty($userPlan) ? $userPlan : array();
$defaultPlanData = $arm_subscription_plans->arm_default_plan_array();
$userPlanDatameta = get_user_meta($user_id, 'arm_user_plan_' . $entry_plan, true);
$userPlanDatameta = !empty($userPlanDatameta) ? $userPlanDatameta : array();
$planData = shortcode_atts($defaultPlanData, $userPlanDatameta);
$payment_cycle = $planData['arm_payment_cycle'];
$planDetail = $planData['arm_current_plan_detail'];
$tax_amount = 0;
$arm_subscription_plan_options = !empty($planDetail['arm_subscription_plan_options']) ? maybe_unserialize( $planDetail['arm_subscription_plan_options'] ) : array(); //phpcs:ignore
$arm_subscription_plan_options_payment_failed_action = !empty($arm_subscription_plan_options['payment_failed_action']) ? $arm_subscription_plan_options['payment_failed_action'] : 0;
if (!empty($planDetail)) {
$plan = new ARM_Plan(0);
$plan->init((object) $planDetail);
$plan_data = $plan->prepare_recurring_data($payment_cycle);
$plan_amount = $plan_data['amount'];
if($tax_percentage > 0 && $plan_amount != '') {
$tax_amount = ($tax_percentage*$plan_amount)/100;
$tax_amount = number_format((float)$tax_amount , $arm_currency_decimal, '.', '');
}
} else {
$plan = new ARM_Plan($entry_plan);
$recurring_data = $plan->prepare_recurring_data($payment_cycle);
$plan_amount = $recurring_data['amount'];
if($tax_percentage > 0 && $plan_amount != ''){
$tax_amount = ($tax_percentage*$plan_amount)/100;
$tax_amount = number_format((float)$tax_amount , $arm_currency_decimal, '.', '');
}
}
$payment_mode = $planData['arm_payment_mode'];
$user_subsdata = $planData['arm_stripe'];
if (in_array($entry_plan, $userPlan) || ( !empty($arm_subscription_plan_options_payment_failed_action) && in_array($arm_subscription_plan_options_payment_failed_action, $userPlan) )) {
$invoice_failure_msg = !empty($invoice->failure_message) ? $invoice->failure_message : '';
$invoice_failure_code = !empty($invoice->failure_code) ? $invoice->failure_code : '';
$extraVars = array(
'subs_id' => $invoice->customer,
'trans_id' => $invoice->id,
'error' => $invoice_failure_msg,
'date' => current_time('mysql'),
'message_type' => $event->type . '-' . $invoice_failure_code,
);
$extraVars['tax_percentage'] = $tax_percentage;
$extraVars['tax_amount'] = $tax_amount;
$arm_custom_event = '';
$arm_custom_event = apply_filters('arm_stripe_payment_gateway_check_event', $arm_custom_event, $event->type ,$invoice,$stripe_client_obj);
do_action('arm_payment_log_entry', 'stripe', 'Webhook Event', 'payment_gateway', "SubscriptionID=".$subscription_id." Event=".$event->type, $arm_debug_payment_log_id);
switch ($event->type) {
case 'invoice.payment_succeeded':
case 'customer.subscription.updated':
case $arm_custom_event:
$arm_token = $subscription_id;
$invoice = json_encode($invoice);
$invoice = json_decode($invoice, TRUE);
//$invoice = (array) $invoice;
$arm_subscription_field_name = $arm_token_field_name = "id";
$arm_transaction_id_field_name = "latest_invoice";
do_action('arm_payment_log_entry', 'stripe', 'webhook data get event type & entry_id', 'payment_gateway', $event->type." entry ID:".$entry_id, $arm_debug_payment_log_id);
if( 'customer.subscription.updated' == $event->type && empty($entry_id) ){
$customer_id = $event->data->object->customer;
$customer_data = $stripe_client_obj->customers->retrieve( $customer_id );
$customer_email = !empty( $customer_data->email ) ? $customer_data->email : '';
do_action('arm_payment_log_entry', 'stripe', 'webhook data get customer email', 'payment_gateway', $customer_email, $arm_debug_payment_log_id);
$getEntryId = $wpdb->get_row( $wpdb->prepare( "SELECT arm_entry_id FROM `". $ARMember->tbl_arm_entries . "` WHERE `arm_entry_email` = %s AND `arm_plan_id` = %d", $customer_email, $entry_plan ) ); //phpcs:ignore --Reason $ARMember->tbl_arm_entries is a table name
do_action('arm_payment_log_entry', 'stripe', 'webhook data get entry_id row from entries', 'payment_gateway', $getEntryId, $arm_debug_payment_log_id);
if( !empty( $getEntryId->arm_entry_id ) ){
$entry_id = $getEntryId->arm_entry_id;
}
}
$arm_webhook_save_membership_data = array();
$arm_webhook_save_membership_data = apply_filters('arm_modify_payment_webhook_data', $arm_webhook_save_membership_data, $invoice, 'stripe', $arm_token, $arm_transaction_id, $entry_id, $arm_token, $arm_subscription_field_name, $arm_token_field_name, $arm_transaction_id_field_name);
break;
case 'customer.subscription.deleted':
case 'subscription_schedule.canceled':
$plan_cycle = isset($planData['arm_payment_cycle']) ? $planData['arm_payment_cycle'] : '';
$paly_cycle_data = $plan->prepare_recurring_data($plan_cycle);
//Check Subscription ID in usermeta and then after cancel it.
$arm_debug_log_data = array(
'cancel_rec_time' => $paly_cycle_data['rec_time'],
'cancel_plan_action' => $plan->options['cancel_plan_action'],
'entry_plan' => $entry_plan,
'user_id' => $user_id,
);
if($plan->options['cancel_plan_action'] != "on_expire")
{
$arm_subscription_plans->arm_add_membership_history($user_id, $entry_plan, 'cancel_subscription');
//do_action('arm_cancel_subscription', $user_id, $entry_plan);
$arm_subscription_plans->arm_clear_user_plan_detail($user_id, $entry_plan);
$cancel_plan_act = isset($plan->options['cancel_action']) ? $plan->options['cancel_action'] : 'block';
if ($arm_subscription_plans->isPlanExist($cancel_plan_act)) {
$arm_members_class->arm_new_plan_assigned_by_system($cancel_plan_act, $entry_plan, $user_id);
}
$arm_manage_communication->arm_user_plan_status_action_mail(array('plan_id' => $entry_plan, 'user_id' => $user_id, 'action' => 'on_cancel_subscription'));
$payment_log_id = self::arm_store_stripe_log($invoice, $entry_plan, $user_id, $entry_email, $extraVars, $payment_mode);
}
else if($plan->options['cancel_plan_action'] == "on_expire")
{
$planData['arm_cencelled_plan'] = 'yes';
update_user_meta($user_id, 'arm_user_plan_' . $entry_plan, $planData);
}
do_action('arm_payment_log_entry', 'stripe', 'webhook cancel subscription', 'payment_gateway', $arm_debug_log_data, $arm_debug_payment_log_id);
break;
case 'invoice.payment_failed':
case 'order.payment_failed':
delete_transient("arm_stripe_trans".$arm_transaction_id);
$arm_debug_log_data = array(
'plan_id' => $entry_plan,
'user_id' => $user_id,
);
do_action('arm_payment_log_entry', 'stripe', 'webhook order payment field', 'payment_gateway', $arm_debug_log_data, $arm_debug_payment_log_id);
$arm_transaction_id = !empty($invoice->id) ? $invoice->id : '';
$arm_success_payment_record = $wpdb->get_row( $wpdb->prepare("SELECT arm_log_id FROM `" . $ARMember->tbl_arm_payment_log . "` WHERE `arm_transaction_id`=%s AND `arm_transaction_id`!=%s AND `arm_payment_gateway`=%s AND arm_transaction_status = %s ORDER BY `arm_log_id` DESC",$arm_transaction_id,'','stripe','success'), ARRAY_A); //phpcs:ignore --Reason $ARMember->tbl_arm_payment_log is table name
if(!empty($arm_success_payment_record)){
$arm_current_date_time = current_time('timestamp');
$arm_user_meta_data = get_user_meta($user_id, 'arm_user_plan_'.$entry_plan, true);
if(!empty($arm_user_meta_data)){
$arm_user_meta_data['arm_next_due_payment'] = $arm_current_date_time;
$arm_user_meta_data['arm_completed_recurring'] = $arm_user_meta_data['arm_completed_recurring']-1;
$arm_is_user_in_grace = isset($arm_user_meta_data['arm_is_user_in_grace']) ? $arm_user_meta_data['arm_is_user_in_grace'] : 0;
//$arm_grace_period_end = isset($arm_user_meta_data['arm_grace_period_end']) ? $arm_user_meta_data['arm_grace_period_end'] : '';
/*
if($arm_is_user_in_grace>0)
{
$arm_user_meta_data['arm_grace_period_end'] = $arm_current_date_time;
}
*/
update_user_meta($user_id, 'arm_user_plan_'.$entry_plan, $arm_user_meta_data);
}
$arm_new_transaction_id = $arm_transaction_id." - ".esc_html__('Failed', 'ARMember');
$wpdb->update($ARMember->tbl_arm_payment_log, array('arm_transaction_status' => 'failed', 'arm_transaction_id' => $arm_new_transaction_id), array('arm_log_id' => $arm_success_payment_record['arm_log_id']));
}
$arm_subscription_plans->arm_user_plan_status_action(array('plan_id' => $entry_plan, 'user_id' => $user_id, 'action' => 'failed_payment'), true);
$invoice->status = 'failed';
$arm_manage_communication->arm_user_plan_status_action_mail(array('plan_id' => $entry_plan, 'user_id' => $user_id, 'action' => 'failed_payment'));
//$payment_log_id = self::arm_store_stripe_log($invoice, $entry_plan, $user_id, $entry_email, $extraVars, $payment_mode);
do_action('arm_after_recurring_payment_failed_outside', $user_id, $entry_plan, 'stripe', $payment_mode, $user_subsdata);
break;
default:
do_action('arm_handle_stripe_unknown_error_from_outside', $user_id, $entry_plan, $extraVars['message_type']);
break;
}
}
}
}
$arm_stripe_event_succeed = apply_filters( 'arm_stripe_checkout_event_succeed', $event,$invoice ,$stripe_client_obj);
} catch (Exception $e) {
do_action('arm_payment_log_entry', 'stripe', 'error in webhook data verification', 'payment_gateway', $e->getMessage(), $arm_debug_payment_log_id);
}
}
}
echo "200 OK";
exit;
}
return;
}
function arm_store_stripe_log($stripe_response = '', $plan_id = 0, $user_id = 0, $payer_email = '', $extraVars = array(), $payment_mode = '', $coupon_details = array()) {
global $wpdb, $ARMember, $arm_global_settings, $arm_member_forms, $arm_payment_gateways,$arm_membership_setup, $arm_debug_payment_log_id;
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
$tax_display_type= !empty($general_settings['arm_tax_include_exclude_flag']) ? $general_settings['arm_tax_include_exclude_flag'] : 0;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
$arm_debug_log_data = array(
'stripe_response' => $stripe_response,
'plan_id' => $plan_id,
'user_id' => $user_id,
'payer_email' => $payer_email,
'extraVars' => $extraVars,
'payment_mode' => $payment_mode,
'coupon_details' => $coupon_details,
);
do_action('arm_payment_log_entry', 'stripe', 'store payment args', 'armember', $arm_debug_log_data, $arm_debug_payment_log_id);
if (!empty($stripe_response)) {
$custom_var = !empty($stripe_response->metadata->custom) ? $stripe_response->metadata->custom : '';
$customs = explode('|', $custom_var);
$entry_id = $customs[0];
$entry_email = $customs[1];
$form_id = $customs[2];
$arm_payment_type = $customs[3];
$tax_percentage = isset($stripe_response->metadata->tax_percentage) ? $stripe_response->metadata->tax_percentage : 0;
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
$arm_transaction_id = $stripe_response->id;
$arm_is_trial = 0;
$coupon_code = '';
$coupon_discount = 0;
$coupon_discount_type = '';
$arm_coupon_on_each_subscriptions = '0';
if (isset($coupon_details) && !empty($coupon_details)) {
$coupon_code = $coupon_details['coupon_code'];
$coupon_discount = $coupon_details['arm_coupon_discount'];
$coupon_discount_type = $coupon_details['arm_coupon_discount_type'];
$arm_coupon_on_each_subscriptions = isset($coupon_details['arm_coupon_on_each_subscriptions']) ? $coupon_details['arm_coupon_on_each_subscriptions'] : '0';
}
if (!empty($stripe_response->plan) && $stripe_response->object == 'subscription') {
$amount = !empty($stripe_response->plan->amount_decimal) ? $stripe_response->plan->amount_decimal : $stripe_response->plan->amount;
$currency = strtoupper($stripe_response->plan->currency);
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $amount / $arm_stripe_amount_multiply; /* amount comes in as amount in cents, so we need to convert to dollars */
}
if($extraVars['arm_is_trial'] && isset($extraVars['trial']['amount']))
{
$amount = $extraVars['trial']['amount'];
$arm_is_trial = 1;
}
$arm_payment_date = "";
if(!empty($stripe_response->current_period_start))
{
$arm_payment_date = date('Y-m-d H:i:s', $stripe_response->current_period_start);
}
//$arm_token = $stripe_response->customer;
$extraVars['arm_stripe_customer_id'] = !empty($stripe_response->customer) ? $stripe_response->customer : '';
$arm_token = $stripe_response->id;
$arm_transaction_id = $stripe_response->latest_invoice;
$arm_payment_type = 'subscription';
if( isset($stripe_response->discount) && $stripe_response->discount != null) {
if( isset($stripe_response->discount->coupon)) {
if($stripe_response->discount->coupon->amount_off != null && $stripe_response->discount->coupon->amount_off != 'null') {
$amount_off = $stripe_response->discount->coupon->amount_off;
if($amount_off > 0) {
if (!in_array($currency, $zero_demial_currencies)) {
$amount_off = $amount_off/$arm_stripe_amount_multiply;
}
$amount = $amount - $amount_off;
}
}
else if($stripe_response->discount->coupon->percent_off != null && $stripe_response->discount->coupon->percent_off != 'null') {
$percent_off = $stripe_response->discount->coupon->percent_off;
if($percent_off > 0) {
$coupon_amount = ($amount*$percent_off)/100;
$coupon_amount = number_format((float)$coupon_amount, $arm_currency_decimal, '.', '');
$amount = $amount - $coupon_amount;
}
}
}
}
if((empty($stripe_response->discount) || $stripe_response->discount == null || $stripe_response->discount == 'null') && !empty($coupon_code) && !empty($coupon_discount) && !empty($coupon_discount_type))
{
if($coupon_discount_type == '%'){
$amount = $amount - (($amount * $coupon_discount)/100);
}else{
$amount = $amount - $coupon_discount;
}
}
if($tax_percentage > 0) {
if( empty( $tax_display_type ) )
{
$extraVars['arm_tax_include_exclude_flag'] = 0;
$tax_amount = ($amount*$tax_percentage)/100;
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
$amount = $tax_amount + $amount;
}
else
{
$extraVars['arm_tax_include_exclude_flag'] = 1;
$tax_amount = $arm_membership_setup->arm_calculate_included_tax($amount,$tax_percentage);
$tax_amount = number_format((float)$tax_amount, $arm_currency_decimal, '.', '');
}
$extraVars['tax_amount'] = $tax_amount;
}
} else if(!empty($stripe_response->object) && $stripe_response->object == 'charge' ) {
$currency = strtoupper($stripe_response->currency);
$amount = $stripe_response->amount;
if (!in_array($currency, $zero_demial_currencies)) {
$amount = $stripe_response->amount / $arm_stripe_amount_multiply;
}
/* amount comes in as amount in cents, so we need to convert to dollars */
if( !empty($stripe_response->created) ) {
$arm_payment_date = date('Y-m-d H:i:s', $stripe_response->created);
}
else {
$arm_payment_date = current_time( 'mysql' );
}
$arm_token = isset($stripe_response->source->id) ? $stripe_response->source->id : '';
$arm_payment_type = 'one_time';
}
$payment_log_id = 0;
if(!empty($stripe_response->object) && ($stripe_response->object == 'charge' || $stripe_response->object == 'subscription')){
if($amount < 0) {
$amount = 0;
}
$paid_amount = !empty($stripe_response->amount) ? $stripe_response->amount : 0;
$currency = !empty($stripe_response->currency) ? strtoupper($stripe_response->currency) : '';
if($stripe_response->object == 'subscription')
{
if(empty($paid_amount) )
{
$paid_amount = $amount * $arm_stripe_amount_multiply;
if(in_array($currency, $zero_demial_currencies))
{
$paid_amount = $amount;
}
}
$currency = strtoupper($stripe_response->plan->currency);
}
if (!empty($currency) && !in_array($currency, $zero_demial_currencies)) {
$paid_amount = $paid_amount / $arm_stripe_amount_multiply; /* amount comes in as amount in cents, so we need to convert to dollars */
}
$arm_first_name='';
$arm_last_name='';
if($user_id){
$user_detail = get_userdata($user_id);
$arm_first_name=$user_detail->first_name;
$arm_last_name=$user_detail->last_name;
}
global $arm_membership_setup;
$arm_payment_status = "success";
if(!empty($stripe_response->status))
{
if($stripe_response->status == "succeeded"){
$arm_payment_status = "success";
} else {
$arm_payment_status = $stripe_response->status;
}
}
$stripe_response = json_encode($stripe_response);
$stripe_response = json_decode($stripe_response, TRUE);
//$stripe_response = (array)$stripe_response;
$stripe_response['arm_payment_mode'] = $payment_mode;
$stripe_response['arm_payer_email'] = $entry_email;
$stripe_response['arm_payment_gateway_trans_id'] = $arm_transaction_id;
$stripe_response['arm_payment_type'] = $arm_payment_type;
$stripe_response['payment_type'] = $arm_payment_type;
$stripe_response['arm_payment_gateway_token'] = $arm_token;
$stripe_response['payment_status'] = $arm_payment_status;
$stripe_response['payment_amount'] = $paid_amount;
$stripe_response['currency'] = $currency;
$stripe_response['arm_coupon_code'] = $coupon_code;
$stripe_response['arm_coupon_discount'] = $coupon_discount;
$stripe_response['arm_coupon_discount_type'] = $coupon_discount_type;
$stripe_response['arm_is_trial'] = isset($extraVars['arm_is_trial']) ? $extraVars['arm_is_trial'] : '0';
$stripe_response['arm_coupon_on_each_subscriptions'] = $arm_coupon_on_each_subscriptions;
$arm_debug_log_data = array(
'stripe_inserted_log_data' => $stripe_response,
);
do_action('arm_payment_log_entry', 'stripe', 'store save payment log data', 'armember', $arm_debug_log_data, $arm_debug_payment_log_id);
$payment_log_id = $arm_membership_setup->arm_store_payment_log($stripe_response, $user_id, $plan_id, $extraVars, 1, 'stripe');
}
return $payment_log_id;
}
return false;
}
function arm_stripe_get_stripe_plan($arm_subscribe_plan_id, $arm_subscribe_plan_cycles = array())
{
global $ARMember, $arm_global_settings, $arm_payment_gateways, $arm_debug_payment_log_id, $arm_global_settings;
$currency = $arm_payment_gateways->arm_get_global_currency();
$general_settings = isset($arm_global_settings->global_settings) ? $arm_global_settings->global_settings : array();
$arm_currency_decimal = isset($general_settings['arm_currency_decimal_digit']) ? $general_settings['arm_currency_decimal_digit'] : 2;
//$arm_stripe_amount_multiply = str_pad(1, $arm_currency_decimal, 0, STR_PAD_RIGHT);
$arm_stripe_amount_multiply = 100;
$arm_debug_log_data = array(
'arm_subscription_plan_id' => $arm_subscribe_plan_id,
'arm_subscribe_plan_cycles' => $arm_subscribe_plan_cycles,
);
do_action('arm_payment_log_entry', 'stripe', 'get stripe plan args', 'armember', $arm_debug_log_data, $arm_debug_payment_log_id);
$arm_stripe_api_url = "https://api.stripe.com/v1/";
$arm_stripe_product_plan_id = '';
$arm_stripe_product_plan_arr = array();
if(empty($arm_subscribe_plan_cycles))
{
$arm_subscribe_plan_data = new ARM_Plan($arm_subscribe_plan_id);
$arm_subscribe_plan_cycles = $arm_subscribe_plan_data->options['payment_cycles'];
}
$zero_demial_currencies = $arm_payment_gateways->arm_stripe_zero_decimal_currency_array();
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
$stripe_options = !empty($all_payment_gateways['stripe']) ? $all_payment_gateways['stripe'] : array();
if(!empty($stripe_options) && !is_array($stripe_options))
{
return $arm_stripe_product_plan_arr;
}
$arm_stripe_secret_key = "";
if( "live" == $stripe_options['stripe_payment_mode'] )
{
$arm_stripe_secret_key = $stripe_options['stripe_secret_key'];
}
else
{
$arm_stripe_secret_key = $stripe_options['stripe_test_secret_key'];
}
foreach($arm_subscribe_plan_cycles as $arm_subscribe_plan_keys => $arm_subscribe_plan_vals)
{
$arm_stripe_product_plan_id = '';
$arm_subscribe_plan_amount = str_replace(',', '', $arm_subscribe_plan_vals['cycle_amount']);
$arm_subscribe_plan_interval = $arm_subscribe_plan_vals['billing_type'];
$arm_subscribe_plan_interval_duration = $arm_subscribe_plan_vals['billing_cycle'];
$arm_subscribe_plan_currency = $currency;
if($arm_subscribe_plan_interval == 'D')
{
$arm_subscribe_plan_interval = "day";
}
else if($arm_subscribe_plan_interval == 'M')
{
$arm_subscribe_plan_interval = "month";
}
else if($arm_subscribe_plan_interval == 'Y')
{
$arm_subscribe_plan_interval = "year";
}
$arm_subscribe_plan_details = array(
'arm_subs_plan_amount' => $arm_subscribe_plan_amount,
'arm_subs_plan_interval' => $arm_subscribe_plan_interval,
'arm_subs_plan_interval_duration' => $arm_subscribe_plan_interval_duration,
'arm_subs_plan_currency' => $arm_subscribe_plan_currency
);
if(!empty($arm_subscribe_plan_details))
{
$arm_subscribe_plan_amount = $arm_subscribe_plan_details['arm_subs_plan_amount'];
if (!empty($arm_subscribe_plan_amount)) {
if (!in_array(strtoupper($currency), $zero_demial_currencies)) {
$arm_subscribe_plan_amount = number_format(str_replace(',', '', $arm_subscribe_plan_amount), $arm_currency_decimal, '.', '');
$arm_subscribe_plan_amount = $arm_subscribe_plan_amount * $arm_stripe_amount_multiply;
}
else{
$arm_subscribe_plan_amount = str_replace(",", "", $arm_subscribe_plan_amount);
$arm_subscribe_plan_amount = (int)$arm_subscribe_plan_amount;
}
} else {
$amount = "0.00";
}
$arm_subscribe_plan_interval = $arm_subscribe_plan_details['arm_subs_plan_interval'];
$arm_subscribe_plan_interval_duration = $arm_subscribe_plan_details['arm_subs_plan_interval_duration'];
$arm_subscribe_plan_currency = $arm_subscribe_plan_details['arm_subs_plan_currency'];
$arm_get_stripe_plan_list_url = $arm_stripe_api_url."plans";
$arm_stripe_plan_headers = array(
'Authorization' => 'Bearer '.$arm_stripe_secret_key
);
$arm_stripe_plan_data = array('method' => 'GET', 'headers' => $arm_stripe_plan_headers, 'timeout' => '10');
$arm_get_stripe_plan_list_response = wp_remote_request($arm_get_stripe_plan_list_url, $arm_stripe_plan_data);
if(!is_wp_error($arm_get_stripe_plan_list_response))
{
$arm_stripe_plan_list_body = wp_remote_retrieve_body($arm_get_stripe_plan_list_response);
$arm_stripe_plan_list_data = json_decode($arm_stripe_plan_list_body, true);
$arm_stripeget_plan_id ='';
if(!empty($arm_stripe_plan_list_data['data']))
{
foreach($arm_stripe_plan_list_data['data'] as $arm_stripe_plan_key => $arm_stripe_plan_val)
{
$arm_stripeget_plan_id = '';
$arm_stripe_exist_plan_amount = $arm_stripe_plan_val['amount'];
$arm_stripe_exist_plan_interval = $arm_stripe_plan_val['interval'];
$arm_stripe_exist_plan_interval_duration = $arm_stripe_plan_val['interval_count'];
$arm_stripe_exist_plan_currency = $arm_stripe_plan_val['currency'];
$arm_stripe_exist_plan_status = $arm_stripe_plan_val['active'];
if($arm_stripe_exist_plan_amount == $arm_subscribe_plan_amount && $arm_stripe_exist_plan_interval == $arm_subscribe_plan_interval && $arm_subscribe_plan_interval_duration == $arm_stripe_exist_plan_interval_duration && $arm_subscribe_plan_currency == strtoupper($arm_stripe_exist_plan_currency) && ($arm_stripe_exist_plan_status == true || $arm_stripe_exist_plan_status == 'true'))
{
$arm_stripeget_plan_id =$arm_stripe_plan_val['id'];
$arm_stripe_product_plan_id = $arm_stripe_plan_val['product'];
break;
}
}
}
//Condition for check that if plan exist or not at stripe side.
if(!empty($arm_stripeget_plan_id))
{
$arm_stripe_product_plan_id = $arm_stripeget_plan_id;
}
else
{
//Code For Create Product and Plan
$arm_stripe_product_id = "";
$arm_stripe_product_name = 'prod_'.uniqid();
// Create Plan From Product
$arm_stripe_plan_create_url = $arm_stripe_api_url."plans";
$arm_stripe_plan_body_data = array(
'currency' => $arm_subscribe_plan_currency,
'interval' => $arm_subscribe_plan_interval,
'interval_count' => $arm_subscribe_plan_interval_duration,
'product' => array(
'name' => $arm_stripe_product_name,
),
);
if (!in_array(strtoupper($currency), $zero_demial_currencies)) {
$arm_stripe_plan_body_data['amount_decimal'] = $arm_subscribe_plan_amount;
}else{
$arm_stripe_plan_body_data['amount'] = (int)(str_replace(',', '', $arm_subscribe_plan_amount));
}
$arm_stripe_plan_data = array(
'method' => 'POST',
'headers' => $arm_stripe_plan_headers,
'body' => $arm_stripe_plan_body_data
);
$arm_create_stripe_plan_response = wp_remote_request($arm_stripe_plan_create_url, $arm_stripe_plan_data);
if(!is_wp_error($arm_create_stripe_plan_response))
{
$arm_stripe_created_plan_body = wp_remote_retrieve_body($arm_create_stripe_plan_response);
$arm_stripe_created_plan_body = json_decode($arm_stripe_created_plan_body, true);
$arm_stripe_product_plan_id = !empty($arm_stripe_created_plan_body['product']) ? $arm_stripe_created_plan_body['product'] : '';
$arm_stripe_product_plan_id = !empty($arm_stripe_created_plan_body['id']) ? $arm_stripe_created_plan_body['id'] : '';
}
}
}
else
{
$ARMember->arm_write_response("Reputelog Plan List Response Error => ".maybe_serialize($arm_get_stripe_plan_list_response->get_error_message()));
}
}
if(!empty($arm_stripe_product_plan_id))
{
array_push($arm_stripe_product_plan_arr, $arm_stripe_product_plan_id);
}
}
do_action('arm_payment_log_entry', 'stripe', 'get stripe plan return data', 'armember', $arm_stripe_product_plan_arr, $arm_debug_payment_log_id);
return $arm_stripe_product_plan_arr;
}
function arm_update_stripe_configuration_setup($update_plan_id, $subscription_plans_data)
{
global $wp, $wpdb, $arm_slugs, $ARMember, $arm_global_settings, $arm_access_rules;
// Code For Update plan setup configuration Data.
$arm_plan_recurring = new ARM_Plan($update_plan_id);
if($arm_plan_recurring->is_recurring())
{
//Fetch Plan Cycle Keys
$arm_stripe_plan_keys = array();
$plan_options = maybe_unserialize($subscription_plans_data['arm_subscription_plan_options']);
$arm_plan_keys = $plan_options['payment_cycles'];
foreach($arm_plan_keys as $arm_keys => $arm_values)
{
array_push($arm_stripe_plan_keys, $arm_values['cycle_key']);
}
//Table name variable
$arm_membership_setup_tbl = $ARMember->tbl_arm_membership_setup;
//Fetch New Stripe Plan Array from Plan Id
$arm_fetch_new_stripe_plan_arr = $this->arm_stripe_get_stripe_plan($update_plan_id);
$arm_plan_setup_data = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$arm_membership_setup_tbl} WHERE arm_status = %d", 1)); //phpcs:ignore --Reason $arm_membership_setup_tbl is a table name
foreach($arm_plan_setup_data as $arm_setup_data_key => $arm_setup_data_val)
{
$arm_setup_modules_data = maybe_unserialize($arm_setup_data_val->arm_setup_modules);
if((!empty($arm_setup_modules_data['modules']['plans']) && !empty($arm_setup_modules_data['modules']['gateways']) && !empty($arm_setup_modules_data['modules']['payment_mode']['stripe'])) && (in_array($update_plan_id, $arm_setup_modules_data['modules']['plans']) && in_array('stripe', $arm_setup_modules_data['modules']['gateways']) && $arm_setup_modules_data['modules']['payment_mode']['stripe'] != "manual_subscription"))
{
if(!empty($arm_setup_modules_data['modules']['stripe_plans'][$update_plan_id]))
{
$arm_new_setup_data = array();
if(count($arm_plan_keys)>0)
{
for($arm_new_plans = 0;$arm_new_plans < count($arm_plan_keys);$arm_new_plans++)
{
//Modify plan cycle data with stripe plan id.
if(!empty($arm_fetch_new_stripe_plan_arr[$arm_new_plans]))
{
$arm_new_setup_data[$arm_stripe_plan_keys[$arm_new_plans]] = $arm_fetch_new_stripe_plan_arr[$arm_new_plans];
}
}
$arm_setup_modules_data['modules']['stripe_plans'][$update_plan_id] = $arm_new_setup_data;
$arm_setup_new_modules_data = maybe_serialize($arm_setup_modules_data);
$arm_setup_modules_data_update = $wpdb->query($wpdb->prepare("UPDATE {$arm_membership_setup_tbl} SET `arm_setup_modules` = '{$arm_setup_new_modules_data}' WHERE arm_setup_id = %d", $arm_setup_data_val->arm_setup_id)); //phpcs:ignore --Reason $arm_membership_setup_tbl is a table name
}
}
}
}
}
}
function arm_retrieve_next_recurring_date_from_subs_id($arm_subscription_id){
global $ARMember, $arm_payment_gateways;
$arm_stripe_next_recurring_date = "";
if(!empty($arm_subscription_id)){
$all_payment_gateways = $arm_payment_gateways->arm_get_active_payment_gateways();
$stripe_options = $all_payment_gateways['stripe'];
$arm_stripe_secret_key = "";
if ($stripe_options['stripe_payment_mode'] == 'live') {
$arm_stripe_secret_key = $stripe_options['stripe_secret_key'];
} else {
$arm_stripe_secret_key = $stripe_options['stripe_test_secret_key'];
}
$arm_subscription_url = "https://api.stripe.com/v1/subscriptions/".$arm_subscription_id;
$arm_subs_data = array(
'headers' => array(
'Authorization' => 'Bearer '.$arm_stripe_secret_key
),
);
$arm_stripe_subs_response = wp_remote_get($arm_subscription_url, $arm_subs_data);
if(!empty($arm_stripe_subs_response)){
$arm_stripe_subs_response = json_decode($arm_stripe_subs_response['body']);
$arm_stripe_next_recurring_date = $arm_stripe_subs_response->current_period_end;
}
}
return $arm_stripe_next_recurring_date;
}
}
}
global $arm_stripe;
$arm_stripe = new ARM_Stripe();