cppay-sdk 0.0.2-beta.31 → 0.0.2-beta.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cppay-DXZVBIDi.cjs → cppay-BYRjTzRF.cjs} +1 -1
- package/dist/{cppay-BPtRBPjB.js → cppay-C_gp2ZZ3.js} +4 -7
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +18 -8
- package/dist/index.js +1 -1
- package/dist/inject-style-Cd5D3aj8.cjs +1 -0
- package/dist/inject-style-DtFJ9cds.js +7 -0
- package/dist/react.cjs +1 -1
- package/dist/react.d.ts +135 -2
- package/dist/react.js +516 -432
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.ts +125 -12
- package/dist/vue.js +438 -350
- package/package.json +1 -1
- package/dist/cppay-sdk.css +0 -2
- package/dist/inject-style-Boo8CMsU.cjs +0 -1
- package/dist/inject-style-CWza6SKp.js +0 -7
package/dist/vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./inject-style-Boo8CMsU.cjs`),t=require(`./cppay-DXZVBIDi.cjs`);let n=require(`vue`),r=require(`qrcode`);r=e.r(r);let i=require(`rxjs`),a=require(`rxjs/operators`),o=require(`viem`),s=require(`viem/chains`),ee=require(`@reown/appkit`),te=require(`@reown/appkit-adapter-ethers`);var ne={class:`_cppay-dialog`},re={class:`_cppay-header`},ie={class:`_cppay-title`},ae=[`disabled`],c={class:`_cppay-content`},oe={key:0,style:{"text-align":`center`,padding:`2rem 0`}},se={style:{"font-size":`1.5rem`,"font-weight":`600`,color:`#10b981`,margin:`0 0 0.5rem 0`}},ce={style:{color:`#6b7280`,margin:`0`}},le={key:1},ue={class:`_cppay-section`},de={class:`_cppay-grid`},fe=[`onClick`],pe=[`src`,`alt`],me={class:`_cppay-section`},he={class:`_cppay-grid`},ge=[`onClick`],_e=[`src`,`alt`],ve={class:`_cppay-section`},ye={class:`_cppay-price-box`},be={class:`_cppay-price-row`},xe={class:`_cppay-price-amount`},Se={class:`_cppay-price-main`},Ce={class:`_cppay-price-sub`},we={class:`_cppay-section`},Te={class:`_cppay-error-tooltip`},Ee={key:0,class:`_cppay-error-tooltip-full`},De=[`disabled`],l={key:2},u={class:`_cppay-qr-container`},d={class:`_cppay-qr-code`},f=[`src`],p={class:`_cppay-section`},m={key:0,class:`_cppay-info-box`},h={class:`_cppay-info-label`},g={class:`_cppay-info-value`},_={class:`_cppay-info-box`},v={class:`_cppay-info-label`},y={class:`_cppay-address-row`},b={key:1,class:`_cppay-info-box`,style:{background:`#fff3cd`,"border-color":`#ffc107`}},x={class:`_cppay-error-tooltip`},S={key:0,class:`_cppay-error-tooltip-full`},C={key:1,class:`_cppay-section`},w=[`disabled`],T={key:1},E={class:`_cppay-btn-container`},Oe=[`disabled`],ke=[`disabled`],Ae={style:{"text-align":`center`,"margin-top":`8px`,"font-size":`12px`,color:`#666`}},je={class:`_cppay-section`},Me=[`disabled`],Ne={class:`_cppay-section`},Pe=[`disabled`],D=(0,n.defineComponent)({__name:`PaymentDialog`,props:{modelValue:{type:Boolean},apikey:{},orderId:{},amount:{},plain:{default:`one-time`},intervalDays:{default:30}},emits:[`update:modelValue`,`success`,`error`],setup(e,{emit:D}){let O=e,k=D,A=new t.t(O.apikey),j=(0,n.ref)(`select`),M=(0,n.ref)(!1),N=(0,n.ref)(!1),P=(0,n.ref)(),F=(0,n.ref)(!1),I=(0,n.ref)([]),L=(0,n.ref)(),R=(0,n.ref)(),z=(0,n.ref)(null),B=(0,n.ref)(),V=(0,n.ref)(),H=(0,n.ref)(!1),U=(0,n.ref)(),W=(0,n.ref)(null),G,K=(0,n.computed)(()=>I.value.find(e=>e.chain===L.value)),q=(0,n.computed)(()=>K.value?.tokens||[]),J=(0,n.computed)(()=>q.value.find(e=>e.symbol===R.value)),Fe=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,Ie=(e,t)=>{let n=parseFloat(e);return isNaN(n)?`0`:n.toFixed(t).replace(/\.?0+$/,``)},Y=(0,n.computed)(()=>{if(!R.value||!J.value)return`0`;let e=parseFloat(J.value.price);if(isNaN(e)||e===0)return`0`;let t=Fe(R.value);return Ie((parseFloat(O.amount)/e).toFixed(t),t)}),Le=()=>{z.value&&(P.value=void 0,N.value=!0,O.plain===`one-time`?$(z.value.paymentId):O.plain===`subscription`&&$(z.value.subscriptionId))},X=()=>{M.value||N.value||(k(`update:modelValue`,!1),setTimeout(()=>{j.value=`select`,P.value=void 0,z.value=null},300))},Re=async()=>{try{M.value=!0,P.value=void 0,I.value=await A.getSupportedChains(),I.value.length>0&&(L.value=I.value[0].chain)}catch(e){P.value=e instanceof Error?e.message:`加载支付网络失败`,k(`error`,e)}finally{M.value=!1}};(0,n.onMounted)(()=>{typeof window<`u`&&!G&&(G=(0,ee.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new te.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[s.mainnet,s.bsc,s.polygon,s.arbitrum,s.optimism,s.base],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),U.value=G.getProvider(`eip155`),V.value=G.getAddress(),G.subscribeAccount(e=>{e.isConnected?V.value=e.address:(V.value=void 0,U.value=void 0)}),G.subscribeProviders(e=>{U.value=e?.eip155}))});let Z=async()=>{try{H.value=!0,P.value=void 0,G&&await G.open()}catch(e){console.error(`钱包连接失败:`,e),P.value=e instanceof Error?e.message:`钱包连接失败`,k(`error`,e)}finally{H.value=!1}},Q=async e=>{if(U.value)try{await U.value.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},ze=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.value=!0;let e=z.value;await Q(K.value.chainId);let t=(0,o.createWalletClient)({account:V.value,transport:(0,o.custom)(U.value)});if(J.value.address){let n=await t.writeContract({address:J.value.address,abi:[{name:`transfer`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`to`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`transfer`,args:[e.receiveAddress,(0,o.parseUnits)(e.paymentAmount,J.value.decimals)],chain:null});console.log(`转账交易哈希:`,n)}else{let n=await t.sendTransaction({to:e.receiveAddress,value:(0,o.parseUnits)(e.paymentAmount,J.value.decimals),chain:null});console.log(`转账交易哈希:`,n)}M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包支付失败:`,e),P.value=e instanceof Error?e.message:`钱包支付失败`,k(`error`,e),M.value=!1}},Be=async()=>{if(!(!V.value||!U.value||!z.value||!J.value||!K.value))try{M.value=!0;let e=z.value;await Q(K.value.chainId);let t=(0,o.createWalletClient)({account:V.value,transport:(0,o.custom)(U.value)});if(!J.value.address)throw Error(`订阅支付不支持原生代币`);let n=await t.writeContract({address:J.value.address,abi:[{name:`approve`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`spender`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`approve`,args:[e.receiveAddress,(0,o.parseUnits)(e.paymentAmount,J.value.decimals)],chain:null});console.log(`授权交易哈希:`,n),M.value=!1,N.value=!0,$(e.paymentId)}catch(e){console.error(`钱包授权失败:`,e),P.value=e instanceof Error?e.message:`钱包授权失败`,k(`error`,e),M.value=!1}},Ve=async()=>{if(!V.value){await Z();return}O.plain===`one-time`?await ze():O.plain===`subscription`&&await Be()},He=async()=>{if(!(!L.value||!R.value))try{M.value=!0,P.value=void 0;let e;O.plain===`one-time`?e=await A.createPayment(`one-time`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amount:Y.value}):O.plain===`subscription`&&(e=await A.createPayment(`subscription`,{paymentChain:L.value,paymentToken:R.value,orderId:O.orderId,amountOfUsd:Y.value,intervalDays:O.intervalDays||30})),z.value={paymentId:e.paymentId||e.subscriptionId,paymentAmount:e.paymentAmount||e.approveAmount,receiveAddress:e.receiveAddress||e.spenderAddress||``};let t=`${L.value.toLowerCase()}:${z.value.receiveAddress}?amount=${z.value.paymentAmount}`;B.value=await r.toDataURL(t,{width:200,margin:2,errorCorrectionLevel:`H`}),j.value=`payment`}catch(e){P.value=e instanceof Error?e.message:`创建支付失败`,k(`error`,e)}finally{M.value=!1}},$=e=>{let t=()=>(0,i.defer)(()=>O.plain===`subscription`?A.checkSubscriptionPaymentStatus({subscriptionId:e}):A.checkOnetimePaymentStatus({paymentId:e})).pipe((0,a.timeout)(15e3),(0,a.retry)({count:3,delay:2e3}));W.value?.unsubscribe(),W.value=t().pipe((0,a.expand)(e=>e.status===`pending`?(0,i.timer)(2e3).pipe((0,a.switchMap)(()=>t())):i.EMPTY),(0,a.tap)(e=>{e.status===`expired`&&(N.value=!1),e.status===`paid`&&(N.value=!1,j.value=`success`,k(`success`,e)),e.status===`failed`&&(N.value=!1),e.status===`approved`&&(N.value=!1,j.value=`success`,k(`success`,e))})).subscribe({error:e=>{console.error(`支付状态检查错误:`,e),P.value=e instanceof Error?e.message:`检查支付状态失败`,N.value=!1,k(`error`,e)}})},Ue=async()=>{z.value?.receiveAddress&&await navigator.clipboard.writeText(z.value.receiveAddress)};return(0,n.watch)(()=>O.modelValue,e=>{e&&I.value.length===0&&Re()}),(0,n.watch)(L,()=>{q.value.length>0&&(R.value=q.value[0].symbol)}),(0,n.watch)(j,e=>{e===`payment`&&z.value&&$(z.value.paymentId)}),(0,n.onUnmounted)(()=>{W.value?.unsubscribe()}),(t,r)=>((0,n.openBlock)(),(0,n.createBlock)(n.Teleport,{to:`body`},[(0,n.createVNode)(n.Transition,{name:`_cppay-fade`},{default:(0,n.withCtx)(()=>[e.modelValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-overlay`,onClick:r[5]||=(0,n.withModifiers)(e=>!M.value&&!N.value&&X(),[`self`])},[(0,n.createElementVNode)(`div`,ne,[(0,n.createElementVNode)(`div`,re,[(0,n.createElementVNode)(`h2`,ie,(0,n.toDisplayString)(j.value===`select`?`选择支付方式`:j.value===`success`?`支付结果`:`完成支付`),1),(0,n.createElementVNode)(`button`,{onClick:X,class:`_cppay-close-btn`,disabled:M.value||N.value},[...r[6]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 18L18 6M6 6l12 12`})],-1)]],8,ae)]),(0,n.createElementVNode)(`div`,c,[j.value===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[r[7]||=(0,n.createElementVNode)(`div`,{style:{"font-size":`64px`,"margin-bottom":`1rem`}},`✅`,-1),(0,n.createElementVNode)(`h3`,se,(0,n.toDisplayString)(O.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ce,(0,n.toDisplayString)(O.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):(0,n.createCommentVNode)(``,!0),j.value===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,le,[(0,n.createElementVNode)(`div`,ue,[r[8]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,de,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(I.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>L.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,L.value===e.chain?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,pe)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,fe))),128))])]),(0,n.createElementVNode)(`div`,me,[r[9]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,he,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(q.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.symbol,onClick:t=>R.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,R.value===e.symbol?`_cppay-selected`:``])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,_e)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,ge))),128))])]),(0,n.createElementVNode)(`div`,ve,[(0,n.createElementVNode)(`div`,ye,[(0,n.createElementVNode)(`div`,be,[r[10]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,xe,[(0,n.createElementVNode)(`div`,Se,(0,n.toDisplayString)(Y.value??`-`)+` `+(0,n.toDisplayString)(R.value??``),1),(0,n.createElementVNode)(`div`,Ce,`≈ $`+(0,n.toDisplayString)(e.amount),1)])])])]),(0,n.createElementVNode)(`div`,we,[P.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[0]||=e=>F.value=!0,onMouseleave:r[1]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,Te,[r[11]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Ee,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`button`,{onClick:He,disabled:!L.value||!R.value||M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?`处理中...`:`继续支付`),9,De)])])):j.value===`payment`&&z.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,l,[(0,n.createElementVNode)(`div`,u,[(0,n.createElementVNode)(`div`,d,[B.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:B.value,alt:`QR Code`,style:{width:`160px`,height:`160px`,display:`block`}},null,8,f)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,p,[R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,m,[(0,n.createElementVNode)(`div`,h,(0,n.toDisplayString)(O.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,g,(0,n.toDisplayString)(z.value.paymentAmount)+` `+(0,n.toDisplayString)(R.value),1)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,_,[(0,n.createElementVNode)(`div`,v,(0,n.toDisplayString)(O.plain===`subscription`?`授权合约地址`:`支付地址`),1),(0,n.createElementVNode)(`div`,y,[(0,n.createElementVNode)(`code`,null,(0,n.toDisplayString)(z.value.receiveAddress),1),(0,n.createElementVNode)(`button`,{onClick:Ue,class:`_cppay-copy-btn`,title:`复制地址`},[...r[12]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z`})],-1)]])])]),O.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,b,[...r[13]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-info-label`,style:{color:`#856404`}},`📌 订阅说明`,-1),(0,n.createElementVNode)(`div`,{class:`_cppay-info-value`,style:{"font-size":`12px`,color:`#856404`}},` 订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。 `,-1)]])):(0,n.createCommentVNode)(``,!0)]),P.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[2]||=e=>F.value=!0,onMouseleave:r[3]||=e=>F.value=!1},[(0,n.createElementVNode)(`div`,x,[r[14]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value),1)]),F.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,S,(0,n.toDisplayString)(P.value),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),N.value?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,C,[V.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,T,[(0,n.createElementVNode)(`div`,E,[(0,n.createElementVNode)(`button`,{onClick:Ve,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(M.value?e.plain===`subscription`?`授权中...`:`支付中...`:e.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,Oe),(0,n.createElementVNode)(`button`,{onClick:Z,disabled:M.value,class:`_cppay-btn _cppay-btn-primary`},` 💰钱包状态 `,8,ke)]),(0,n.createElementVNode)(`div`,Ae,` 已连接: `+(0,n.toDisplayString)(V.value.slice(0,6))+`...`+(0,n.toDisplayString)(V.value.slice(-4)),1)])):((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,onClick:Z,disabled:H.value,class:`_cppay-btn _cppay-btn-secondary`,style:{display:`flex`,"align-items":`center`,"justify-content":`center`,gap:`0.5rem`,padding:`0.75rem 1rem`,width:`100%`}},[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(H.value?`连接中...`:`💳 连接钱包`),1)],8,w))])),(0,n.createElementVNode)(`div`,je,[(0,n.createElementVNode)(`button`,{onClick:Le,disabled:N.value,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(N.value?`检查中...`:`我已完成支付`),9,Me)]),(0,n.createElementVNode)(`div`,Ne,[(0,n.createElementVNode)(`button`,{onClick:r[4]||=e=>j.value=`select`,disabled:M.value||N.value,class:`_cppay-btn _cppay-btn-text`},` 更改支付方式 `,8,Pe)])])):(0,n.createCommentVNode)(``,!0)])])])):(0,n.createCommentVNode)(``,!0)]),_:1})]))}}),O=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},k=O(D,[[`__scopeId`,`data-v-9361860d`]]),A=(0,n.ref)({apikey:``,open:!1,options:null});const j=e=>{A.value.options=e,A.value.open=!0};var M=()=>{A.value.open=!1},N=e=>{A.value.options?.onSuccess?.(e),A.value.open=!1},P=e=>{A.value.options?.onError?.(e)};const F={install(e,t){if(!t?.apikey)throw Error(`Cppay plugin requires an apikey`);A.value.apikey=t.apikey,e.config.globalProperties.$showPayment=j;let r=document.createElement(`div`);document.body.appendChild(r),(0,n.createApp)({setup(){return()=>A.value.options?(0,n.h)(k,{modelValue:A.value.open,"onUpdate:modelValue":e=>{A.value.open=e,e||M()},apikey:A.value.apikey,plain:A.value.options.plain,orderId:A.value.options.orderId,amount:A.value.options.amount,intervalDays:A.value.options.intervalDays,onSuccess:N,onError:P}):null}}).mount(r)}},I=()=>{if(!A.value.apikey)throw Error(`useCppayPayment must be used after installing CppayPlugin`);return{showPayment:j}};e.t(e.n),exports.CppayPlugin=F,exports.PaymentDialog=k,exports.showPayment=j,exports.useCppayPayment=I;
|
|
1
|
+
const e=require(`./inject-style-Cd5D3aj8.cjs`),t=require(`./cppay-BYRjTzRF.cjs`);let n=require(`vue`),r=require(`qrcode`);r=e.r(r);let i=require(`rxjs`),a=require(`rxjs/operators`),o=require(`viem`),s=require(`viem/chains`),c=require(`@reown/appkit`),l=require(`@reown/appkit-adapter-ethers`);var u={class:`_cppay-content`},ee={key:0,class:`_cppay-state-container`},te={class:`_cppay-state-title`},ne={class:`_cppay-state-message`},re={key:1,class:`_cppay-state-container`},d=[`disabled`],ie={key:2,class:`_cppay-state-container`},ae={key:3,class:`_cppay-state-container`},oe={key:4},se={class:`_cppay-section`},ce={class:`_cppay-grid`},le=[`onClick`],ue=[`src`,`alt`],de={class:`_cppay-section`},fe={class:`_cppay-grid`},pe=[`onClick`],me=[`src`,`alt`],he={class:`_cppay-section`},ge={class:`_cppay-price-box`},_e={class:`_cppay-price-row`},ve={class:`_cppay-price-amount`},ye={class:`_cppay-price-main`},be={class:`_cppay-price-sub`},xe={class:`_cppay-section`},Se={class:`_cppay-error-tooltip`},Ce={key:0,class:`_cppay-error-tooltip-full`},we=[`disabled`],Te={key:5},Ee={class:`_cppay-qr-container`},De={class:`_cppay-qr-code`},Oe=[`src`],ke={class:`_cppay-section`},f={key:0,class:`_cppay-info-box`},p={class:`_cppay-info-flex-container`},m={class:`_cppay-info-flex-child`},h={class:`_cppay-info-label`},g={class:`_cppay-info-value _cppay-info-value-flex`},_={key:0},v={class:`_cppay-info-box`},y={class:`_cppay-info-flex-child`},b={class:`_cppay-info-label _cppay-info-label-flex`},x={key:0,class:`_cppay-countdown`},S={class:`_cppay-address-row`},C={key:0},w=[`title`],Ae={key:0,class:`_cppay-copy-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},je={key:1,class:`_cppay-copy-icon`,viewBox:`0 0 24 24`,fill:`currentColor`},Me={key:1,class:`_cppay-info-box _cppay-subscription-box`},Ne={class:`_cppay-error-tooltip`},Pe={key:0,class:`_cppay-error-tooltip-full`},Fe={key:1,class:`_cppay-section`},Ie=[`disabled`],Le=[`disabled`],Re=[`disabled`],ze={class:`_cppay-wallet-address-text`},T=(0,n.defineComponent)({__name:`PaymentContent`,props:{apikey:{},orderId:{},amount:{},plain:{default:`one-time`},intervalDays:{},paymentStep:{},loading:{type:Boolean,default:!1},isCheckingPayment:{type:Boolean,default:!1},error:{},slots:{}},emits:[`update:paymentStep`,`success`,`expired`,`failed`,`error`,`update:error`],setup(e,{emit:T}){let E=e,D=T,O=new t.t(E.apikey),k=(0,n.ref)([]),A=(0,n.ref)(),j=(0,n.ref)(),M=(0,n.ref)(),N=(0,n.ref)(),P=(0,n.ref)(!1),F=(0,n.ref)(),I=(0,n.ref)(``),L=(0,n.ref)(!1),R=(0,n.ref)(!1),z=(0,n.ref)(null),B=(0,n.ref)(null),V=(0,n.ref)(null),H=(0,n.ref)(null),Be=()=>{typeof window<`u`&&!z.value&&(z.value=(0,c.createAppKit)({debug:!1,enableNetworkSwitch:!1,adapters:[new l.EthersAdapter],projectId:`8d2e1854d3f1782e45aa15fbd8938894`,allowUnsupportedChain:!0,networks:[s.mainnet,s.bsc,s.polygon,s.arbitrum,s.optimism,s.base],metadata:{name:`Cppay`,description:`Cppay Payment Gateway`,url:window.location.origin,icons:[`https://cppay.com/icon.png`]},features:{analytics:!1}}),N.value=z.value.getAddress(),F.value=z.value.getProvider(`eip155`),z.value.subscribeAccount(e=>{e.isConnected?N.value=e.address:(N.value=void 0,F.value=void 0)}),z.value.subscribeProviders(e=>{F.value=e?.eip155}))},U=async()=>{try{P.value=!0,D(`update:error`,void 0),z.value&&await z.value.open()}catch(e){D(`update:error`,e instanceof Error?e.message:`钱包连接失败`),D(`error`,e)}finally{P.value=!1}},W=(0,n.computed)(()=>k.value.find(e=>e.chain===A.value)),G=(0,n.computed)(()=>W.value?.tokens||[]),K=(0,n.computed)(()=>G.value.find(e=>e.symbol===j.value)),q=e=>[`USDT`,`USDC`,`BUSD`,`DAI`,`TUSD`,`USDD`,`FDUSD`].includes(e.toUpperCase())?2:6,J=(e,t)=>{let n=parseFloat(e);return isNaN(n)?`0`:n.toFixed(t).replace(/\.?0+$/,``)},Ve=e=>{if(e<=0)return`已过期`;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t}时${n}分${r}秒`:`${n}分${r}秒`},Y=e=>{V.value&&clearInterval(V.value);let t=()=>{let t=e-Math.floor(Date.now()/1e3);I.value=Ve(t),t<=0&&(D(`update:paymentStep`,`expired`),X())};t(),V.value=setInterval(t,1e3)},X=()=>{V.value&&=(clearInterval(V.value),null)},Z=(0,n.computed)(()=>{if(!j.value||!K.value)return`0`;let e=parseFloat(K.value.price);if(isNaN(e)||e===0)return`0`;let t=q(j.value);return J((parseFloat(E.amount)/e).toFixed(t),t)}),He=async()=>{try{D(`update:error`,void 0);let e=await O.getSupportedChains();k.value=e,e.length>0&&(A.value=e[0].chain)}catch(e){D(`update:error`,e instanceof Error?e.message:`加载支付网络失败`),D(`error`,e)}},Q=async e=>{if(F.value)try{await F.value.request({method:`wallet_switchEthereumChain`,params:[{chainId:`0x${e.toString(16)}`}]})}catch(e){throw e.code===4902?Error(`请在钱包中添加该网络`):e}},Ue=async()=>{if(!(!N.value||!F.value||!H.value||!K.value||!W.value))try{let e=H.value;await Q(W.value.chainId);let t=(0,o.createWalletClient)({account:N.value,transport:(0,o.custom)(F.value)});K.value.address?await t.writeContract({address:K.value.address,abi:[{name:`transfer`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`to`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`transfer`,args:[e.receiveAddress,(0,o.parseUnits)(e.paymentAmount,K.value.decimals)],chain:null}):await t.sendTransaction({to:e.receiveAddress,value:(0,o.parseUnits)(e.paymentAmount,K.value.decimals),chain:null}),M.value=void 0}catch(e){D(`update:error`,e instanceof Error?e.message:`钱包支付失败`),D(`error`,e)}},We=async()=>{if(!(!N.value||!F.value||!H.value||!K.value||!W.value))try{let e=H.value;await Q(W.value.chainId);let t=(0,o.createWalletClient)({account:N.value,transport:(0,o.custom)(F.value)});if(!K.value.address)throw Error(`订阅支付不支持原生代币`);await t.writeContract({address:K.value.address,abi:[{name:`approve`,type:`function`,stateMutability:`nonpayable`,inputs:[{name:`spender`,type:`address`},{name:`amount`,type:`uint256`}],outputs:[{type:`bool`}]}],functionName:`approve`,args:[e.spenderAddress,(0,o.parseUnits)(e.approveAmount,K.value.decimals)],chain:null}),M.value=void 0}catch(e){D(`update:error`,e instanceof Error?e.message:`钱包授权失败`),D(`error`,e)}},Ge=async()=>{if(!N.value){D(`update:error`,`请先连接钱包`),D(`error`,Error(`请先连接钱包`));return}E.plain===`one-time`?await Ue():E.plain===`subscription`&&await We()},Ke=async()=>{if(!(!A.value||!j.value))try{D(`update:error`,void 0);let e=``;E.plain===`one-time`?(H.value=await O.createOnetimePayment({paymentChain:A.value,paymentToken:j.value,orderId:E.orderId,amount:Z.value}),e=`${A.value.toLowerCase()}:${H.value.receiveAddress}?amount=${H.value.paymentAmount}`,Y(H.value.expireAt),$({paymentId:H.value.paymentId})):E.plain===`subscription`&&(H.value=await O.createSubscriptionPayment({paymentChain:A.value,paymentToken:j.value,orderId:E.orderId,amountOfUsd:Z.value,intervalDays:E.intervalDays||30}),e=`${A.value.toLowerCase()}:${H.value.spenderAddress}?amount=${H.value.approveAmount}`,Y(H.value.expireAt),$({subscriptionId:H.value.subscriptionId})),D(`update:paymentStep`,`payment`),M.value=await r.toDataURL(e,{width:200,margin:2,errorCorrectionLevel:`H`})}catch(e){D(`update:error`,e instanceof Error?e.message:`创建支付失败`),D(`error`,e)}},$=e=>{B.value?.unsubscribe();let t=()=>(0,i.defer)(()=>E.plain===`subscription`?O.checkSubscriptionPaymentStatus(e):O.checkOnetimePaymentStatus(e)).pipe((0,a.timeout)(15e3),(0,a.retry)({delay:2e3}));B.value=t().pipe((0,a.expand)(e=>e.status===`pending`?(0,i.timer)(2e3).pipe((0,a.switchMap)(()=>t())):i.EMPTY),(0,a.tap)(e=>{(e.status===`paid`||e.status===`approved`)&&(D(`update:paymentStep`,`success`),D(`success`,e)),e.status===`expired`&&(D(`update:paymentStep`,`expired`),D(`expired`,e)),e.status===`failed`&&(D(`update:paymentStep`,`failed`),D(`failed`,e))})).subscribe({error:e=>{if(H.value){let t=e instanceof Error?e.message:`检查支付状态失败`;D(`update:paymentStep`,`error`),D(`update:error`,t),D(`error`,e)}},complete:()=>{B.value?.unsubscribe()}})},qe=async()=>{if(!H.value)return;let e=E.plain===`subscription`?H.value.spenderAddress:H.value.receiveAddress;if(e)try{await navigator.clipboard.writeText(e),L.value=!0,setTimeout(()=>{L.value=!1},2e3)}catch(e){console.error(`复制失败:`,e)}};return(0,n.watch)(()=>E.paymentStep,e=>{e===`select`&&k.value.length===0&&He()},{immediate:!0}),(0,n.watch)(G,e=>{e.length>0&&!j.value&&(j.value=e[0].symbol)}),(0,n.watch)(()=>E.orderId,e=>{e&&$({orderId:e})}),(0,n.onMounted)(()=>{Be()}),(0,n.onUnmounted)(()=>{B.value?.unsubscribe(),X()}),(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[e.paymentStep===`success`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ee,[r[5]||=(0,n.createElementVNode)(`div`,{class:`_cppay-state-icon`},`✅`,-1),(0,n.createElementVNode)(`h3`,te,(0,n.toDisplayString)(e.plain===`subscription`?`授权成功!`:`支付成功!`),1),(0,n.createElementVNode)(`p`,ne,(0,n.toDisplayString)(e.plain===`subscription`?`订阅已激活`:`交易已完成`),1)])):e.paymentStep===`expired`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,re,[r[6]||=(0,n.createElementVNode)(`div`,{class:`_cppay-state-icon`},`⏰`,-1),r[7]||=(0,n.createElementVNode)(`h3`,{class:`_cppay-state-title`},`支付已过期,请重选创建支付订单`,-1),(0,n.createElementVNode)(`button`,{onClick:r[0]||=e=>t.$emit(`update:paymentStep`,`select`),disabled:e.loading||e.isCheckingPayment,class:`_cppay-btn _cppay-btn-text`},` 返回 `,8,d)])):e.paymentStep===`error`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ie,[...r[8]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-state-icon`},`❌`,-1),(0,n.createElementVNode)(`h3`,{class:`_cppay-state-title`},`检查订单支付状态失败!`,-1)]])):e.paymentStep===`failed`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,ae,[...r[9]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-state-icon`},`❌`,-1),(0,n.createElementVNode)(`h3`,{class:`_cppay-state-title`},`订单支付失败!`,-1)]])):e.paymentStep===`select`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,oe,[(0,n.renderSlot)(t.$slots,`choose-top`),(0,n.createElementVNode)(`div`,se,[r[10]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付网络`,-1),(0,n.createElementVNode)(`div`,ce,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(k.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.chain,onClick:t=>A.value=e.chain,class:(0,n.normalizeClass)([`_cppay-select-btn`,{"_cppay-selected":A.value===e.chain}])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.chain},null,8,ue)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.chain),1)],10,le))),128))])]),(0,n.createElementVNode)(`div`,de,[r[11]||=(0,n.createElementVNode)(`label`,{class:`_cppay-label`},`支付代币`,-1),(0,n.createElementVNode)(`div`,fe,[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(G.value,e=>((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:e.symbol,onClick:t=>j.value=e.symbol,class:(0,n.normalizeClass)([`_cppay-select-btn`,{"_cppay-selected":j.value===e.symbol}])},[e.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:e.icon,alt:e.symbol},null,8,me)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.symbol),1)],10,pe))),128))])]),(0,n.renderSlot)(t.$slots,`choose-bottom`),(0,n.createElementVNode)(`div`,he,[(0,n.createElementVNode)(`div`,ge,[(0,n.createElementVNode)(`div`,_e,[r[12]||=(0,n.createElementVNode)(`span`,{class:`_cppay-price-label`},`支付金额`,-1),(0,n.createElementVNode)(`div`,ve,[(0,n.createElementVNode)(`div`,ye,(0,n.toDisplayString)(Z.value??`-`)+` `+(0,n.toDisplayString)(j.value??``),1),(0,n.createElementVNode)(`div`,be,`≈ $`+(0,n.toDisplayString)(e.amount),1)])])])]),(0,n.createElementVNode)(`div`,xe,[e.error?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[1]||=e=>R.value=!0,onMouseleave:r[2]||=e=>R.value=!1},[(0,n.createElementVNode)(`div`,Se,[r[13]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.error),1)]),R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Ce,(0,n.toDisplayString)(e.error),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`button`,{onClick:Ke,disabled:!A.value||!j.value||e.loading,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(e.loading?`处理中...`:`继续支付`),9,we)])])):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Te,[(0,n.createElementVNode)(`div`,Ee,[(0,n.createElementVNode)(`div`,De,[M.value?((0,n.openBlock)(),(0,n.createElementBlock)(`img`,{key:0,src:M.value,alt:`Payment QR Code`,class:`_cppay-qr-image`},null,8,Oe)):(0,n.createCommentVNode)(``,!0)])]),(0,n.createElementVNode)(`div`,ke,[K.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,f,[(0,n.createElementVNode)(`div`,p,[(0,n.createElementVNode)(`div`,m,[(0,n.createElementVNode)(`div`,h,(0,n.toDisplayString)(e.plain===`subscription`?`授权金额`:`支付金额`),1),(0,n.createElementVNode)(`div`,g,[H.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,_,(0,n.toDisplayString)(e.plain===`subscription`?`${J(H.value.approveAmount,q(K.value.symbol))} ${K.value.symbol}`:`${J(H.value.paymentAmount,q(K.value.symbol))} ${K.value.symbol}`),1)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`span`,null,`≈ $`+(0,n.toDisplayString)(e.amount),1)])])])])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,v,[(0,n.createElementVNode)(`div`,y,[(0,n.createElementVNode)(`div`,b,[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.plain===`subscription`?`授权合约地址`:`支付地址`),1),I.value?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,x,`⏰ `+(0,n.toDisplayString)(I.value),1)):(0,n.createCommentVNode)(``,!0)]),(0,n.createElementVNode)(`div`,S,[H.value?((0,n.openBlock)(),(0,n.createElementBlock)(`code`,C,(0,n.toDisplayString)(e.plain===`subscription`?H.value.spenderAddress:H.value.receiveAddress),1)):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`button`,{onClick:qe,class:(0,n.normalizeClass)([`_cppay-copy-btn`,{"_cppay-copy-success":L.value}]),title:L.value?`已复制!`:`复制地址`},[L.value?((0,n.openBlock)(),(0,n.createElementBlock)(`svg`,je,[...r[15]||=[(0,n.createElementVNode)(`path`,{d:`M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z`},null,-1)]])):((0,n.openBlock)(),(0,n.createElementBlock)(`svg`,Ae,[...r[14]||=[(0,n.createElementVNode)(`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`},null,-1),(0,n.createElementVNode)(`rect`,{x:`8`,y:`2`,width:`8`,height:`4`,rx:`1`,ry:`1`},null,-1)]]))],10,w)])])]),e.plain===`subscription`?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Me,[...r[16]||=[(0,n.createElementVNode)(`div`,{class:`_cppay-info-label _cppay-subscription-label`},`📌 订阅说明`,-1),(0,n.createElementVNode)(`div`,{class:`_cppay-info-value _cppay-subscription-message`},` 订阅支付需要授权代币给合约地址,系统将按周期自动扣款。授权后无需每次手动支付。 `,-1)]])):(0,n.createCommentVNode)(``,!0)]),e.error?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-error-tooltip-wrapper`,onMouseenter:r[3]||=e=>R.value=!0,onMouseleave:r[4]||=e=>R.value=!1},[(0,n.createElementVNode)(`div`,Ne,[r[17]||=(0,n.createElementVNode)(`svg`,{viewBox:`0 0 20 20`,fill:`currentColor`},[(0,n.createElementVNode)(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z`,"clip-rule":`evenodd`})],-1),(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(e.error),1)]),R.value?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Pe,(0,n.toDisplayString)(e.error),1)):(0,n.createCommentVNode)(``,!0)],32)):(0,n.createCommentVNode)(``,!0),e.isCheckingPayment?(0,n.createCommentVNode)(``,!0):((0,n.openBlock)(),(0,n.createElementBlock)(`div`,Fe,[N.value?((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:1},[(0,n.createElementVNode)(`button`,{onClick:Ge,disabled:e.loading,class:`_cppay-btn _cppay-btn-primary`},(0,n.toDisplayString)(e.loading?e.plain===`subscription`?`授权中...`:`支付中...`:e.plain===`subscription`?`💳 钱包授权`:`💳 钱包支付`),9,Le),(0,n.createElementVNode)(`button`,{onClick:U,disabled:e.loading,class:`_cppay-btn _cppay-wallet-address-btn`,title:`点击修改或查看钱包状态`},[(0,n.createElementVNode)(`span`,ze,(0,n.toDisplayString)(N.value.slice(0,10))+`...`+(0,n.toDisplayString)(N.value.slice(-4)),1),r[18]||=(0,n.createElementVNode)(`svg`,{class:`_cppay-wallet-arrow`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[(0,n.createElementVNode)(`polyline`,{points:`6 9 12 15 18 9`})],-1)],8,Re)],64)):((0,n.openBlock)(),(0,n.createElementBlock)(`button`,{key:0,onClick:U,disabled:P.value,class:`_cppay-btn _cppay-btn-secondary _cppay-connect-wallet-btn`},[(0,n.createElementVNode)(`span`,null,(0,n.toDisplayString)(P.value?`连接中...`:`💳 连接钱包`),1)],8,Ie))]))]))]))}}),E=T,D={class:`_cppay-dialog`},O={class:`_cppay-header`},k={class:`_cppay-title`},A=[`disabled`],j=(0,n.defineComponent)({__name:`PaymentDialog`,props:{modelValue:{type:Boolean},apikey:{},orderId:{},amount:{},plain:{default:`one-time`},intervalDays:{default:30}},emits:[`update:modelValue`,`success`,`expired`,`failed`,`error`],setup(e,{emit:t}){let r=e,i=t,a=(0,n.ref)(`select`),o=(0,n.ref)(!1),s=(0,n.ref)(!1),c=(0,n.ref)();(0,n.watch)(()=>a.value,e=>{e===`success`&&setTimeout(()=>{l()},1e3)}),(0,n.watch)(()=>r.modelValue,e=>{e||(a.value=`select`,c.value=void 0,o.value=!1,s.value=!1)}),(0,n.onMounted)(()=>{let e=e=>{e.key===`Escape`&&r.modelValue&&!o.value&&!s.value&&l()};return window.addEventListener(`keydown`,e),()=>{window.removeEventListener(`keydown`,e)}});let l=()=>{o.value||s.value||i(`update:modelValue`,!1)},u=()=>{switch(a.value){case`success`:return`支付结果`;case`expired`:return`支付已过期`;case`failed`:return`支付失败`;case`error`:return`出错`;case`payment`:return`完成支付`;default:return`选择支付方式`}};return(t,r)=>e.modelValue?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`_cppay-overlay`,onClick:r[6]||=e=>e.target===e.currentTarget&&!o.value&&!s.value&&l()},[(0,n.createElementVNode)(`div`,D,[(0,n.createElementVNode)(`div`,O,[(0,n.createElementVNode)(`h2`,k,(0,n.toDisplayString)(u()),1),(0,n.createElementVNode)(`button`,{onClick:l,disabled:o.value||s.value,class:`_cppay-close-btn`},[...r[7]||=[(0,n.createElementVNode)(`svg`,{fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[(0,n.createElementVNode)(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M6 18L18 6M6 6l12 12`})],-1)]],8,A)]),(0,n.createVNode)(E,{apikey:e.apikey,orderId:e.orderId,amount:e.amount,plain:e.plain,intervalDays:e.intervalDays,paymentStep:a.value,loading:o.value,isCheckingPayment:s.value,error:c.value,"onUpdate:paymentStep":r[0]||=e=>a.value=e,"onUpdate:error":r[1]||=e=>c.value=e,onSuccess:r[2]||=e=>i(`success`,e),onExpired:r[3]||=e=>i(`expired`,e),onFailed:r[4]||=e=>i(`failed`,e),onError:r[5]||=e=>i(`error`,e)},{"choose-top":(0,n.withCtx)(()=>[(0,n.renderSlot)(t.$slots,`choose-top`)]),"choose-bottom":(0,n.withCtx)(()=>[(0,n.renderSlot)(t.$slots,`choose-bottom`)]),_:3},8,[`apikey`,`orderId`,`amount`,`plain`,`intervalDays`,`paymentStep`,`loading`,`isCheckingPayment`,`error`])])])):(0,n.createCommentVNode)(``,!0)}}),M=j,N=(0,n.ref)({apikey:``,open:!1,options:null});const P=e=>{N.value.options=e,N.value.open=!0},F=()=>{N.value.open=!1};var I=()=>{N.value.open=!1},L=e=>{N.value.options?.onSuccess?.(e),setTimeout(()=>{N.value.open=!1},1e3)},R=e=>{N.value.options?.onExpired?.(e)},z=e=>{N.value.options?.onFailed?.(e)},B=e=>{N.value.options?.onError?.(e)};const V={install(e,t){if(!t?.apikey)throw Error(`Cppay plugin requires an apikey`);N.value.apikey=t.apikey,e.config.globalProperties.$showPayment=P,e.config.globalProperties.$closePayment=F;let r=e=>{e.key===`Escape`&&N.value.open&&I()},i=document.createElement(`div`);document.body.appendChild(i),(0,n.createApp)({setup(){return()=>N.value.options?(0,n.h)(M,{modelValue:N.value.open,"onUpdate:modelValue":e=>{N.value.open=e,e||I()},apikey:N.value.apikey,plain:N.value.options.plain,orderId:N.value.options.orderId,amount:N.value.options.amount,intervalDays:N.value.options.intervalDays,onSuccess:L,onExpired:R,onFailed:z,onError:B}):null}}).mount(i),N.value.open&&document.addEventListener(`keydown`,r),e.config.globalProperties.$watchEffect?.(()=>{N.value.open?document.addEventListener(`keydown`,r):document.removeEventListener(`keydown`,r)})}},H=()=>{if(!N.value.apikey)throw Error(`useCppayPayment must be used after installing CppayPlugin`);return{showPayment:P,closePayment:F}};e.t(e.n),exports.CppayPlugin=V,exports.PaymentContent=E,exports.PaymentDialog=M,exports.showPayment=P,exports.useCppayPayment=H;
|
package/dist/vue.d.ts
CHANGED
|
@@ -4,6 +4,79 @@ import { DefineComponent } from '../../vue/dist/vue.esm-bundler.js';
|
|
|
4
4
|
import { Plugin as Plugin_2 } from '../../vue/dist/vue.esm-bundler.js';
|
|
5
5
|
import { PublicProps } from '../../vue/dist/vue.esm-bundler.js';
|
|
6
6
|
|
|
7
|
+
declare const __VLS_component: DefineComponent<Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
|
|
8
|
+
expired: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
9
|
+
failed: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
10
|
+
error: (error: Error) => any;
|
|
11
|
+
success: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
12
|
+
"update:modelValue": (value: boolean) => any;
|
|
13
|
+
}, string, PublicProps, Readonly<Props> & Readonly<{
|
|
14
|
+
onExpired?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
15
|
+
onFailed?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
16
|
+
onError?: ((error: Error) => any) | undefined;
|
|
17
|
+
onSuccess?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
18
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
19
|
+
}>, {
|
|
20
|
+
intervalDays: number;
|
|
21
|
+
plain: PaymentPlain;
|
|
22
|
+
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
|
|
23
|
+
|
|
24
|
+
declare const __VLS_component_2: DefineComponent<Props_2, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
|
|
25
|
+
expired: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
26
|
+
failed: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
27
|
+
error: (error: Error) => any;
|
|
28
|
+
success: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
29
|
+
"update:paymentStep": (value: "expired" | "failed" | "error" | "select" | "payment" | "success") => any;
|
|
30
|
+
"update:error": (value: string | undefined) => any;
|
|
31
|
+
}, string, PublicProps, Readonly<Props_2> & Readonly<{
|
|
32
|
+
onExpired?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
33
|
+
onFailed?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
34
|
+
onError?: ((error: Error) => any) | undefined;
|
|
35
|
+
onSuccess?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
36
|
+
"onUpdate:paymentStep"?: ((value: "expired" | "failed" | "error" | "select" | "payment" | "success") => any) | undefined;
|
|
37
|
+
"onUpdate:error"?: ((value: string | undefined) => any) | undefined;
|
|
38
|
+
}>, {
|
|
39
|
+
plain: PaymentPlain;
|
|
40
|
+
loading: boolean;
|
|
41
|
+
isCheckingPayment: boolean;
|
|
42
|
+
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
43
|
+
|
|
44
|
+
declare function __VLS_template(): {
|
|
45
|
+
attrs: Partial<{}>;
|
|
46
|
+
slots: {
|
|
47
|
+
'choose-top'?(_: {}): any;
|
|
48
|
+
'choose-bottom'?(_: {}): any;
|
|
49
|
+
};
|
|
50
|
+
refs: {};
|
|
51
|
+
rootEl: any;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
declare function __VLS_template_2(): {
|
|
55
|
+
attrs: Partial<{}>;
|
|
56
|
+
slots: {
|
|
57
|
+
'choose-top'?(_: {}): any;
|
|
58
|
+
'choose-bottom'?(_: {}): any;
|
|
59
|
+
};
|
|
60
|
+
refs: {};
|
|
61
|
+
rootEl: HTMLDivElement;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
65
|
+
|
|
66
|
+
declare type __VLS_TemplateResult_2 = ReturnType<typeof __VLS_template_2>;
|
|
67
|
+
|
|
68
|
+
declare type __VLS_WithTemplateSlots<T, S> = T & {
|
|
69
|
+
new (): {
|
|
70
|
+
$slots: S;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
declare type __VLS_WithTemplateSlots_2<T, S> = T & {
|
|
75
|
+
new (): {
|
|
76
|
+
$slots: S;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
|
|
7
80
|
declare type Address = `0x${string}`;
|
|
8
81
|
|
|
9
82
|
export declare const CppayPlugin: Plugin_2;
|
|
@@ -22,26 +95,30 @@ declare interface OnetimePaymentOrderStatus {
|
|
|
22
95
|
status: PaymentStatus;
|
|
23
96
|
}
|
|
24
97
|
|
|
25
|
-
export declare const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
success: (order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any;
|
|
29
|
-
}, string, PublicProps, Readonly<Props> & Readonly<{
|
|
30
|
-
onError?: ((error: Error) => any) | undefined;
|
|
31
|
-
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
32
|
-
onSuccess?: ((order: OnetimePaymentOrderStatus | SubscriptionPaymentOrderStatus) => any) | undefined;
|
|
33
|
-
}>, {
|
|
34
|
-
intervalDays: number;
|
|
35
|
-
plain: PaymentPlain;
|
|
36
|
-
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
|
|
98
|
+
export declare const PaymentContent: __VLS_WithTemplateSlots_2<typeof __VLS_component_2, __VLS_TemplateResult_2["slots"]>;
|
|
99
|
+
|
|
100
|
+
export declare const PaymentDialog: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
37
101
|
|
|
102
|
+
/**
|
|
103
|
+
* 支付选项配置
|
|
104
|
+
*/
|
|
38
105
|
declare interface PaymentOptions_2 {
|
|
106
|
+
/** 支付类型:一次性支付或订阅支付 */
|
|
39
107
|
plain: PaymentPlain;
|
|
108
|
+
/** 订单 ID */
|
|
40
109
|
orderId: string;
|
|
110
|
+
/** 支付金额(USD) */
|
|
41
111
|
amount: string;
|
|
112
|
+
/** 订阅间隔天数(仅订阅支付需要) */
|
|
42
113
|
intervalDays?: number;
|
|
114
|
+
/** 支付成功回调 */
|
|
43
115
|
onSuccess?: (order: SubscriptionPaymentOrderStatus | OnetimePaymentOrderStatus) => void;
|
|
116
|
+
/** 支付错误回调 */
|
|
44
117
|
onError?: (error: Error) => void;
|
|
118
|
+
/** 支付过期回调 */
|
|
119
|
+
onExpired?: (order: SubscriptionPaymentOrderStatus | OnetimePaymentOrderStatus) => void;
|
|
120
|
+
/** 支付失败回调 */
|
|
121
|
+
onFailed?: (order: SubscriptionPaymentOrderStatus | OnetimePaymentOrderStatus) => void;
|
|
45
122
|
}
|
|
46
123
|
|
|
47
124
|
declare type PaymentPlain = "one-time" | "subscription" | "x402";
|
|
@@ -57,6 +134,32 @@ declare interface Props {
|
|
|
57
134
|
intervalDays?: number;
|
|
58
135
|
}
|
|
59
136
|
|
|
137
|
+
declare interface Props_2 {
|
|
138
|
+
/** API Key */
|
|
139
|
+
apikey: string;
|
|
140
|
+
/** 订单 ID */
|
|
141
|
+
orderId: string;
|
|
142
|
+
/** 支付金额(USD) */
|
|
143
|
+
amount: string;
|
|
144
|
+
/** 支付类型 */
|
|
145
|
+
plain?: PaymentPlain;
|
|
146
|
+
/** 订阅间隔天数 */
|
|
147
|
+
intervalDays?: number;
|
|
148
|
+
/** 支付步骤 */
|
|
149
|
+
paymentStep: "select" | "payment" | "success" | "failed" | "expired" | "error";
|
|
150
|
+
/** 加载状态 */
|
|
151
|
+
loading?: boolean;
|
|
152
|
+
/** 检查支付中状态 */
|
|
153
|
+
isCheckingPayment?: boolean;
|
|
154
|
+
/** 错误信息 */
|
|
155
|
+
error?: string;
|
|
156
|
+
/** 插槽 */
|
|
157
|
+
slots?: any;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* 显示支付对话框
|
|
162
|
+
*/
|
|
60
163
|
export declare const showPayment: (options: PaymentOptions_2) => void;
|
|
61
164
|
|
|
62
165
|
declare interface SubscriptionPaymentOrderStatus {
|
|
@@ -74,8 +177,15 @@ declare interface SubscriptionPaymentOrderStatus {
|
|
|
74
177
|
|
|
75
178
|
declare type SubscriptionPaymentStatus = "pending" | "approved" | "expired" | "failed";
|
|
76
179
|
|
|
180
|
+
/**
|
|
181
|
+
* 使用 CPPay 支付钩子(Vue Composable)
|
|
182
|
+
* @throws {Error} 如果在 CppayPlugin 安装之前使用会抛出错误
|
|
183
|
+
*/
|
|
77
184
|
export declare const useCppayPayment: () => {
|
|
185
|
+
/** 显示支付对话框 */
|
|
78
186
|
showPayment: (options: PaymentOptions_2) => void;
|
|
187
|
+
/** 关闭支付对话框 */
|
|
188
|
+
closePayment: () => void;
|
|
79
189
|
};
|
|
80
190
|
|
|
81
191
|
export { }
|
|
@@ -83,6 +193,9 @@ export { }
|
|
|
83
193
|
|
|
84
194
|
declare module "@vue/runtime-core" {
|
|
85
195
|
interface ComponentCustomProperties {
|
|
196
|
+
/** 显示支付对话框的全局方法 */
|
|
86
197
|
$showPayment: typeof showPayment;
|
|
198
|
+
/** 关闭支付对话框的全局方法 */
|
|
199
|
+
$closePayment: typeof closePayment;
|
|
87
200
|
}
|
|
88
201
|
}
|