Apple Pay

我们在 Legend Base SDK 中提供两种 Apple Pay 的集成方式:

  1. 在重定向的网页完成支付。
  2. 在当前网页内完成支付。

在开始集成前我们建议阅读下面的文档说明:

重定向的支付流程

优点:运行环境兼容性高,不用另外配置 Apple Pay(商户 id,证书,验证域名等)。

缺点:交互流程长,数据消息传输路径长。

  • 调用canSetupApplePay()方法,获取当前运行环境是否支持 Apple Pay。
const resp = await legend.canSetupApplePay()
console.log("canSetupApplePay: \n", resp);
  • 调用startApplePay()方法,获取跳转支付的地址。
const { url, payment_intent_id } = await legend.startApplePay({
  app_state,
  address: "",
  network: "ETH",
  pair: "USDCUSD",
  side: "buy",
  size: 50,
  external_order_id: `otcsb-applepay-${Date.now().toString()}`,
  layout: 'legend', // 'mini', 'legend'
  redirect: "https://www.legendtrading.com" // 用于接收支付结果的重定向地址
});
console.log("url: %o", url);
console.log("payment_intent_id: %o", payment_intent_id);
  • 将用户重定向到上述方法返回的 url。

重定向的目标网页UI和数据消息可以定制,需要定制的需求请和我们具体沟通。

  • 用户完成支付后会被重定向回到调用startApplePay()方法时传入的 redirect 地址。重定向的请求参数会包含额外的status, order_id,trade_idpayment_intent_id
https://www.legendtrading.com/?status=error&order_id=otcsb-applepay-1750724991438&trade_id=&payment_intent_id=200aeaa9-6b7e-49ee-a766-491253a99f3d


https://www.legendtrading.com/zh_Hans?status=success&order_id=otcsb-applepay-1750725740082&trade_id=45856e7d-ff06-43a7-88cb-22eee5e09ac4&payment_intent_id=
  • 使用getIntentStatus()方法查询支付订单的状态。
const resp = await legend.getIntentStatus({
  payment_intent_id: "92a8527c-01e3-47c6-bf07-e9ac3c8d8cda"
});
console.log("intent status: \n%o", resp);

当前网页的支付流程

优点:交互流程短,数据消息传输直接。

缺点:运行环境要求高,需要额外配置 Apple Pay(商户 id,证书,验证域名等)。在安全合规方面有额外风险。

  • 调用canSetupApplePay()方法,获取当前运行环境是否支持 Apple Pay。
const resp = await legend.canSetupApplePay()
console.log("canSetupApplePay: \n", resp);
  • 调用setupApplePay()方法,初始化 Apple Pay 的支付按钮。
await legend.setupApplePay({
  wrapperSelector: '.apple-pay-wrapper',
  button: {
    style: 'black',
    type: 'plain',
    locale: 'en-US',
  },
  order: {
    app_state,
    address: "",
    network: "ETH",
    pair: "USDCUSD",
    side: "buy",
    size: 50,
    external_order_id: `otcsb-applepay-${Date.now().toString()}`
  }
});