Skip to content

Commit

Permalink
Merge pull request #18 from fifle/stripe
Browse files Browse the repository at this point in the history
Adding Stripe and Revolut payment links full support
  • Loading branch information
fifle authored Jun 24, 2024
2 parents e76fc5f + 50be753 commit dd8d367
Show file tree
Hide file tree
Showing 5 changed files with 282 additions and 69 deletions.
37 changes: 29 additions & 8 deletions app/Http/Controllers/DonationController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class DonationController extends Controller
public function donationLink(Request $request)
{
$request->validate([
// 'campaign_title' => 'required|string|max:250',
// 'campaign_title' => 'required|string|max:250',
'detail' => 'required|string|max:250',
'payee' => 'required|string|max:250',
]);
Expand All @@ -21,29 +21,31 @@ public function donationLink(Request $request)
$iban = rawurlencode($request->input('iban'));
$pp = rawurlencode($request->input('pp'));
$db = rawurlencode($request->input('db'));
$sebuid = rawurlencode($request->input('sebuid'));
$sebuid_st = rawurlencode($request->input('sebuid_st')); // uid for standing order for SEB LV
$sebuid = rawurlencode($request->input('sebuid')); // UID for One-time payments for SEB
$sebuid_st = rawurlencode($request->input('sebuid_st')); // UID for Standing orders for SEB
$rev = rawurlencode($request->input('rev'));
$tax = rawurlencode($request->boolean('tax'));
$swt = rawurlencode($request->boolean('swt'));
$lhvt = rawurlencode($request->boolean('lhvt'));
$coopt = rawurlencode($request->boolean('coopt'));
// paypal hosted button
// PayPal hosted button
$pphb = rawurlencode($request->input('pphb'));
// Stripe payment link id
$strp = rawurlencode($request->input('strp'));
$paypalClientId = rawurlencode($request->input('paypalClientId')); // Paypal Hosted Button

// Use directly without rawurlencode for internal logic
$onetime = $request->has('onetime') ? filter_var($request->input('onetime'), FILTER_VALIDATE_BOOLEAN) : true;
$recurring = $request->has('recurring') ? filter_var($request->input('recurring'), FILTER_VALIDATE_BOOLEAN) : true;

// custom sums
// Custom sums setup
$defsum = 5;
$s1 = rawurlencode($request->input('s1'));
$s2 = rawurlencode($request->input('s2'));
$s3 = rawurlencode($request->input('s3'));

// a fixed amount expected from the donor
// then all preamounts are disabled
// Fixed amount expected from the donor
// In this case, all pre-defined amount selections will be disabled
$s0 = rawurlencode($request->input('s0'));

// links
Expand Down Expand Up @@ -136,6 +138,10 @@ public function donationLink(Request $request)
$compactData['pphb'] = 'pphb';
}

if (isset($strp)) {
$compactData['strp'] = 'strp';
}

if (isset($paypalClientId)) {
$compactData['paypalClientId'] = 'paypalClientId';
}
Expand Down Expand Up @@ -189,13 +195,14 @@ public function donationEmbed(Request $request)
$lhvt = rawurlencode($request->boolean('lhvt')); // LHV turn off
$coopt = rawurlencode($request->boolean('coopt')); // Coop turn off
$pphb = rawurlencode($request->input('pphb')); // Paypal Hosted Button
$strp = rawurlencode($request->input('strp')); // Stripe
$paypalClientId = rawurlencode($request->input('paypalClientId')); // Paypal Hosted Button

// Use directly without rawurlencode for internal logic
$onetime = $request->has('onetime') ? filter_var($request->input('onetime'), FILTER_VALIDATE_BOOLEAN) : true;
$recurring = $request->has('recurring') ? filter_var($request->input('recurring'), FILTER_VALIDATE_BOOLEAN) : true;

// custom sums
// custom sums
$defsum = 5;
$s1 = rawurlencode($request->input('s1'));
$s2 = rawurlencode($request->input('s2'));
Expand Down Expand Up @@ -279,6 +286,10 @@ public function donationEmbed(Request $request)
$compactData['pphb'] = 'pphb';
}

if (isset($strp)) {
$compactData['strp'] = 'strp';
}

if (isset($paypalClientId)) {
$compactData['paypalClientId'] = 'paypalClientId';
}
Expand Down Expand Up @@ -332,6 +343,8 @@ public function cashier(Request $request)
$lhvt = rawurlencode($request->boolean('lhvt')); // LHV turn off
$coopt = rawurlencode($request->boolean('coopt')); // Coop turn off
$pphb = rawurlencode($request->input('pphb')); // Paypal Hosted Button
// Stripe payment link id
$strp = rawurlencode($request->input('strp'));
$paypalClientId = rawurlencode($request->input('paypalClientId')); // Paypal Hosted Button

// Use directly without rawurlencode for internal logic
Expand Down Expand Up @@ -410,6 +423,10 @@ public function cashier(Request $request)
$compactData['pphb'] = 'pphb';
}

if (isset($strp)) {
$compactData['strp'] = 'strp';
}

if (isset($paypalClientId)) {
$compactData['paypalClientId'] = 'paypalClientId';
}
Expand Down Expand Up @@ -465,6 +482,8 @@ public function getCashierQR(Request $request) {
$ik = " " . rawurlencode($request->input('taxik'));
// paypal hosted button
$pphb = rawurlencode($request->input('pphb'));
// Stripe payment link id
$strp = rawurlencode($request->input('strp'));
$paypalClientId = rawurlencode($request->input('paypalClientId')); // Paypal Hosted Button

// Use directly without rawurlencode for internal logic
Expand Down Expand Up @@ -493,6 +512,7 @@ public function getCashierQR(Request $request) {
'amount',
'ik',
'pphb',
'strp',
'paypalClientId',
'onetime',
'recurring',
Expand All @@ -517,6 +537,7 @@ public function getCashierQR(Request $request) {
'paypalClientId' => $paypalClientId,
'onetime' => $onetime,
'recurring' => $recurring,
'strp' => $strp,

'qrcode' => $qrcode,
'link' => $link,
Expand Down
91 changes: 79 additions & 12 deletions app/Http/Controllers/RedirectController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,40 @@
class RedirectController extends Controller
{
public function getBankLink(Request $request) {
// Campaign title text
$campaign_title = rawurldecode($request->input('campaign_title'));
// Payment detail text
$detail = rawurldecode($request->input('detail'));
// Payee's name
$payee = rawurldecode($request->input('payee'));
// IBAN number of the payee's bank account
$iban = rawurldecode($request->input('iban'));
// PayPal.me ID
$pp = rawurldecode($request->input('pp'));
// Donorbox campaign ID
$db = rawurldecode($request->input('db'));
// SEB UID for one-time payments
$sebuid = rawurldecode($request->input('sebuid'));
// SEB UID for standing payments
$sebuid_st = rawurldecode($request->input('sebuid_st'));
// Revolut id
$rev = rawurldecode($request->input('rev'));
// Donor's personal code
$ik = " " . rawurldecode($request->input('taxik'));
// PayPal hosted button
$pphb = rawurldecode($request->input('pphb'));
// Stripe payment link id
$strp = rawurldecode($request->input("strp"));

// Current logic for presetting the starting donation amount
$s0 = rawurldecode($request->input('s0'));
if ($s0) {
$amount = rawurldecode($request->input('s0'));
} else {
$amount = rawurldecode($request->input('donationsum'));
}
$ik = " " . rawurldecode($request->input('taxik'));
// PayPal hosted button
$pphb = rawurldecode($request->input('pphb'));

// current language and its conversion from ISO_639_1 to ISO_639_2 for ibanks
// Setting current language code and its conversion from ISO_639_1 to ISO_639_2 for ibanks
$currentLang = $request->session()->get('locale');
switch ($currentLang) {
case "":
Expand All @@ -52,76 +66,101 @@ public function getBankLink(Request $request) {
break;
}

// List for Estonian users
if (env('COUNTRY') == 'ee') {
switch ($request->input('action')) {
// Swedbank one-time payment
case 'swed':
$bankname = "Swedbank";
$url = sprintf("https://www.swedbank.ee/private/d2d/payments2/smartNew?payment.beneficiaryAccountNumber=%s&payment.beneficiaryName=%s&payment.details=%s%s&payment.amount=%s&language=%s", $iban, $payee, $detail, $ik, $amount, $currentLang);
return Redirect::to($url);

// Swedbank standing payment
case 'swed-standing':
$bankname = "Swedbank";
$url = sprintf("https://www.swedbank.ee/private/d2d/payments2/standing_order/new?standingOrder.beneficiaryAccountNumber=%s&standingOrder.beneficiaryName=%s&standingOrder.details=%s%s&standingOrder.amount=%s&language=%s", $iban, $payee, $detail, $ik, $amount, $currentLang);
return Redirect::to($url);

// SEB one-time payment
case 'seb':
$bankname = "SEB";
$url = sprintf("https://e.seb.ee/ib/login?UID=%s&act=SMARTPAYM&lang=%s&field1=benname&value1=%s&field3=benacc&value3=%s&field10=desc&value10=%s%s&value11=12345&field5=amount&value5=%s&paymtype=REMSEBEE&field6=currency&value6=EUR", $sebuid, $currentLang, $payee, $iban, $detail, $ik, $amount);
return Redirect::to($url);

// SEB standing payment
case 'seb-standing':
$bankname = "SEB";
$url = sprintf("https://e.seb.ee/ib/login?UID=%s&act=ADDSOSMARTPAYM&lang=%s&field1=benname&value1=%s&field3=benacc&value3=%s&field10=desc&value10=%s%s&field11=refid&value11=&field5=amount&value5=%s&sofield1=frequency&sovalue1=3&paymtype=REMSEBEE&field6=currency&value6=EUR&sofield2=startdt&sofield3=enddt", $sebuid_st, $currentLang, $payee, $iban, $detail, $ik, $amount);
return Redirect::to($url);

// LHV one-time payment
case 'lhv':
$bankname = "LHV";
$url = sprintf("https://www.lhv.ee/ibank/payments?creditorName=%s&creditorAccountNo=%s&description=%s%s&amount=%s", $payee, $iban, $detail, $ik, $amount);
error_log($url);
return Redirect::to($url);

// LHV standing payment
case 'lhv-standing':
$bankname = "LHV";
$url = sprintf("https://www.lhv.ee/portfolio/payment_standing_add.cfm?i_receiver_name=%s&i_receiver_account_no=%s&i_payment_desc=%s%s&i_amount=%s", $payee, $iban, $detail, $ik, $amount);
error_log($url);
return Redirect::to($url);

// Coop one-time payment
case 'coop':
$bankname = "Coop Pank";
$url = sprintf("https://i.cooppank.ee/newpmt?SaajaNimi=%s&SaajaKonto=%s&MaksePohjus=%s%s&MuutMakseSumma=%s", $payee, $iban, $detail, $ik, $amount);
return Redirect::to($url);

// Coop standing payment
case 'coop-standing':
$bankname = "Coop Pank";
$url = sprintf("https://i.cooppank.ee/permpmtnew?SaajaNimi=%s&SaajaKonto=%s&MaksePohjus=%s%s&MakseSumma=%s", $payee, $iban, $detail, $ik, $amount);
return Redirect::to($url);

// PayPal.me payment link (personal and business accounts)
case 'paypal':
$bankname = "Paypal";
$url = sprintf("https://paypal.me/%s/%sEUR", $pp, $amount);
return Redirect::to($url);

// PayPal hosted button / donation payment link (for business accounts only)
case 'pphb':
$bankname = "Paypal Hosted button";
$url = sprintf("https://www.paypal.com/donate/?hosted_button_id=%s", $pphb);
return Redirect::to($url);

// Donationbox campaign link for one-time payments
case 'donorbox':
$bankname = "Donorbox";
$url = sprintf("https://donorbox.org/%s?&amount=%s&default_interval=&currency=eur", $db, $amount);
return Redirect::to($url);

// Donationbox campaign link for standing payments
case 'donorbox-standing':
$bankname = "Donorbox";
$url = sprintf("https://donorbox.org/%s?&amount=%s&default_interval=m&currency=eur", $db, $amount);
return Redirect::to($url);

// Revolut payment link for one-time payments (personal accounts only)
case 'rev':
$bankname = "Revolut";
$url = sprintf("https://revolut.me/%s", $rev);
$url = sprintf("https://revolut.me/%s/eur%s/%s%s", $rev, $amount, $detail, $ik);
return Redirect::to($url);

case 'pphb':
$bankname = "Paypal Hosted button";
$url = sprintf("https://www.paypal.com/donate/?hosted_button_id=%s", $pphb);
// Stripe payment link for one-time payments (business accounts only)
case 'strp':
$bankname = "Stripe";
error_log("Stripe ID: " . $strp);
$url = sprintf("https://donate.stripe.com/%s?__prefilled_amount=%s%s", $strp, $amount, '00');
error_log("Full request: " . $request);
return Redirect::to($url);
}
} else if (env('COUNTRY') == 'lv') {

}
// List for Latvian users
else if (env('COUNTRY') == 'lv') {
switch ($request->input('action')) {
case 'swed':
$bankname = "Swedbank";
Expand All @@ -147,11 +186,18 @@ public function getBankLink(Request $request) {
error_log($url);
return Redirect::to($url);

// PayPal.me payment link (personal and business accounts)
case 'paypal':
$bankname = "Paypal";
$url = sprintf("https://paypal.me/%s/%sEUR", $pp, $amount);
return Redirect::to($url);

// PayPal hosted button / donation payment link (for business accounts only)
case 'pphb':
$bankname = "Paypal Hosted button";
$url = sprintf("https://www.paypal.com/donate/?hosted_button_id=%s", $pphb);
return Redirect::to($url);

case 'donorbox':
$bankname = "Donorbox";
$url = sprintf("https://donorbox.org/%s?&amount=%s&default_interval=&currency=eur", $db, $amount);
Expand All @@ -164,15 +210,22 @@ public function getBankLink(Request $request) {

case 'rev':
$bankname = "Revolut";
$url = sprintf("https://revolut.me/%s", $rev);
$url = sprintf("https://revolut.me/%s/eur%s/%s%s", $rev, $amount, $detail, $ik);
return Redirect::to($url);

case 'strp':
$bankname = "Stripe";
$url = sprintf("https://donate.stripe.com/%s?__prefilled_amount=%s%s", $strp, $amount, '00');
return Redirect::to($url);

case 'pphb':
$bankname = "Paypal Hosted button";
$url = sprintf("https://www.paypal.com/donate/?hosted_button_id=%s", $pphb);
return Redirect::to($url);
}
} else if (env('COUNTRY') == 'lt') {
}
// List for Lithuanian users
else if (env('COUNTRY') == 'lt') {
switch ($request->input('action')) {
case 'swed':
$bankname = "Swedbank";
Expand All @@ -194,11 +247,18 @@ public function getBankLink(Request $request) {
$url = sprintf("https://e.seb.lt/ib/login?UID=%s&act=ADDSOSMARTPAYM&lang=%s&field1=benname&value1=%s&field3=benacc&value3=%s&field10=desc&value10=%s&field11=refid&value11=&field5=amount&value5=%s&sofield1=frequency&sovalue1=3&paymtype=REMSEBEE&field6=currency&value6=EUR&sofield2=startdt&sofield3=enddt", $sebuid_st, $currentLang, $payee, $iban, $detail, $amount);
return Redirect::to($url);

// PayPal.me payment link (personal and business accounts)
case 'paypal':
$bankname = "Paypal";
$url = sprintf("https://paypal.me/%s/%sEUR", $pp, $amount);
return Redirect::to($url);

// PayPal hosted button / donation payment link (for business accounts only)
case 'pphb':
$bankname = "Paypal Hosted button";
$url = sprintf("https://www.paypal.com/donate/?hosted_button_id=%s", $pphb);
return Redirect::to($url);

case 'donorbox':
$bankname = "Donorbox";
$url = sprintf("https://donorbox.org/%s?&amount=%s&default_interval=&currency=eur", $db, $amount);
Expand All @@ -211,7 +271,12 @@ public function getBankLink(Request $request) {

case 'rev':
$bankname = "Revolut";
$url = sprintf("https://revolut.me/%s", $rev);
$url = sprintf("https://revolut.me/%s/eur%s/%s%s", $rev, $amount, $detail, $ik);
return Redirect::to($url);

case 'strp':
$bankname = "Stripe";
$url = sprintf("https://donate.stripe.com/%s?__prefilled_amount=%s", $strp, $amount);
return Redirect::to($url);

case 'pphb':
Expand All @@ -232,6 +297,7 @@ public function getBankLink(Request $request) {
'sebuid',
'sebuid_st',
'rev',
'strp',
'amount',
'ik',
'pphb',
Expand All @@ -248,6 +314,7 @@ public function getBankLink(Request $request) {
'sebuid' => $sebuid,
'sebuid_st' => $sebuid_st,
'rev' => $rev,
'strp' => $strp,
'amount' => $amount,
'ik' => $ik,
'pphb' => $pphb,
Expand Down
2 changes: 1 addition & 1 deletion resources/views/components/lang-switcher.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<div id="dropdownSmall" class="text-left z-10 hidden bg-white divide-y divide-gray-100 rounded shadow dark:bg-gray-700 dark:divide-gray-600">
<ul class="py-1 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdownSmallButton">
<li>
<a href=" lang/en" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">English</a>
<a href="lang/en" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-600 dark:hover:text-white">English</a>
</li>
@if(env('COUNTRY') == 'ee')
<li>
Expand Down
Loading

0 comments on commit dd8d367

Please sign in to comment.