PaymentButton-komponentti on React-komponentti, joka tarjoaa täydellisen
maksukäyttöliittymän Solana-maksujen vastaanottamiseen. Se käsittelee
lompakkoyhteyden, tokenin valinnan, tapahtumien käsittelyn ja käyttöliittymän
tilanhallinnan sisäisesti. Valmiina se sisältää mukautettavat painikkeet ja
modaalit:
Tippipainike
Tippipainike
Maksumodaali
Maksumodaali
Solana Pay QR-koodimodaali
Ostoskorimodaali
Asennus
pnpm add @solana-commerce/kit
Komponentin propsit
PaymentButtonProps
PaymentButton-komponentti hyväksyy seuraavat propsit:
Pakolliset propsit
config(SolanaCommerceConfig) - Maksukomponentin pääasetukset sisältävä objekti. Tämä on ainoa pakollinen propsi. Katso SolanaCommerceConfig alta.
Valinnaiset propsit
-
paymentConfig(PaymentConfig) - Maksukohtaiset asetukset, mukaan lukien tuotteet, hinnoittelun ohitukset ja mukautetut hinnanhakijat. Katso PaymentConfig alta. -
onPayment((amount: number, currency: string) => void) - Kutsutaan, kun maksu aloitetaan sen jälkeen, kun käyttäjä vahvistaa summan ja valuutan. Vastaanottaa maksusumman (token-yksikköinä, ei lamporteina) ja valuutan tunnisteen. -
onPaymentStart(() => void) - Kutsutaan, kun maksuvirta alkaa, ennen varsinaisen tapahtuman lähettämistä. Käytä tätä lataustilojen näyttämiseen tai analytiikan seurantaan. -
onPaymentSuccess((signature: string) => void) - Kutsutaan, kun tapahtuma on vahvistettu lohkoketjussa. Vastaanottaa tapahtuman allekirjoituksen. Tässä sinun tulisi päivittää tilauksen tila, lähettää vahvistussähköpostit jne. -
onPaymentError((error: Error) => void) - Kutsutaan, kun maksu epäonnistuu missä tahansa vaiheessa (lompakkoyhteys, tapahtuman lähetys tai vahvistus). Virhe-objekti sisältää tiedot siitä, mikä meni pieleen. -
onCancel(() => void) - Kutsutaan, kun käyttäjä nimenomaisesti peruuttaa maksuvirran (sulkee modaalin tai napsauttaa peruuta). -
children(React.ReactNode) - Valinnainen mukautettu laukaisuelementti. Jos annettu, korvaa oletusmaksupainikkeen. Lapsielementin tulisi olla klikattava (esim. painike). -
className(string) - CSS-luokan nimi, jota sovelletaan laukaisupainikkeeseen (käytetään vain, kun mukautettuja lapsia ei ole annettu). -
style(React.CSSProperties) - Inline-tyylit, joita sovelletaan laukaisupainikkeeseen (käytetään vain, kun mukautettuja lapsia ei ole annettu). -
variant('default' | 'icon-only') - Painikkeen variaatio. Oletus näyttää tekstin ja kuvakkeen,'icon-only'näyttää vain maksukuvakkeen.
Konfiguraatio-objektit
SolanaCommerceConfig
Päämäärittelyobjekti, joka välitetään config-propille.
Pakolliset kentät
-
merchant(MerchantConfig) - Kauppiaan tiedot ja maksun vastaanottajan tiedot. Katso MerchantConfig. -
mode('cart' | 'tip' | 'buyNow') - Maksutila, joka määrittää painikkeen näyttötekstin ja käyttöliittymän kulun:'buyNow'- Yksittäisen tuotteen osto kiinteällä summalla'cart'- Ostoskori useilla tuotteilla'tip'- Käyttäjä valitsee oman summansa (lahjoitukset/juomarahat)
Valinnaiset kentät
-
position('inline' | 'overlay') - Miten maksukäyttöliittymä näytetään. Oletuksena'overlay'.'overlay'- Avautuu modaalina/laatikkona päällä'inline'- Upotettu suoraan sivulle
-
theme(ThemeConfig) - Visuaaliset mukautusvaihtoehdot. Katso ThemeConfig. -
network('mainnet' | 'devnet' | 'testnet') - Käytettävä Solana-verkko. Oletuksena'mainnet'. -
rpcUrl(string) - Mukautettu RPC-päätepisteen URL. Jos ei anneta, käyttää oletusarvoista julkista päätepistettä valitulle verkolle. -
allowedMints(string[]) - Taulukko token mint -osoitteista maksutapojen rajoittamiseksi. Jos ei anneta, kaikki tuetut tokenit (SOL, USDC, USDT) ovat käytettävissä. -
showQR(boolean) - Näytetäänkö QR-koodimaksuvaihtoehto. Hyödyllinen mobiilissa ja Solana Pay -integraatiossa. -
enableWalletConnect(boolean) - Määrittää, otetaanko lompakkoyhteys käyttöön. Aseta arvoksifalse, jos käsittelet lompakkoyhteyden ulkoisesti. -
showMerchantInfo(boolean) - Määrittää, näytetäänkö kauppiaan nimi ja logo maksukäyttöliittymässä. -
debug(boolean) - Ottaa käyttöön yksityiskohtaisen konsolilokituksen virheenkorjausta varten.
MerchantConfig
Määrittää maksun vastaanottajan ja yritystiedot.
Pakolliset kentät
-
name(string) - Yrityksen tai kauppiaan nimi, joka näytetään käyttäjille kassalla. -
wallet(string) - Solana-lompakko-osoite, joka vastaanottaa maksut. Täytyy olla kelvollinen base58-koodattu Solana-osoite.
Valinnaiset kentät
-
logo(string) - URL kauppiaan logokuvaan. Näytetään maksukäyttöliittymässä, kunshowMerchantInfoon käytössä. -
description(string) - Yrityksen kuvaus, joka näytetään käyttäjille.
ThemeConfig
Visuaalinen mukauttaminen maksukäyttöliittymälle.
Kaikki kentät ovat valinnaisia ja niillä on järkevät oletusarvot.
-
primaryColor(string) - Ensisijainen brändiväri, jota käytetään painikkeissa ja korostuksissa. Oletusarvo:'#9945FF'(Solanan violetti). -
secondaryColor(string) - Toissijainen korostusväri. Oletusarvo:'#14F195'(Solanan vihreä). -
backgroundColor(string) - Modaalin/säilön taustaväri. Oletusarvo:'#ffffff'. -
textColor(string) - Ensisijainen tekstin väri. Oletusarvo:'#111827'. -
borderRadius('none' | 'sm' | 'md' | 'lg' | 'xl' | 'full') - Reunan pyöristys, jota sovelletaan käyttöliittymäelementteihin. Oletusarvo:'lg'.'none'= 0px'sm'= 12px'md'= 16px'lg'= 20px'xl'= 24px'full'= Täysin pyöristetty (kontekstiriippuvainen)
-
fontFamily(string) - Kirjasintyyppi kaikelle tekstille. Oletusarvo:'system-ui, -apple-system, sans-serif'. -
buttonShadow('none' | 'sm' | 'md' | 'lg' | 'xl') - Varjostus painikkeille. Oletusarvo:'md'. -
buttonBorder('none' | 'black-10') - Reunatyyli painikkeille. Oletusarvo:'black-10'(hienovarainen musta reunus).
PaymentConfig
Kehittynyt maksukonfiguraatio hinnoittelua, desimaaleja ja tuotteita varten.
Kaikki kentät ovat valinnaisia.
-
products(Product[]) - Tuotteiden taulukko'cart'- tai'buyNow'-tiloille. Vaaditaan käytettäessä näitä tiloja. Jokaisella tuotteella on:id(merkkijono, vaaditaan) - Yksilöllinen tuotetunnistename(merkkijono, vaaditaan) - Käyttäjälle näytettävä tuotteen nimiquantity(numero, vaaditaan) - Tämän tuotteen määräprice(numero, valinnainen) - Yksikköhinta USD:naunitAmount(numero, valinnainen) - Vaihtoehtoprice-kentälledescription(merkkijono, valinnainen) - Tuotteen kuvaus
-
solPriceUsd(number) - Kiinteä SOL-hinta USD:na. Käytä tätä testaukseen tai kun haluat lukita SOL-hinnan. Jos arvoa ei anneta, komponentti hakee nykyisen hinnan CoinGeckosta. -
getSolPrice(() => Promise<number>) - Mukautettu funktio SOL-hinnan hakemiseen. Käytä tätä:- Yksityisiin hintaoraakkeleihin
- Julkisten API-pyyntörajoitusten välttämiseen
- Mukautettuun hinnoittelulogiikkaan
- Yrityskäyttöön
Jos arvoa ei anneta, oletuksena käytetään CoinGeckon julkista API:a yhden minuutin välimuistilla.
-
tokenDecimals({ [currency: string]: number }) - Ohita tokenin desimaalitarkkuus. Hyödyllinen mukautetuille tokeneille. Esimerkki:tokenDecimals: {'CUSTOM': 8,'USDC': 6 // Can override defaults} -
fallbackSolPriceUsd(number) - Varahinta SOL:lle, jos hinta-API epäonnistuu eikä välimuistia ole saatavilla. Ilman tätä maksukäyttöliittymä näyttää virheen, jos hinnan haku epäonnistuu.
Sisäiset hookit
PaymentButton-komponentti käyttää useita sisäisiä hookeja tilan hallintaan ja
arvojen laskemiseen:
useTheme(theme?: ThemeConfig)
Yhdistää käyttäjän antaman teemakonfiguraation oletusteema-arvoihin. Palauttaa
täydellisen ThemeConfig-objektin, jossa kaikki kentät on täytetty.
Oletusteema-arvot:
primaryColor: '#9945FF'secondaryColor: '#14F195'backgroundColor: '#ffffff'textColor: '#111827'borderRadius: 'lg'fontFamily: 'system-ui, -apple-system, sans-serif'buttonShadow: 'md'buttonBorder: 'black-10'
Koukku on memoizoitu ja laskee uudelleen vain, kun teeman konfiguraatio muuttuu.
useTotalAmount(mode, paymentConfig?)
Laskee maksun kokonaissumman kaupankäyntitilan ja tuotteiden perusteella.
Toiminta tilasta riippuen:
'tip'-tila - Palauttaa0(käyttäjä määrittää summan)'cart'- ja'buyNow'-tilat - Laskee yhteenprice * quantitykaikille tuotteille kohteessapaymentConfig.products
Koukku käsittelee poikkeustilanteet:
- Puuttuvat tai virheelliset hinnat oletuksena
0 - Puuttuvat tai virheelliset määrät oletuksena
0 - Varmistaa, että kaikki arvot ovat äärellisiä lukuja
- Tukee sekä
price- ettäunitAmount-tuotekenttiä
Palauttaa kokonaissumman numerona (USD:nä ostoskorille/buyNow:lle, 0 juomarahalle).
usePaymentUrl(merchant, amount, mode)
Luo Solana Pay -URL:n maksua varten. Tämä URL voidaan koodata QR-koodiksi mobiililompakon skannausta varten.
Palauttaa: solana:-protokollan URL:n kyselyparametreilla:
recipient- Kauppiaan lompakko-osoiteamount- Maksun summareference- Yksilöllinen maksuun liittyvä viite (luotu aikaleimasta + satunnainen merkkijono)label- Kauppiaan nimi (URL-turvallisesti käsitelty)message- Tilaan perustuva kontekstuaalinen viesti
Palauttaa tyhjän merkkijonon, jos kauppiaan lompakko on virheellinen tai summa
on <= 0.
Turvallisuus: Kauppiaan nimi käsitellään käyttäen sanitizeString()
XSS-hyökkäysten estämiseksi URL-injektoinnin kautta.
Validointi ja virheiden käsittely
Komponentti suorittaa validoinnin ennen renderöintiä:
-
Lompakon validointi - Käyttää
isAddress()funktiota kohteestagillkauppiaan lompakko-osoitteen validointiin. Jos osoite on virheellinen, renderöi virhetilan maksukäyttöliittymän sijaan. -
Hinnoittelun validointi - Varmistaa, että kelvollinen hinnoittelu on määritetty:
'tip'-tilassa: Aina kelvollinen (käyttäjä valitsee summan)'cart'- ja'buyNow'-tiloissa: Validoi, ettätotalAmount > 0
-
SSR-turvallisuus - Käyttää asiakaspuolen tunnistusta hydraatiovirheiden estämiseksi.
isClient-tila varmistaa, että vain selaimessa toimivat ominaisuudet (kutenlocalStoragelompakon pysyvyyteen) suoritetaan vain asiakaspuolella.
Komponenttiarkkitehtuuri
PaymentButton käärii kaikki lapset kahteen kontekstipalveluntarjoajaan:
-
AppProvider- Tarjoaa lompakon yhteystilan ja liittimen asiakkaan- Automaattinen yhdistäminen: oletuksena pois käytöstä
- Tallennus: Käyttää
localStorage:ta, kun saatavilla (vain asiakaspuolella) - Virheenkorjaustila: määritettävissä konfiguraation kautta
-
ArcProvider- Tarjoaa Solana-lohkoketjuasiakkaan ja RPC-yhteyden- Verkko: Määräytyy
config.network:n perusteella - RPC-URL: Käyttää palvelinpuolen selvitystä varalla julkisiin päätepisteiden
- Verkko: Määräytyy
RPC-URL:n selvitys
Komponentti sisältää kehittyneen RPC-URL:n selvityksen:
- Jos
config.rpcUrlon annettu, sitä käytetään suoraan - Muussa tapauksessa se kutsuu palvelinpuolen selvittäjää, joka valitsee luotettavat päätepisteet
- Palaa
https://api.mainnet-beta.solana.com:iin, jos selvitys epäonnistuu - Selvitys tapahtuu asynkronisesti asennuksen yhteydessä ja päivittää tilan
Renderöintitilat
Päällystila (position: 'overlay' tai oletus):
- Renderöi laukaisupainikkeen (mukautettu tai oletus)
- Avaa maksukäyttöliittymän responsiivisessa modaalissa (työpöytä) tai laatikossa (mobiili)
- Käyttää
ResponsiveShell-komponenttia mukautuviin asetteluihin
Sisäänrakennettu tila (position: 'inline'):
- Upottaa maksukäyttöliittymän suoraan sivulle
- Laukaisupainiketta ei tarvita
- Hyödyllinen omistettuihin kassasivuihin
Molemmat tilat käyttävät SecureIframeShell:ta sisäisesti maksukäyttöliittymän
renderöimiseen eristetyssä iframessa turvallisuuden vuoksi.
Käyttöesimerkit
Perusmaksu
<PaymentButtonconfig={{merchant: {name: "Coffee Shop",wallet: "your-wallet-address"},mode: "buyNow"}}paymentConfig={{products: [{id: "coffee-001",name: "Espresso",price: 4.5,quantity: 1}]}}onPaymentSuccess={(sig) => {console.log("Payment confirmed:", sig);}}/>
Tippivimpain mukautetulla hinnanhakijalla
<PaymentButtonconfig={{merchant: {name: "Content Creator",wallet: "creator-wallet"},mode: "tip"}}paymentConfig={{// Use your own price API to avoid rate limitsgetSolPrice: async () => {const res = await fetch("/custom-api/solana-price");const data = await res.json();return data.price;},// Fallback if your API failsfallbackSolPriceUsd: 200}}/>
Ostoskori mukautetulla teemalla
<PaymentButtonconfig={{merchant: {name: "My Store",wallet: "store-wallet",logo: "/logo.png"},mode: "cart",theme: {primaryColor: "#FF6B6B",backgroundColor: "#1a1a1a",textColor: "#ffffff",borderRadius: "xl",buttonShadow: "lg"},showMerchantInfo: true}}paymentConfig={{products: [{ id: "1", name: "T-Shirt", price: 25, quantity: 2 },{ id: "2", name: "Hoodie", price: 45, quantity: 1 }]}}onPaymentSuccess={(signature) => {// Verify transaction on your backendfetch("/api/verify-payment", {method: "POST",body: JSON.stringify({ signature })});}}/>
Mukautettu laukaisupainike
<PaymentButtonconfig={{merchant: { name: "Shop", wallet: "address" },mode: "buyNow"}}paymentConfig={{products: [{ id: "1", name: "Product", price: 10, quantity: 1 }]}}><button className="custom-button">🚀 Pay with Solana</button></PaymentButton>
Is this page helpful?