2015-08-03 8 views
9

Per WooCommerce cerco una soluzione per creare un ordine programmaticamente (il mio sito ha solo 1 homepage con alcuni campi) per ordinare.WooCommerce crea un ordine programmaticamente e reindirizza al pagamento

Dopo aver aggiunto i prodotti con una casella di controllo, desidero creare un ordine e reindirizzare al metodo di pagamento.

Creazione di un ordine è quasi fatto con questa risposta, ma come faccio a iniziare un pagamento? Wordpress (Woocommerce extension) - Create new order programatically

+0

Grande questione in effetti, mi è stato anche alla ricerca di una soluzione. – MrIndomitable

risposta

12

Questo ha fatto per me:

if (isset($_POST['isOrder']) && $_POST['isOrder'] == 1) { 
    $address = array(
     'first_name' => $_POST['notes']['domain'], 
     'last_name' => '', 
     'company' => $_POST['customer']['company'], 
     'email'  => $_POST['customer']['email'], 
     'phone'  => $_POST['customer']['phone'], 
     'address_1' => $_POST['customer']['address'], 
     'address_2' => '', 
     'city'  => $_POST['customer']['city'], 
     'state'  => '', 
     'postcode' => $_POST['customer']['postalcode'], 
     'country' => 'NL' 
    ); 

    $order = wc_create_order(); 
    foreach ($_POST['product_order'] as $productId => $productOrdered) : 
     $order->add_product(get_product($productId), 1); 
    endforeach; 

    $order->set_address($address, 'billing'); 
    $order->set_address($address, 'shipping'); 

    $order->calculate_totals(); 

    update_post_meta($order->id, '_payment_method', 'ideal'); 
    update_post_meta($order->id, '_payment_method_title', 'iDeal'); 

    // Store Order ID in session so it can be re-used after payment failure 
    WC()->session->order_awaiting_payment = $order->id; 

    // Process Payment 
    $available_gateways = WC()->payment_gateways->get_available_payment_gateways(); 
    $result = $available_gateways[ 'ideal' ]->process_payment($order->id); 

    // Redirect to success/confirmation/payment page 
    if ($result['result'] == 'success') { 

     $result = apply_filters('woocommerce_payment_successful_result', $result, $order->id); 

     wp_redirect($result['redirect']); 
     exit; 
    } 
} 
+1

sarebbe fantastico se includessi anche javascript. – Tomasz

+1

Hai salvato le mie 2 settimane, con 900 usd, non riesco a trovare più parole per apprezzare! –

+0

Assolutamente meraviglioso, ottimo lavoro! – MrIndomitable

0

Per saltare la pagina di checkout è possibile filtrare l'url Aggiungi al carrello.

function so_31787244_redirect_to_checkout($url) { 

    // Remove default cart message 
    WC()->clear_messages(); 

    // Redirect to checkout 
    $url = WC()->cart->get_checkout_url(); 

    return $url; 
} 
add_filter('add_to_cart_redirect', 'so_31787244_redirect_to_checkout'); 

Si potrebbe anche perseguire un plugin come One Page Checkout

+0

Voglio saltare il carrello e la pagina di pagamento. Ad esempio, nella mia pagina di prodotto le persone possono riempire le loro informazioni di contatto e premere il pulsante "Paga adesso". Successivamente è necessario creare un ordine e reindirizzare la pagina di pagamento (ad esempio, paypal.com). – Ronn0

+0

Quindi non sono sicuro del motivo per cui utilizzi anche WooCommerce. Ma, detto questo, sembra abbastanza personalizzato, forse puoi scrivere una funzione che creerà l'ordine quando PayPal convaliderà l'ordine. Ma sembra un sacco di lavoro per poco beneficio. Penso che staresti meglio investendo in un certificato SSL e in un plug-in premium di PayPal e accettando il pagamento direttamente sul tuo sito. – helgatheviking