Apple Pay JS:选择新账单地址时onpaymentmethodselected事件未触发,求解决方案
解决Apple Pay JS账单地址变更监听与地址选择界面禁用问题
一、捕获账单地址变更的正确事件
onpaymentmethodselected 仅在用户切换支付卡片时触发,无法覆盖账单地址单独变更(即使变更地址导致关联卡片切换)的场景。你需要使用Apple Pay JS提供的 onbillingcontactselected 事件来监听账单地址的变更操作:
const session = new ApplePaySession(3, paymentRequest); // 监听账单地址选择/变更 session.onbillingcontactselected = (event) => { const newBillingContact = event.billingContact; // 在这里处理地址变更后的逻辑,比如验证地址、更新订单信息等 // 如果需要更新支付请求,可调用session.completeBillingContactSelection()传入更新后的配置 session.completeBillingContactSelection({status: ApplePaySession.STATUS_SUCCESS}); }; session.begin();
这个事件会在用户选择任何账单地址(包括从通讯录选择新地址、修改已有地址,或切换地址导致关联卡片变更)时触发,完全覆盖你需要的场景。
二、禁用额外的账单地址选择界面
如果你不想让用户看到账单地址的选择入口,有两种可行方案:
1. 固定账单地址
在创建Apple Pay的paymentRequest时,直接指定billingContact为你预先获取或用户填写的固定地址对象,Apple Pay界面将不会显示地址选择入口,用户只能使用该地址:
const paymentRequest = { countryCode: 'US', currencyCode: 'USD', // 固定账单地址 billingContact: { givenName: 'John', familyName: 'Doe', addressLines: ['123 Main St'], locality: 'New York', administrativeArea: 'NY', postalCode: '10001', countryCode: 'US' }, // 其他支付请求配置... };
2. 限制地址选择权限
如果需要用户提供账单地址,但不想让他们从通讯录选择已有地址,可以在paymentRequest的billingContactConstraints中设置allowsSelection: false,直接隐藏地址选择的下拉入口:
const paymentRequest = { // ...其他配置 requiredBillingContactFields: ['postalAddress'], billingContactConstraints: { allowsNewAddress: true, allowsEditing: false, allowsSelection: false } };
内容的提问来源于stack exchange,提问作者James W.
相关产品推荐
相关产品推荐

