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… .
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. 🙂
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.
Koden du sendte ser ikke ut til å virke. Har du noen alternativer her evt.?
Takk for hjelpen.
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.
Supert, prøver denne og gir deg en tilbakemelding! 🙂
Denne fungerte. Takk for hjelpen!