WordPress.org

Making WordPress.org


Ignore:
Timestamp:
09/28/2016 12:52:27 PM (3 years ago)
Author:
kovshenin
Message:

WordCamp.org: Convert spaces to tabs, and fix an array key.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordcamp.org/public_html/wp-content/plugins/wordcamp-payments/includes/sponsor-payment-stripe.php

    r4155 r4156  
    2222function render() {
    2323
    24     // Make sure we have Stripe keys and an HMAC.
    25     $keys = _get_keys();
    26     if ( empty( $keys['publishable'] ) || empty( $keys['secret'] ) || empty( $keys['wcorg_hmac'] ) )
    27         return;
    28 
    29     // Make sure WordCamp_Budgets is available.
    30     require_once( __DIR__ . '/wordcamp-budgets.php' );
    31 
    32     $data = array(
    33         'keys' => $keys,
    34         'step' => STEP_SELECT_INVOICE,
    35         'wordcamps' => _get_wordcamps(),
    36         'currencies' => \WordCamp_Budgets::get_currencies(),
    37         'errors' => array(),
    38     );
    39 
    40     if ( ! empty( $_POST['sponsor_payment_submit'] ) ) {
    41         _handle_post_data( $data ); // $data passed by ref.
    42     }
    43 
    44     wp_enqueue_style( 'wcb-sponsor-payments', plugins_url( 'css/sponsor-payments.css', __DIR__ ), array(), CSS_VERSION );
    45     require_once( dirname( __DIR__ ) . '/views/sponsor-payment/main.php' );
     24    // Make sure we have Stripe keys and an HMAC.
     25    $keys = _get_keys();
     26    if ( empty( $keys['publishable'] ) || empty( $keys['secret'] ) || empty( $keys['hmac_key'] ) )
     27        return;
     28
     29    // Make sure WordCamp_Budgets is available.
     30    require_once( __DIR__ . '/wordcamp-budgets.php' );
     31
     32    $data = array(
     33        'keys' => $keys,
     34        'step' => STEP_SELECT_INVOICE,
     35        'wordcamps' => _get_wordcamps(),
     36        'currencies' => \WordCamp_Budgets::get_currencies(),
     37        'errors' => array(),
     38    );
     39
     40    if ( ! empty( $_POST['sponsor_payment_submit'] ) ) {
     41        _handle_post_data( $data ); // $data passed by ref.
     42    }
     43
     44    wp_enqueue_style( 'wcb-sponsor-payments', plugins_url( 'css/sponsor-payments.css', __DIR__ ), array(), CSS_VERSION );
     45    require_once( dirname( __DIR__ ) . '/views/sponsor-payment/main.php' );
    4646}
    4747
     
    5252 */
    5353function _get_keys() {
    54     return apply_filters( 'wcorg_sponsor_payment_stripe', array(
    55         // Stripe API credentials.
    56         'publishable' => '',
    57         'secret' => '',
    58 
    59         // An HMAC key used to sign some data in between requests.
    60         'hmac_key' => '',
    61     ) );
     54    return apply_filters( 'wcorg_sponsor_payment_stripe', array(
     55        // Stripe API credentials.
     56        'publishable' => '',
     57        'secret' => '',
     58
     59        // An HMAC key used to sign some data in between requests.
     60        'hmac_key' => '',
     61    ) );
    6262}
    6363
     
    6868 */
    6969function _get_wordcamps() {
    70     static $wordcamps;
    71 
    72     if ( ! isset( $wordcamps ) ) {
    73         $wordcamps = get_posts( array(
    74             'post_type' => 'wordcamp',
    75             'post_status' => \WordCamp_Loader::get_public_post_statuses(),
    76             'posts_per_page' => -1,
    77             'orderby'        => 'title',
    78             'order'          => 'asc',
    79             'meta_query'    => array( array(
    80                 'key'        => 'Start Date (YYYY-mm-dd)',
    81                 'value'      => strtotime( '-14 days' ),
    82                 'compare'    => '>'
    83             ) )
    84         ) );
    85     }
    86 
    87     return $wordcamps;
     70    static $wordcamps;
     71
     72    if ( ! isset( $wordcamps ) ) {
     73        $wordcamps = get_posts( array(
     74            'post_type' => 'wordcamp',
     75            'post_status' => \WordCamp_Loader::get_public_post_statuses(),
     76            'posts_per_page' => -1,
     77            'orderby'       => 'title',
     78            'order'       => 'asc',
     79            'meta_query'    => array( array(
     80                'key'       => 'Start Date (YYYY-mm-dd)',
     81                'value'   => strtotime( '-14 days' ),
     82                'compare'   => '>'
     83            ) )
     84        ) );
     85    }
     86
     87    return $wordcamps;
    8888}
    8989
     
    9898 */
    9999function _handle_post_data( &$data ) {
    100     $step = isset( $_POST['step'] ) ? absint( $_POST['step'] ) : STEP_SELECT_INVOICE;
    101 
    102     switch ( $_POST['step'] ) {
    103         case STEP_SELECT_INVOICE:
    104             // An invoice, event, currency and amount have been selected.
    105 
    106             if ( empty( $_POST['currency'] ) ) {
    107                 $data['errors'][] = 'Please select a currency.';
    108                 return;
    109             }
    110 
    111             $currency = $_POST['currency'];
    112             if ( ! array_key_exists( $currency, $data['currencies'] ) or strpos( $currency, 'null' ) === 0 ) {
    113                 $data['errors'][] = 'Invalid currency.';
    114                 return;
    115             }
    116 
    117             if ( empty( $_POST['amount'] ) ) {
    118                 $data['errors'][] = 'Please enter a payment amount.';
    119                 return;
    120             }
    121 
    122             $amount = round( floatval( $_POST['amount'] ), 2 );
    123             if ( $amount < 1.00 ) {
    124                 $data['errors'][] = 'Amount can not be less than 1.00.';
    125                 return;
    126             }
    127 
    128             if ( empty( $_POST['wordcamp_id'] ) ) {
    129                 $data['errors'][] = 'Please select an event.';
    130                 return;
    131             }
    132 
    133             // Make sure the selected WordCamp is valid.
    134             $wordcamp_id = absint( $_POST['wordcamp_id'] );
    135             $valid_ids = wp_list_pluck( _get_wordcamps(), 'ID' );
    136 
    137             if ( ! in_array( $wordcamp_id, $valid_ids ) ) {
    138                 $data['errors'][] = 'Please select a valid event.';
    139                 return;
    140             }
    141 
    142             if ( empty( $_POST['invoice_id'] ) ) {
    143                 $data['errors'][] = 'Please provide a valid invoice ID.';
    144                 return;
    145             }
    146 
    147             $invoice_id = absint( $_POST['invoice_id'] );
    148             $wordcamp_site_id = get_wordcamp_site_id( get_post( $wordcamp_id ) );
    149             if ( empty( $wordcamp_site_id ) ) {
    150                 $data['errors'][] = 'Could not find a site for this WordCamp.';
    151                 return;
    152             }
    153 
    154             // Next step is to collect the card details via Stripe.
    155             $data['step'] = STEP_PAYMENT_DETAILS;
    156             $data['payment'] = array(
    157                 'currency' => $currency,
    158                 'amount' => $amount,
    159                 'wordcamp_id' => $wordcamp_id,
    160                 'invoice_id' => $invoice_id,
    161             );
    162 
    163             // Passed through to the charge step.
    164             $data['payment_data_json'] = json_encode( $data['payment'] );
    165             $data['payment_data_signature'] = hash_hmac( 'sha256', $data['payment_data_json'], $data['keys']['hmac_key'] );
    166 
    167             // Add a WordCamp object for convenience.
    168             $data['payment']['wordcamp_obj'] = get_post( $wordcamp_id );
    169             break;
    170 
    171         case STEP_PAYMENT_DETAILS:
    172             // The card details have been entered and Stripe has submitted our form.
    173 
    174             if ( empty( $_POST['stripeToken'] ) ) {
    175                 $data['errors'][] = 'Stripe token not found.';
    176                 return;
    177             }
    178 
    179             // Make sure our data hasn't been altered.
    180             $payment_data_str = wp_unslash( $_POST['payment_data_json'] );
    181             $payment_data = json_decode( $payment_data_str, true );
    182             if ( ! hash_equals( hash_hmac( 'sha256', $payment_data_str, $data['keys']['hmac_key'] ), $_POST['payment_data_signature'] ) ) {
    183                 $data['errors'][] = 'Could not verify payload signature.';
    184                 return;
    185             }
    186 
    187             $wordcamp_obj = get_post( $payment_data['wordcamp_id'] );
    188 
    189             require_once( __DIR__ . '/stripe-php/init.php' );
    190             \Stripe\Stripe::setApiKey( $data['keys']['secret'] );
    191 
    192             try {
    193                 $charge = \Stripe\Charge::create( array(
    194                     'amount' => round( $payment_data['amount'], 2 ) * 100,
    195                     'currency' => $payment_data['currency'],
    196                     'source' => $_POST['stripeToken'],
    197                     'description' => 'WordCamp Sponsorship: ' . $wordcamp_obj->post_title,
    198                     'metadata' => array(
    199                         'invoice_id' => $payment_data['invoice_id'],
    200                         'wordcamp_id' => $payment_data['wordcamp_id'],
    201                     ),
    202                 ) );
    203             } catch ( \Stripe\Error\Card $e ) {
    204                 $data['errors'][] = 'The card has been declined.';
    205                 return;
    206             } catch ( \Exception $e ) {
    207                 $data['errors'][] = 'An unknown error has occurred, please try again later.';
    208                 return;
    209             }
    210 
    211             // All good!
    212             $data['step'] = STEP_PAYMENT_SUCCESS;
    213             break;
    214     }
    215 }
     100    $step = isset( $_POST['step'] ) ? absint( $_POST['step'] ) : STEP_SELECT_INVOICE;
     101
     102    switch ( $_POST['step'] ) {
     103        case STEP_SELECT_INVOICE:
     104            // An invoice, event, currency and amount have been selected.
     105
     106            if ( empty( $_POST['currency'] ) ) {
     107                $data['errors'][] = 'Please select a currency.';
     108                return;
     109            }
     110
     111            $currency = $_POST['currency'];
     112            if ( ! array_key_exists( $currency, $data['currencies'] ) or strpos( $currency, 'null' ) === 0 ) {
     113                $data['errors'][] = 'Invalid currency.';
     114                return;
     115            }
     116
     117            if ( empty( $_POST['amount'] ) ) {
     118                $data['errors'][] = 'Please enter a payment amount.';
     119                return;
     120            }
     121
     122            $amount = round( floatval( $_POST['amount'] ), 2 );
     123            if ( $amount < 1.00 ) {
     124                $data['errors'][] = 'Amount can not be less than 1.00.';
     125                return;
     126            }
     127
     128            if ( empty( $_POST['wordcamp_id'] ) ) {
     129                $data['errors'][] = 'Please select an event.';
     130                return;
     131            }
     132
     133            // Make sure the selected WordCamp is valid.
     134            $wordcamp_id = absint( $_POST['wordcamp_id'] );
     135            $valid_ids = wp_list_pluck( _get_wordcamps(), 'ID' );
     136
     137            if ( ! in_array( $wordcamp_id, $valid_ids ) ) {
     138                $data['errors'][] = 'Please select a valid event.';
     139                return;
     140            }
     141
     142            if ( empty( $_POST['invoice_id'] ) ) {
     143                $data['errors'][] = 'Please provide a valid invoice ID.';
     144                return;
     145            }
     146
     147            $invoice_id = absint( $_POST['invoice_id'] );
     148            $wordcamp_site_id = get_wordcamp_site_id( get_post( $wordcamp_id ) );
     149            if ( empty( $wordcamp_site_id ) ) {
     150                $data['errors'][] = 'Could not find a site for this WordCamp.';
     151                return;
     152            }
     153
     154            // Next step is to collect the card details via Stripe.
     155            $data['step'] = STEP_PAYMENT_DETAILS;
     156            $data['payment'] = array(
     157                'currency' => $currency,
     158                'amount' => $amount,
     159                'wordcamp_id' => $wordcamp_id,
     160                'invoice_id' => $invoice_id,
     161            );
     162
     163            // Passed through to the charge step.
     164            $data['payment_data_json'] = json_encode( $data['payment'] );
     165            $data['payment_data_signature'] = hash_hmac( 'sha256', $data['payment_data_json'], $data['keys']['hmac_key'] );
     166
     167            // Add a WordCamp object for convenience.
     168            $data['payment']['wordcamp_obj'] = get_post( $wordcamp_id );
     169            break;
     170
     171        case STEP_PAYMENT_DETAILS:
     172            // The card details have been entered and Stripe has submitted our form.
     173
     174            if ( empty( $_POST['stripeToken'] ) ) {
     175                $data['errors'][] = 'Stripe token not found.';
     176                return;
     177            }
     178
     179            // Make sure our data hasn't been altered.
     180            $payment_data_str = wp_unslash( $_POST['payment_data_json'] );
     181            $payment_data = json_decode( $payment_data_str, true );
     182            if ( ! hash_equals( hash_hmac( 'sha256', $payment_data_str, $data['keys']['hmac_key'] ), $_POST['payment_data_signature'] ) ) {
     183                $data['errors'][] = 'Could not verify payload signature.';
     184                return;
     185            }
     186
     187            $wordcamp_obj = get_post( $payment_data['wordcamp_id'] );
     188
     189            require_once( __DIR__ . '/stripe-php/init.php' );
     190            \Stripe\Stripe::setApiKey( $data['keys']['secret'] );
     191
     192            try {
     193                $charge = \Stripe\Charge::create( array(
     194                    'amount' => round( $payment_data['amount'], 2 ) * 100,
     195                    'currency' => $payment_data['currency'],
     196                    'source' => $_POST['stripeToken'],
     197                    'description' => 'WordCamp Sponsorship: ' . $wordcamp_obj->post_title,
     198                    'metadata' => array(
     199                        'invoice_id' => $payment_data['invoice_id'],
     200                        'wordcamp_id' => $payment_data['wordcamp_id'],
     201                    ),
     202                ) );
     203            } catch ( \Stripe\Error\Card $e ) {
     204                $data['errors'][] = 'The card has been declined.';
     205                return;
     206            } catch ( \Exception $e ) {
     207                $data['errors'][] = 'An unknown error has occurred, please try again later.';
     208                return;
     209            }
     210
     211            // All good!
     212            $data['step'] = STEP_PAYMENT_SUCCESS;
     213            break;
     214    }
     215}
Note: See TracChangeset for help on using the changeset viewer.