Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Explore the key features that set Nettvis AS IT/tech-support services apart from the rest.
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Basic plan
or $20/month
Business plan
or $29/month
Enterprise plan
(080) - 800-800
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Basic Plan
$500/year
Standard Plan
$1000/year
Premium Plan
$1500/year
Error: No authorization code found in URL.
'; return; } // Exchange authorization code for tokens const tokenResponse = await fetch('https://api.vippsmobilepay.com/access-management-1.0/access/oauth2/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ client_id: window.VIPPS_CONFIG.CLIENT_ID, code_verifier: codeVerifier, grant_type: 'authorization_code', redirect_uri: window.VIPPS_CONFIG.REDIRECT_URI, code: code }) }); if (!tokenResponse.ok) { document.body.innerHTML = `Error exchanging code for token: ${tokenResponse.statusText}
`; return; } const { access_token, id_token } = await tokenResponse.json(); // Fetch user info from Vipps const userInfoResponse = await fetch('https://api.vippsmobilepay.com/vipps-userinfo-api/userinfo', { headers: { 'Authorization': `Bearer ${access_token}` } }); if (!userInfoResponse.ok) { document.body.innerHTML = `Error fetching user info: ${userInfoResponse.statusText}
`; return; } const userInfo = await userInfoResponse.json(); // Store user info securely in sessionStorage (consider cookies for production) sessionStorage.setItem('vipps_sub', userInfo.sub); sessionStorage.setItem('vipps_email', userInfo.email); sessionStorage.setItem('vipps_name', userInfo.name || ''); // Clean up PKCE verifier sessionStorage.removeItem('pkce_verifier'); // Redirect user to your JSM portal (replace with your actual portal URL) window.location.href = 'https://hjelp.nettvis.no/servicedesk/customer/portal/1?sub=' + encodeURIComponent(userInfo.sub); })(); } })();