← l-artikli kollha

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.

Kif Iddisinjajt Payment Gateway Orchestrator Wara Kors tal-iGaming

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.