2015-08-03 12 views
9

Dla WooCommerce szukam rozwiązania, aby stworzyć programowo zamówienie (moja strona ma tylko 1 stronę z niektórymi polami) na zamówienie.WooCommerce stwórz zamówienie programowo i przekieruj do płatności

Po dodaniu produktów za pomocą pola wyboru chciałbym utworzyć zamówienie i przekierować do metody płatności.

Tworzenie zamówienia prawie się kończy tą odpowiedzią, ale jak mogę rozpocząć płatność? Wordpress (Woocommerce extension) - Create new order programatically

+0

Wielkie pytanie rzeczywiście, ja również poszukuje rozwiązania. – MrIndomitable

Odpowiedz

12

to zrobił to dla mnie:

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

byłoby wspaniale, gdybyś również zawierał javascript. – Tomasz

+1

Uratowałeś moje 2 tygodnie z 900 USD, nie mogę znaleźć więcej słów, które można docenić! –

+0

Absolutnie cudowna, świetna robota! – MrIndomitable

0

Aby pominąć stronę zamówienia, można filtrować adres URL dodania do koszyka.

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'); 

Można również realizować wtyczki takie jak One Page Checkout

+0

Chcę pominąć stronę koszyka i kasy. Na przykład na mojej stronie produktu ludzie mogą wypełnić swoje dane kontaktowe i nacisnąć przycisk "Zapłać teraz". Następnie należy utworzyć zamówienie i przekierować na stronę płatności (na przykład paypal.com). – Ronn0

+0

Nie jestem pewien, dlaczego używasz WooCommerce. Ale powiedziawszy, brzmi to dość niestandardowo, może możesz napisać funkcję, która utworzy zamówienie, gdy PayPal sprawdzi zamówienie. Ale wydaje się, że dużo pracy przynosi niewielkie korzyści. Myślę, że lepiej byłoby zainwestować w certyfikat SSL i wtyczkę premium PayPal i zaakceptować płatność bezpośrednio w swojej witrynie. – helgatheviking

Powiązane problemy