Vue Apple Pay

第一步 Apple 账号生成如下文件放到项目/public/.well-known/ 下
apple-developer-merchantid-domain-association.txt
第二步 检测当前环境是否支持 Apple Pay
const canMakeApplePay = () => {
  nextTick(() => {
    if (
      window["ApplePaySession"] &&
      window["ApplePaySession"]?.canMakePayments
    ) {
      HTMLCollection.prototype[Symbol.iterator] =
        Array.prototype[Symbol.iterator];
      const buttons: any = document.getElementsByClassName("apple-pay-button");
      for (let button of buttons) {
        button.className += " visible";
      }
    }
  });

      // 判断是否可用 Apple Pay CARD
      // if (window['ApplePaySession']) {
      //     let merchantIdentifier = 'merchant.com.xxxxxx';
      //     let promise = window['ApplePaySession']?.canMakePaymentsWithActiveCard(merchantIdentifier);
      //     promise.then((canMakePayments: any) => {
      //         checkPayStore.setApplePayState(!!canMakePayments);
      //         if (canMakePayments) {
      //             HTMLCollection.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
      //             const buttons: any = document.getElementsByClassName("apple-pay-button");
      //             for (let button of buttons) {
      //                 button.className += " visible";
      //             }
      //         }
      //     });
      // }
};
第三步 开始支付操作
const onApplePayClick = () => {
  if (!import.meta.env.SSR) {
    const paymentRequest = {
      countryCode: "US",
      currencyCode: "USD",
      supportedNetworks: ['amex', 'discover', 'masterCard', 'visa', 'chinaUnionPay'],
      merchantCapabilities: ['supports3DS', 'supportsDebit', 'supportsCredit'],
      total: {
        label: "Safe Insurance Co",
        type: "final",
        amount: "123.45",
      },
    };
    const session = new window["ApplePaySession"](3, paymentRequest);
    session.onvalidatemerchant = (event: any) => {
      const validationURL = event?.validationURL;
      getApplePaySession({ validationUrl: validationURL }).then((res: any) => {
        try {
          session?.completeMerchantValidation(res);
        } catch (err) {}
      });
    };

    session.onpaymentauthorized = (event: any) => {
      const payment = event?.payment;
      let cartTypeStr = payment?.token?.paymentMethod?.displayName?.split(" ")[0] || payment?.token?.paymentMethod?.network || "";
      let payParme = { appleParam: { token: payment?.token, cartType: cartTypeStr }};
      processPayment(payParme);
    };
    session.oncancel = () => {};
    session.begin();
  }
};

const processPayment = (payParme: any) => {
  try {
    let parmes = { orderNumber: "orderNumber", currency: "USD", ...payParme };
    orderPayment(parmes).then((res: any) => {  // 自己都端接口
      if (res?.success && res?.data) {
        router.push(`/pay/paySuccess`);
      }
    });
  } catch (error) {}
};
第四步 增加页面元素
<div class="apple-pay-button" @click="onApplePayClick" />

.apple-pay-button {
  -webkit-appearance: -apple-pay-button;
  -apple-pay-button-type: buy;
  visibility: hidden;
  display: inline-block;
  width: 100%;
  margin-left: 12px;
  margin-right: 12px;
  min-height: 52px;
  border: 1px solid black;
  background-image: -webkit-named-image(apple-pay-logo-black);
  background-size: 100% calc(60% + 2px);
  background-repeat: no-repeat;
  background-color: white;
  background-position: 50% 50%;
  border-radius: 5px;
  padding: 0px;
  margin: 5px auto;
  transition: background-color 0.15s;
}

.apple-pay-button.visible {
  visibility: visible;
}

.apple-pay-button:active {
  background-color: rgb(152, 152, 152);
}

第五步 证书配置好后校验一下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值