• 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.