buypoints-modern.php

main 171 lines · 10.6 KB Raw
Alex Alex Commit Initial commit 01/10/2026 09:20
1<?php
2$znxPayH = static fn($v): string => htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8');
3
4$providerConfigs = array(
5 'paypal' => $paypal ?? array(),
6 'stripe' => $stripe ?? array(),
7 'mercadopago' => $mercadopago ?? array(),
8);
9$providerLabels = array(
10 'paypal' => t('buypoints.paypal'),
11 'stripe' => 'Stripe',
12 'mercadopago' => 'Mercado Pago',
13);
14$enabledProviders = array();
15foreach (array('paypal', 'stripe', 'mercadopago') as $provider) {
16 if (!empty($providerConfigs[$provider]['enabled'])) $enabledProviders[] = $provider;
17}
18$hasPagseguro = !empty($config['pagseguro']['enabled']);
19$hasPaygol = !empty($config['paygol']['enabled']);
20$anyEnabled = $enabledProviders || $hasPagseguro || $hasPaygol;
21$firstTable = true;
22?>
23
24<style>
25.znx-pay-modern{--pay-surface:var(--box-inner-bg,var(--box-bg,var(--nz-panel,var(--wc-bg-2,var(--z-panel-2,var(--s-panel,var(--primary,rgb(30,33,40))))))));--pay-surface-2:color-mix(in srgb,var(--pay-surface) 82%,#000);--pay-well:color-mix(in srgb,var(--pay-surface) 65%,#000);--pay-text:var(--font-color,var(--text,var(--nz-text,var(--wc-text,var(--z-text,var(--s-text,rgb(155,162,177)))))));--pay-muted:color-mix(in srgb,var(--pay-text) 58%,transparent);--pay-border:var(--border,var(--box-inner-border,var(--box-border,var(--nz-border-soft,var(--wc-line,var(--z-border,var(--s-border2,rgb(19,20,23))))))));--pay-accent:var(--accent,var(--link,var(--nz-accent,#d1a233)));--pay-good:#79c36a;--pay-radius:6px;margin:0 0 18px;color:var(--pay-text)}
26.znx-pay-modern *{box-sizing:border-box}
27.znx-pay-head{margin:0 0 12px;padding:14px 16px;border:1px solid var(--pay-border);border-radius:var(--pay-radius);background:var(--pay-surface);box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
28.znx-pay-head h1{margin:0 0 5px;font-size:26px;line-height:1.05;color:var(--pay-accent)}
29.znx-pay-head p{margin:0;color:var(--pay-muted)}
30.znx-pay-section{margin:0 0 14px;border:1px solid var(--pay-border);border-radius:var(--pay-radius);background:var(--pay-surface-2);box-shadow:none;overflow:hidden}
31.znx-pay-section__head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 14px;background:var(--pay-well);color:var(--pay-accent);border-bottom:1px solid var(--pay-border)}
32.znx-pay-section__head h2{margin:0;font-size:16px;color:var(--pay-accent)}
33.znx-pay-section__head span{color:var(--pay-muted);font-size:13px}
34.znx-pay-table-wrap{overflow-x:auto}
35.znx-pay-table{width:100%;border-collapse:separate;border-spacing:0}
36.znx-pay-table th{padding:10px 12px;background:var(--pay-surface);color:var(--pay-muted);font-size:12px;letter-spacing:.04em;text-align:left;text-transform:uppercase;white-space:nowrap}
37.znx-pay-table td{padding:11px 12px;border-top:1px solid var(--pay-border);vertical-align:middle}
38.znx-pay-table tr:hover td{background:color-mix(in srgb,var(--pay-accent) 6%,transparent)}
39.znx-pay-price{font-weight:900;color:var(--pay-text)}
40.znx-pay-points{display:inline-flex;align-items:center;gap:7px;font-weight:900;color:var(--pay-accent)}
41.znx-pay-points::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--pay-accent)}
42.znx-pay-bonus{display:inline-flex;padding:4px 8px;border:1px solid rgba(121,195,106,.35);border-radius:var(--pay-radius);background:rgba(121,195,106,.08);color:var(--pay-good);font-size:12px;font-weight:900}
43.znx-pay-action form{margin:0}
44.znx-pay-btn{display:inline-flex;align-items:center;justify-content:center;min-height:34px;padding:8px 14px;border:1px solid var(--pay-accent);border-radius:var(--pay-radius);background:var(--pay-accent);color:#1a1510;font-weight:900;cursor:pointer;box-shadow:none;white-space:nowrap}
45.znx-pay-btn:hover{filter:brightness(1.1)}
46.znx-pay-provider-form{padding:14px}
47.znx-pay-provider-form form{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:0}
48.znx-pay-provider-form input[type=number]{min-height:34px;padding:7px 10px;border:1px solid var(--pay-border);border-radius:var(--pay-radius);background:var(--pay-well);color:var(--pay-text)}
49.znx-pay-empty{padding:18px;border:1px solid var(--pay-border);border-radius:var(--pay-radius);background:var(--pay-surface-2)}
50@media(max-width:640px){.znx-pay-section__head{display:block}.znx-pay-section__head span{display:block;margin-top:4px}.znx-pay-table th:nth-child(3),.znx-pay-table td:nth-child(3){display:none}}
51</style>
52
53<section class="znx-pay-modern buypoints" id="buypoints">
54 <header class="znx-pay-head">
55 <h1><?= $znxPayH(t('buypoints.title')) ?></h1>
56 <p><?= $znxPayH(t('buypoints.points')) ?> / <?= $znxPayH(t('buypoints.price')) ?></p>
57 </header>
58
59 <?php if (!$anyEnabled): ?>
60 <div class="znx-pay-empty">
61 <h2><?= $znxPayH(t('buypoints.disabled')) ?></h2>
62 <p><?= $znxPayH(t('buypoints.disabled_text')) ?></p>
63 </div>
64 <?php endif; ?>
65
66 <?php foreach ($enabledProviders as $provider): ?>
67 <?php
68 $cfg = $providerConfigs[$provider];
69 $showBonus = !empty($cfg['showBonus']);
70 $currency = (string)($cfg['currency'] ?? '');
71 $pointsPerCurrency = (float)($cfg['points_per_currency'] ?? 0);
72 ?>
73 <section class="znx-pay-section">
74 <div class="znx-pay-section__head">
75 <h2><?= $znxPayH($providerLabels[$provider]) ?></h2>
76 <span><?= $znxPayH($currency) ?></span>
77 </div>
78 <div class="znx-pay-table-wrap">
79 <table<?= $firstTable ? ' id="buypointsTable"' : '' ?> class="znx-pay-table">
80 <thead>
81 <tr>
82 <th><?= $znxPayH(t('buypoints.price')) ?></th>
83 <th><?= $znxPayH(t('buypoints.points')) ?></th>
84 <?php if ($showBonus): ?><th><?= $znxPayH(t('buypoints.bonus_col')) ?></th><?php endif; ?>
85 <th><?= $znxPayH(t('buypoints.action')) ?></th>
86 </tr>
87 </thead>
88 <tbody>
89 <?php foreach ((array)$prices as $price => $points): ?>
90 <tr>
91 <td><span class="znx-pay-price"><?= $znxPayH($price) ?> <?= $znxPayH($currency) ?></span></td>
92 <td><span class="znx-pay-points"><?= number_format((int)$points) ?></span></td>
93 <?php if ($showBonus): ?><td><span class="znx-pay-bonus"><?= $znxPayH(calculate_discount($pointsPerCurrency * (float)$price, (int)$points)) ?> <?= $znxPayH(t('buypoints.bonus')) ?></span></td><?php endif; ?>
94 <td class="znx-pay-action">
95 <?php if ($provider === 'paypal'): ?>
96 <form action="https://www.paypal.com/cgi-bin/webscr" method="POST">
97 <input type="hidden" name="cmd" value="_xclick">
98 <input type="hidden" name="business" value="<?= $znxPayH($paypal['email']) ?>">
99 <input type="hidden" name="item_name" value="<?= $znxPayH(t('buypoints.shop_points_on', array('points' => $points, 'site' => $config['site_title']))) ?>">
100 <input type="hidden" name="item_number" value="1">
101 <input type="hidden" name="amount" value="<?= $znxPayH($price) ?>">
102 <input type="hidden" name="no_shipping" value="1">
103 <input type="hidden" name="no_note" value="1">
104 <input type="hidden" name="currency_code" value="<?= $znxPayH($paypal['currency']) ?>">
105 <input type="hidden" name="lc" value="GB">
106 <input type="hidden" name="bn" value="PP-BuyNowBF">
107 <input type="hidden" name="return" value="<?= $znxPayH($paypal['success']) ?>">
108 <input type="hidden" name="cancel_return" value="<?= $znxPayH($paypal['failed']) ?>">
109 <input type="hidden" name="rm" value="2">
110 <input type="hidden" name="notify_url" value="<?= $znxPayH($paypal['ipn']) ?>">
111 <input type="hidden" name="custom" value="<?= (int)$session_user_id ?>">
112 <button type="submit" class="znx-pay-btn"><?= $znxPayH(t('buypoints.purchase')) ?></button>
113 </form>
114 <?php else: ?>
115 <form action="payment.php" method="post">
116 <?php Token::create(); ?>
117 <input type="hidden" name="provider" value="<?= $znxPayH($provider) ?>">
118 <input type="hidden" name="price" value="<?= $znxPayH($price) ?>">
119 <button type="submit" class="znx-pay-btn"><?= $znxPayH(t('buypoints.purchase')) ?></button>
120 </form>
121 <?php endif; ?>
122 </td>
123 </tr>
124 <?php endforeach; ?>
125 </tbody>
126 </table>
127 </div>
128 </section>
129 <?php $firstTable = false; ?>
130 <?php endforeach; ?>
131
132 <?php if ($hasPagseguro): $pagseguroCfg = $config['pagseguro']; ?>
133 <section class="znx-pay-section">
134 <div class="znx-pay-section__head"><h2><?= $znxPayH(t('buypoints.pagseguro')) ?></h2><span><?= $znxPayH($pagseguroCfg['currency']) ?></span></div>
135 <div class="znx-pay-provider-form">
136 <form target="pagseguro" action="https://<?= $znxPayH($pagseguroCfg['urls']['www']) ?>/checkout/checkout.jhtml" method="post">
137 <input type="hidden" name="email_cobranca" value="<?= $znxPayH($pagseguroCfg['email']) ?>">
138 <input type="hidden" name="tipo" value="CP">
139 <input type="hidden" name="moeda" value="<?= $znxPayH($pagseguroCfg['currency']) ?>">
140 <input type="hidden" name="ref_transacao" value="<?= (int)$session_user_id ?>">
141 <input type="hidden" name="item_id_1" value="1">
142 <input type="hidden" name="item_descr_1" value="<?= $znxPayH($pagseguroCfg['product_name']) ?>">
143 <input type="number" name="item_quant_1" min="1" step="4" value="1">
144 <input type="hidden" name="item_peso_1" value="0">
145 <input type="hidden" name="item_valor_1" value="<?= $znxPayH($pagseguroCfg['price']) ?>">
146 <button type="submit" class="znx-pay-btn"><?= $znxPayH(t('buypoints.purchase')) ?></button>
147 </form>
148 </div>
149 </section>
150 <?php endif; ?>
151
152 <?php if ($hasPaygol): $paygolCfg = $config['paygol']; ?>
153 <section class="znx-pay-section">
154 <div class="znx-pay-section__head"><h2><?= $znxPayH(t('buypoints.paygol')) ?></h2><span><?= $znxPayH($paygolCfg['currency']) ?></span></div>
155 <div class="znx-pay-provider-form">
156 <p><?= t('buypoints.paygol_line', array('price' => $paygolCfg['price'], 'currency' => $znxPayH($paygolCfg['currency']), 'points' => $paygolCfg['points'])) ?></p>
157 <form name="pg_frm" method="post" action="http://www.paygol.com/micropayment/paynow">
158 <input type="hidden" name="pg_serviceid" value="<?= $znxPayH($paygolCfg['serviceID']) ?>">
159 <input type="hidden" name="pg_currency" value="<?= $znxPayH($paygolCfg['currency']) ?>">
160 <input type="hidden" name="pg_name" value="<?= $znxPayH($paygolCfg['name']) ?>">
161 <input type="hidden" name="pg_custom" value="<?= $znxPayH($session_user_id) ?>">
162 <input type="hidden" name="pg_price" value="<?= $znxPayH($paygolCfg['price']) ?>">
163 <input type="hidden" name="pg_return_url" value="<?= $znxPayH($paygolCfg['returnURL']) ?>">
164 <input type="hidden" name="pg_cancel_url" value="<?= $znxPayH($paygolCfg['cancelURL']) ?>">
165 <input type="image" name="pg_button" src="https://www.paygol.com/micropayment/img/buttons/150/black_en_pbm.png" border="0" alt="PayGol">
166 </form>
167 </div>
168 </section>
169 <?php endif; ?>
170</section>
171
Top