Payments
Kif Iddisinjajt Payment Gateway Orchestrator Wara Kors tal-iGaming
PayMaestro: API waħda quddiem ħafna payment gateways, b'routing, cascading retries, idempotency infurzata mid-database, u fraud screening infurmat minn ċertifikazzjoni anti-frodi tal-iGaming Academy.
Wara li temmejt il-kors Anti-Fraud and Payments Handling mill-iGaming Academy, ridt verament nibni xi ħaġa b'dak li għallimni minflok inħallih joqgħod bħala ċertifikat. Dan sar PayMaestro: API ta' payment orchestration, mibnija spec-first fuq weekend.
X'jfisser verament orchestration
Payment orchestration hija s-saff fuq il-payment gateways. Merchant jintegra darba, diversi rotot ta' akkwist jgħixu wara dik l-integrazzjoni waħda, u l-pjattaforma ta' orchestration iżżid l-intelliġenza: tagħżel l-aħjar rotta għal kull tranżazzjoni, terġa' tipprova bla periklu meta rotta tfalli, u żżomm evidenza ta' kollox li ġara.
Dik l-aħħar parti timporta aktar f'dan il-qasam milli fil-biċċa l-kbira. Ir-rekords tal-pagamenti huma evidenza regolatorja, għalhekk id-disinn irid jittrattahom hekk mill-bidu.
Hard declines u soft declines mhumiex l-istess falliment
Din hija d-distinzjoni li l-kors għamel konkreta għalija, u hija l-qalba tal-politika ta' cascade. Soft decline, fondi insuffiċjenti jew timeout, huwa rkuprabbli, għalhekk jagħmel sens li tipprova l-gateway li jmiss fir-rotta. Hard decline ifisser card misruqa jew imblukkata, u li terġa' tipprova dik fuq acquirer ieħor mhix reżiljenza, hija sempliċiment li tipprova tgħaddi tranżazzjoni frawdolenti minn imkien ieħor.
Għalhekk il-cascade tieqaf minnufih fuq hard decline u tkompli fuq waħda soft:
if (result.ResultType is GatewayResultType.Approved)
{
payment.Authorize();
payment.Capture();
return;
}
if (result.ResultType is GatewayResultType.HardDecline)
break; // fraud signal: never retry elsewhere
// SoftDecline / Error -> next gateway in the route
Fraud screening qabel ma jiġi kkuntattjat kwalunkwe gateway
Kull regola ta' frodi timplimenta kuntratt Domain wieħed, għalhekk li żżid waħda ma tmiss l-orchestrator:
public interface IFraudRule
{
string RuleName { get; }
Task<FraudVerdict> EvaluateAsync(Payment payment, CancellationToken ct = default);
}
L-ewwel regola live hija decline velocity: card b'tliet tentattivi rrifjutati jew aktar fi 24 siegħa hija l-mudell klassiku ta' card-testing, għalhekk ir-raba' tentattiv jiġi rrifjutat b'żero sejħiet gateway. Ix-screening jaħdem qabel ma jiġi kkuntattjat kwalunkwe gateway, li jfisser li card magħrufa bħala ħażina ma tiswa xejn biex tiġi rrifjutata.
L-idempotency tappartjeni għad-database, mhux biss għall-kodiċi
Jekk merchant jerġa' jipprova talba, l-istess pagament qatt m'għandu jiġi ċċarġjat darbtejn. L-approċċ ovvju huwa li tiċċekkja jekk l-idempotency key teżistix qabel ma tinserixxi, iżda dan għandu window ta' race bejn il-qari u l-kitba, u żewġ retries konkurrenti jistgħu t-tnejn jgħaddu miċ-check.
Għalhekk l-idempotency key għandha unique index fuqha. Id-database tisserjalizza ż-żewġ inserts, dik li titlef titfa' żball, u dak l-eċċezzjoni jinqabad u jitwieġeb billi jerġa' jintwera r-riżultat maħżun. Il-garanzija tgħix fejn il-konkorrenza verament tissolva minflok fil-kodiċi tal-applikazzjoni li qed jittama jirbaħ race.
Ir-Routing bħala konfigurazzjoni
L-eliġibbiltà tal-gateway, liema muniti kull waħda tappoġġa u liema limiti ta' ammont japplikaw, flimkien mal-prijorità tar-rotta, kollha jgħixu f' appsettings.json u jiġu marbuta permezz tal-options pattern. Li żżid acquirer hija klassi waħda li timplimenta l-kuntratt tal-gateway u entrata waħda ta' konfigurazzjoni, mingħajr ebda bidla għal kwalunkwe loġika tan-negozju.
Fejn clean architecture verament ħaqqet postha
Dan huwa l-proġett fejn is-saffi li kont qed nitgħallem dwarhom waqfu milli jkunu teoretiċi. API → Application → Domain ← Infrastructure, bid-Domain iżżomm l-entitajiet, l-istate machine tal-pagament, u l-kuntratti kollha, u ma jkollhiex ebda referenza esterna. Infrastructure timplimenta dawk il-kuntratti b'EF Core u SQLite.
L-istate machine tal-pagament hija mħarsa ġewwa l-aggregate innifsu, għalhekk transizzjoni invalida titfa' eċċezzjoni tad-domain minflok tikkorrompi rekord bil-mod. M'hemm ebda mogħdija lura minn Captured. Il-proġetti bikrija tiegħi użaw mudell anemiku fejn l-entità kienet sempliċiment borża ta' properties u r-regoli kienu jgħixu xi mkien ieħor. Li nittrasferixxi l-invarjanti ġewwa l-aggregate kienet bidla deliberata minn dak.
Audit-first, u konxju mill-PCI
Kull tentattiv ta' gateway jinżamm bl-isem tal-gateway, l-ordni li ġie ppruvat fih, il-kodiċi tar-riżultat, u kemm damet. Kull flag ta' frodi jinżamm ukoll, u t-tħassir huwa limitat fil-livell tad-database. Jekk acquirer iqajjem talba għal informazzjoni, GET wieħed jirritorna l-pakkett evidenza kollu.
Biss il-BIN u l-aħħar erba' ċifri ta' card jinżammu, qatt in-numru sħiħ, li huwa l-bażi biex tittratta dejta ta' cards fl-ewwel lok.
X'nżid li jmiss
Aktar regoli fuq l-istess kuntratt IFraudRule: nuqqas ta' qbil ġeografiku bejn il-pajjiż tal-IP u l-pajjiż tal-card, li teħtieġ dejta reali ta' BIN u GeoIP biex tkun ta' sinifikat, u individwazzjoni ta' anomaliji fl-ammont. Imbagħad refunds, u CI/CD lejn Azure Container Apps.