Platba kreditom v obchode
S balíkom credits-for-laravel môžu kupujúci zaplatiť celú objednávku alebo jej časť zo skupiny kreditov v mene objednávky. Priraďte skupine menu a zapnite platbu kreditom:
// config/credits.php — denominate the bucket in your shop currency (one bucket per currency)
'currencies' => ['store_credit' => 'EUR'],SHOPS_ALLOW_STORE_CREDIT=true
SHOPS_STORE_CREDIT_BUCKET=store_credit
SHOPS_REFUND_TO_STORE_CREDIT=falseModel kupujúceho musí implementovať RoundlyConsulting\Credits\Interfaces\Creditable z balíka credits a používať jeho trait HasCredits — samotný trait nestačí: objednávka, ktorej zákazník nie je Creditable, sa celá zaplatí cez bránu bez uplatnenia kreditu:
use Illuminate\Foundation\Auth\User as Authenticatable;
use RoundlyConsulting\Credits\Interfaces\Creditable;
use RoundlyConsulting\Credits\Traits\HasCredits;
class User extends Authenticatable implements Creditable
{
use HasCredits;
}Uplatnenie kreditu
Pri zapnutom allow_store_credit Shops::order($order)->charge() najprv strhne dostupný kredit a platobnej bráne pošle len zvyšok ($order->gatewayAmount()). Objednávka, ktorú kredit pokryje celú, sa označí ako zaplatená bez platby cez bránu:
use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Shops\Facades\Shops;
use RoundlyConsulting\Shops\Payments\StoreCreditTender;
// Automatic: with allow_store_credit on, credit goes first and the gateway gets the rest.
$result = Shops::order($order)->charge();
// Or apply it yourself (once per order):
$owed = app(StoreCreditTender::class)->apply($order, $customer); // as much as possible
$owed = app(StoreCreditTender::class)->apply($order, $customer, Money::ofMinor(500, 'EUR')); // or cap the debit
$order->store_credit_applied; // ?Money, in the order currency
$order->gatewayAmount(); // what is still due through the gateway
app(StoreCreditTender::class)->restore($order); // ?Money — hand it back (cancel() does this)- apply() strhne najmenšiu z hodnôt: sumu objednávky, zostatok skupiny a váš strop, zapíše ju do store_credit_applied a vráti, čo zostáva zaplatiť — v jednej transakcii.
- Nulová uplatniteľná suma nič nezmení a vráti celú sumu.
- Zamietnutá platba si zo strhnutého kreditu nič neponechá — celá platba sa vráti späť — a zrušenie objednávky vráti kredit, ktorý na ňu bol uplatnený, aj ten, ktorý ste uplatnili sami cez apply(). restore() ho vráti na požiadanie; druhé volanie už nevráti nič.
- StoreCreditAlreadyAppliedException — kredit už bol na objednávku uplatnený (overuje sa znova pod zámkom riadku objednávky).
- StoreCreditBucketNotDenominated — skupina nemá menu v credits.currencies.
- StoreCreditCurrencyMismatch — skupina je v inej mene. Všetky tri výnimky nastanú skôr, než sa kredit pohne.
Refundácia ako kredit
Pri zapnutom payment.refund_to_store_credit listener GrantStoreCreditOnRefund pri refundácii objednávky pripíše celú jej konečnú cenu späť do skupiny — preto refundáciu cez bránu vynechajte, inak kupujúci dostane peniaze dvakrát. Bez zákazníka typu Creditable alebo pri nekladnej sume neurobí nič; skupinu bez meny alebo v inej mene preskočí s Log::warning() namiesto výnimky, pretože refundácia už prebehla.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.