首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Paddle与NextJS集成

如何将Paddle与NextJS集成
EN

Stack Overflow用户
提问于 2021-01-22 17:34:29
回答 4查看 285关注 0票数 1

Paddle要求将这两个脚本插入到HTML中</body>之前:

代码语言:javascript
复制
<script src="https://cdn.paddle.com/paddle/paddle.js"></script>
<script type="text/javascript">
    Paddle.Setup({ vendor: 1234567 });
</script>

但是NextJS没有超文本标记语言文件,当我插入到返回函数中时,{ vendor: 1234567, debug: true }部件创建了一个'}' expected错误。

有人知道怎么解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2022-02-01 13:55:39

您可以使用Next.Js提供的Script组件

https://nextjs.org/docs/basic-features/script

代码语言:javascript
复制
import Script from 'next/script'


<Script
  key="init-paddle"
  src="https://cdn.paddle.com/paddle/paddle.js"
  onLoad={() => {
    console.log('On paddle load')
    if (PADDLE_SANDBOX) {
      window.Paddle.Environment.set('sandbox')
    }
    window.Paddle.Setup({
      vendor: 12345,
      eventCallback: function (data) {
        // The data.event will specify the event type
        if (data.event === 'Checkout.Loaded') {
          console.log(data.eventData) // Data specifics on the event
        } else if (data.event === 'Checkout.Complete') {
          console.log(data.eventData) // Data specifics on the event
        } else if (data.event === 'Checkout.Close') {
          console.log(data.eventData) // Data specifics on the event
        }
      },
    })
  }}
/>

如果您使用的是typescript,并且您想要键入paddle集成,则可以使用:

(不是详尽的,但总比什么都没有好)

代码语言:javascript
复制
/// paddle.d.ts

export declare global {
  interface Customer {
    total: number
    total_tax: number
    currency: string
  }

  type PaddleEvent =
    | 'Checkout.Loaded'
    | 'Checkout.Close'
    | 'Checkout.Complete'
    | 'Checkout.User.Subscribed'
    | 'Checkout.Quantity.Change'
    | 'Checkout.Login'
    | 'Checkout.Logout'
    | 'Checkout.PaymentMethodSelected'
    | 'Checkout.Coupon.Add'
    | 'Checkout.Coupon.Submit'
    | 'Checkout.Coupon.Cancel'
    | 'Checkout.Coupon.Applied'
    | 'Checkout.Coupon.Remove'
    | 'Checkout.Error'
    | 'Checkout.Location.Submit'
    | 'Checkout.Language.Change'
    | 'Checkout.Vat.Add'
    | 'Checkout.Vat.Cancel'
    | 'Checkout.Vat.Submit'
    | 'Checkout.Vat.Applied'
    | 'Checkout.Vat.Remove'
    | 'Checkout.WireTransfer.Complete'
    | 'Checkout.PaymentComplete'
    | 'Checkout.PaymentMethodChange'
    | 'Checkout.WireTransfer.PaymentMethodChange'

  interface Window {
    Paddle: {
      Checkout: {
        open: (options: {
          product: string | number
          title?: string
          message?: string
          coupon?: string
          email?: string
          marketingConsent?: '0' | '1'
          country?: string
          postcode?: string
          allowQuantity?: boolean
          quantity?: number
          disableLogout?: boolean
          locale?: string
          passthrough?: string
          referring_domain?: string
          success?: string
          successCallback?: string
          closeCallback?: string
          loadCallback?: string
          upsell?: string | number
          upsellTitle?: string
          upsellText?: string
          upsellAction?: string
          upsellCoupon?: string
          upsellPassthrough?: string
          override?: string
          displayModeTheme?: string
          // Inline checkout
          method?: string
          frameTarget?: string
          frameInitialHeight?: number
          frameStyle?: string
        }) => void
      }
      Environment: {
        set: (env: string) => void
      }
      Setup: (options: {
        vendor: number
        eventCallback: (data: {
          event: PaddleEvent
          eventData: {
            payment_method?: string
            available_payment_methods?: string
            available_payment_methods_count?: number
            checkout: {
              recurring_prices: {
                customer: Customer
                interval: {
                  type: string
                  length: number
                }
              }
              prices: {
                customer: Customer
              }
            }
            product: { id: number; name: string; quantity: number }
            user: { id: string; email: string; country: string }
          }
          checkoutData: {
            'paddlejs-version': '2.0.9'
            apple_pay_enabled: string
            display_mode: string
            guest_email: string
            is_popup: string
            method: string
            paddle_js: string
            parentURL: string
            parent_url: string
            passthrough: string
            popup: string
            product: string
            referring_domain: string
          }
        }) => void
      }) => void
    }
  }
}
票数 2
EN

Stack Overflow用户

发布于 2021-05-16 00:07:27

您需要将其设置为内部HTML

代码语言:javascript
复制
<script
        type="text/javascript"
        dangerouslySetInnerHTML={{
          __html: `
          Paddle.Setup({ vendor: 123456 });`,
        }}
      ></script>
票数 1
EN

Stack Overflow用户

发布于 2022-01-05 13:58:08

不要从字面上理解文档。既然您使用的是React,那么包含任何内联JavaScript就没有意义了。Paddle.js只是客户端的,所以应该在根组件的useEffect回调中初始化它。

代码语言:javascript
复制
// pages/_document.js

import Document, { Html, Head, Main, NextScript } from 'next/document'

export default class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx)
    return { ...initialProps }
  }

  render() {
    return (
      <Html>
        <Head />
        <body>
          <Main />
          <NextScript />
          <script src="https://cdn.paddle.com/paddle/paddle.js" />
        </body>
      </Html>
    )
  }
}
代码语言:javascript
复制
// pages/_app.js

import { useEffect } from 'react'

function MyApp({ Component, pageProps }) {
  // Initialize Paddle
  useEffect(() => {
    Paddle.Setup({ vendor: 1234567 })
  }, [])

  return <Component {...pageProps} />
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65842582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档