Compare commits
3 Commits
main
...
allow-sub-
| Author | SHA1 | Date |
|---|---|---|
|
|
f6de0aba33 | |
|
|
d065733879 | |
|
|
6a62923d6d |
|
|
@ -1,8 +1,8 @@
|
||||||
// deno-lint-ignore-file ban-ts-comment
|
// deno-lint-ignore-file ban-ts-comment
|
||||||
|
import { STATUS_CODE } from "$fresh/server.ts";
|
||||||
import "jsr:@std/dotenv/load";
|
import "jsr:@std/dotenv/load";
|
||||||
import { encodeHex } from "jsr:@std/encoding/hex";
|
import { encodeHex } from "jsr:@std/encoding/hex";
|
||||||
import { getHostUrl } from "../utils.ts";
|
import { getHostUrl } from "../utils.ts";
|
||||||
import { STATUS_CODE } from "$fresh/server.ts";
|
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
clientId: Deno.env.get("VIPPS_CLIENT_ID"),
|
clientId: Deno.env.get("VIPPS_CLIENT_ID"),
|
||||||
|
|
@ -50,6 +50,11 @@ const getAccessToken = async function () {
|
||||||
export const createAgreement = async function (email: string) {
|
export const createAgreement = async function (email: string) {
|
||||||
const token = await getAccessToken();
|
const token = await getAccessToken();
|
||||||
const amount = 5000; // 50 NOK
|
const amount = 5000; // 50 NOK
|
||||||
|
|
||||||
|
// in case of special characters, like sub-addresses added
|
||||||
|
// with +, e.g. "name+subscriptions@domain.com"
|
||||||
|
const urlEncodedEmail = encodeURIComponent(email);
|
||||||
|
const redirectUrl = `${getHostUrl()}/donations-success?urlEncodedEmail=${urlEncodedEmail}`;
|
||||||
const response = await fetch(`${config.baseUrl}/recurring/v3/agreements/`, {
|
const response = await fetch(`${config.baseUrl}/recurring/v3/agreements/`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
@ -74,7 +79,7 @@ export const createAgreement = async function (email: string) {
|
||||||
currency: "NOK",
|
currency: "NOK",
|
||||||
},
|
},
|
||||||
// email is used to identify the user in the success page
|
// email is used to identify the user in the success page
|
||||||
merchantRedirectUrl: `${getHostUrl()}/donations-success?email=${email}`,
|
merchantRedirectUrl: redirectUrl,
|
||||||
merchantAgreementUrl: `${getHostUrl()}`,
|
merchantAgreementUrl: `${getHostUrl()}`,
|
||||||
productName: "Månedlig støtte til NRSS",
|
productName: "Månedlig støtte til NRSS",
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ import { validateEmail } from "../lib/utils.ts";
|
||||||
export const handler: Handlers = {
|
export const handler: Handlers = {
|
||||||
async GET(request, ctx) {
|
async GET(request, ctx) {
|
||||||
const url = new URL(request.url);
|
const url = new URL(request.url);
|
||||||
const email = url.searchParams.get("email");
|
const urlEncodedEmail = url.searchParams.get("urlEncodedEmail");
|
||||||
|
const email = urlEncodedEmail ? decodeURIComponent(urlEncodedEmail) : null;
|
||||||
|
|
||||||
if (!email) {
|
if (!email) {
|
||||||
console.error("Missing email in query params", request.url);
|
console.error("Missing email in query params", request.url);
|
||||||
return Response.redirect("/donations-error");
|
return Response.redirect("/donations-error");
|
||||||
|
|
@ -34,9 +36,7 @@ export const handler: Handlers = {
|
||||||
export default function () {
|
export default function () {
|
||||||
return (
|
return (
|
||||||
<div className="my-16 text-center flex flex-col items-center min-h-screen ">
|
<div className="my-16 text-center flex flex-col items-center min-h-screen ">
|
||||||
<h1 className="text-6xl mb-8">
|
<h1 className="text-6xl mb-8">🙏🌟😊💖</h1>
|
||||||
🙏🌟😊💖
|
|
||||||
</h1>
|
|
||||||
<p className="text-4xl mb-4">
|
<p className="text-4xl mb-4">
|
||||||
Tusen takk! Jeg er veldig takknemlig for all støtte.
|
Tusen takk! Jeg er veldig takknemlig for all støtte.
|
||||||
</p>
|
</p>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue