• Resolved steblo94

    (@steblo94)


    Hei,

    Det ser ut til at Vipps betaling i vanlig checkout (ikke express) mangler + i “+47” når ordren gjennomføres. Dette fører til at kundens telefonnummer blir “4799999999”. Da blir det tull med blant annet fraktløsninger osv.

    Når man bruker Vipps express checkout, fungerer det som det skal. Denne feilen har slått inn på flere nettbutikker.

    Se bilde – inkluderer +47: https://imgur.com/a/ag2I39G
    Se bilde – mangler +: https://imgur.com/AQQ0VsP

    Dette gjelder for flere sider jeg har.

    Har dere en fiks på dette?

    The page I need help with: [log in to see the link]

Viewing 7 replies - 1 through 7 (of 7 total)
  • Plugin Author Iver Odin Kvello

    (@iverok)

    Hei,

    Vi gjør ingenting med telefonnrdata som kommer fra Vipps; og de nyere apiene deres ser ut å bruke 47 uten “+” eller 00 foran. Vipps Hurtigkasse bruker et eldre API. Det kan også være noen forskjeller i hvordan brukerne har lagret telefonnr.

    Det er ikke enkelt å lage en generell løsning for dette som passer for alle, men for norske telefonnr så kan du prøve å bruke det følgende i en plugin eller i ditt childthemes’ functions.php:

    function wph_canonicalize_phone_number ($phonenr, $country) {
        $canonical = $phonenr;
        $canonical = preg_replace("![^0-9]!", "",  $canonical);
        $canonical = preg_replace("!^0+!", "", $canonical);
        if (strlen($canonical) == 8 && $country == 'NO') {
            $canonical= '47' . $canonical;
        }
        if (preg_match("/47\d{8}/", $canonical) && $country == 'NO') {
            $canonical = "+" . $canonical;
        }
        return $canonical;
    }
    
    add_action('woocommerce_payment_complete', function ($orderid) {
        $order = wc_get_order($orderid);
        if (!is_a($order, 'WC_Order')) return;
        if ($order->get_payment_method() != 'vipps') return;
    
        $phonenr = $order->get_billing_phone();
        $country = $order->get_billing_country();
        $canonical = wph_canonicalize_phone_number($phonenr, $country);
    
        if ($canonical && ($canonical != $phonenr)) {
            $order->set_billing_phone($canonical);
            if (version_compare(WC_VERSION, '5.6.0', '>=')) {
                $order->set_shipping_phone($canonical);
            }
            $order->save();
        }
    
    
    }, 10, 1);

    Det vil på en litt forsiktig måte når en bestilling er ferdig, endre telefonnr til +47… .

    Thread Starter steblo94

    (@steblo94)

    Takk for svar.

    Er dette noe som er videreformidlet til Vipps sitt developer team fra deres side? Det virker jo veldig rart å legge til 47, men ikke “+” eller “00” foran.

    Jeg prøver dette. 🙂

    Plugin Author Iver Odin Kvello

    (@iverok)

    Hei,

    APIet er nok fastlagt nå (endringer i det vil kreve at alle som bruker det endrer sine applikasjoner), men koden jeg postet vil forhåpentligvis hjelpe.

    Thread Starter steblo94

    (@steblo94)

    Koden du sendte ser ikke ut til å virke. Har du noen alternativer her evt.?

    Takk for hjelpen.

    Plugin Author Iver Odin Kvello

    (@iverok)

    Du har rett; feilen er at telefonnumrene blir sammenlignet som tall istedetfor strenger. Fiksen er å endre testen til !== slik:

    function wph_canonicalize_phone_number ($phonenr, $country) {
        $canonical = $phonenr;
        $canonical = preg_replace("![^0-9]!", "",  $canonical);
        $canonical = preg_replace("!^0+!", "", $canonical);
        if (strlen($canonical) == 8 && $country == 'NO') {
            $canonical= '47' . $canonical;
        }
        if (preg_match("/47\d{8}/", $canonical) && $country == 'NO') {
            $canonical = "+" . $canonical;
        }
        return $canonical;
    }
    
    add_action('woocommerce_payment_complete', function ($orderid) {
        $order = wc_get_order($orderid);
        if (!is_a($order, 'WC_Order')) return;
        if ($order->get_payment_method() != 'vipps') return;
    
        $phonenr = $order->get_billing_phone();
        $country = $order->get_billing_country();
        $canonical = wph_canonicalize_phone_number($phonenr, $country);
    
        if ($canonical && ($canonical !== $phonenr)) {
            $order->set_billing_phone($canonical);
            if (version_compare(WC_VERSION, '5.6.0', '>=')) {
                $order->set_shipping_phone($canonical);
            }
            $order->save();
        }
    
    
    }, 10, 1);

    Jeg har for sikkerhetens skyld testet denne versjonen på nytt og får da +47.

    Thread Starter steblo94

    (@steblo94)

    Supert, prøver denne og gir deg en tilbakemelding! 🙂

    Thread Starter steblo94

    (@steblo94)

    Denne fungerte. Takk for hjelpen!

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘Telefonnummer bug +47 +’ is closed to new replies.