Procesare checkout folosind WC REST API

26 nov. 2017, 18:18:41
Vizualizări: 14.5K
Voturi: 3

Cu un site principal care folosește WordPress/WooCommerce și un site la distanță care servește front-end-ul; este posibil să procesezi formularul de checkout folosind WooCommerce REST API și să primești un URL de redirecționare către Gateway-ul de Plată selectat?

Am încercat să creez o funcție AJAX personalizată, dar se pare că necesită un câmp nonce în formularul trimis, iar asta este problematic pentru că front-end-ul nu este pe același server.

0
Toate răspunsurile la întrebare 1
4

Pentru a procesa plata pentru o comandă WooCommerce, fluxul de lucru este următorul:

  1. Creează o comandă WooCommerce
  2. Procesează plata pentru această comandă, folosind una dintre metodele WC_Payment_Gateways
  3. Schimbă statusul comenzii (implicit este în așteptare->procesare, sau finalizată dacă comanda este goală)

În opinia mea, pasul doi poate fi implementat astfel:

  1. Folosește o bibliotecă front-end pentru tokenizarea informațiilor de plată, utilizând framework-uri precum Stripe sau PayPal.
  2. Trimite token-ul de plată către backend-ul WordPress folosind WP REST API
  3. Lasă WordPress și WooCommerce să proceseze plata în mod obișnuit.

Poți crea un endpoint REST API personalizat pentru procesarea plății pe site-ul tău WooCommerce, adăugând următorul cod în codul tău.

add_action( 'rest_api_init', 'wc_rest_payment_endpoints' );
function wc_rest_payment_endpoints() {
    /**
     * Gestionează cererea pentru metoda de plată.
     */
    register_rest_route( 'wc/v2', 'payment', array(
        'methods'  => 'POST',
        'callback' => 'wc_rest_payment_endpoint_handler',
    ) );
}
function wc_rest_payment_endpoint_handler( $request = null ) {
    $response       = array();
    $parameters     = $request->get_json_params();
    $payment_method = sanitize_text_field( $parameters['payment_method'] );
    $order_id       = sanitize_text_field( $parameters['order_id'] );
    $payment_token  = sanitize_text_field( $parameters['payment_token'] );
    $error          = new WP_Error();

    if ( $payment_method === "stripe" ) {
        $wc_gateway_stripe                = new WC_Gateway_Stripe();
        $_POST['stripe_token']            = $payment_token;
        $payment_result               = $wc_gateway_stripe->process_payment( $order_id );
        if ( $payment_result['result'] === "success" ) {
            $response['code']    = 200;
            $response['message'] = __( "Plata ta a fost efectuată cu succes", "wc-rest-payment" );
        } else {
            return new WP_REST_Response( array("c"), 123 );
            $response['code']    = 401;
            $response['message'] = __( "Te rugăm să introduci detalii valide ale cardului", "wc-rest-payment" );
        }
    }  else {
        $response['code'] = 405;
        $response['message'] = __( "Te rugăm să selectezi o metodă de plată disponibilă. Metodele de plată suportate pot fi găsite la https://wordpress.org/plugins/wc-rest-payment/#description", "wc-rest-payment" );
    }

    return new WP_REST_Response( $response, 123 );
}

Dacă cauți o modalitate simplă de a face acest lucru, poți verifica plugin-ul nostru WC REST Payment.

Acesta suportă gateway-uri WooCommerce, inclusiv Stripe, PayPal Express, PayPal Standard, Transfer Bancar Direct, CEC, Plata la Livrare.

24 ian. 2018 23:09:54
Comentarii

mulțumesc pentru ghidul detaliat, dar am ales să apelez process_checkout folosind ajax de ceva timp. Acest site folosește o pasarelă de plată mai puțin cunoscută, așa că este totul sau nimic când o apelez pe partea de front-end (fără tokenizare). Dar deoarece nu am menționat acest lucru în întrebare, o marchez ca răspuns.

steakoverflow steakoverflow
26 ian. 2018 09:17:44

cum știi care sunt codurile de refuz de la Stripe, nu văd cum le-ai putea gestiona aici...

Spencer Bigum Spencer Bigum
8 mar. 2019 01:33:29

Nu poți, dacă folosești WooCommerce Stripe Gateway. Am cercetat codul lor sursă, ei nu returnează eroarea. Totuși, dacă activezi jurnalul de depanare, poți vedea eroarea din WooCommerce -> Status -> Jurnale

Jack Song Jack Song
8 mar. 2019 02:00:55

@JackSong asta funcționează bine pentru Stripe, mulțumesc mult. Ce arhitectură ai sugera să implementez pentru PayPal? Am găsit biblioteci React pentru butoanele PayPal care par să funcționeze bine, ai face la succes un apel separat către WordPress pentru a plasa comanda cu status: confirmed? Pare puțin nesigur pentru mine, de aceea întreb

Timothy Dalton Timothy Dalton
6 mai 2020 15:56:04