使用react-native-apay集成Apple Pay时金额未从钱包扣除的问题
Apple Pay支付后未扣款问题排查与解决
核心问题分析
你当前的代码仅完成了Apple Pay的前端授权流程,但没有发起实际的扣款请求。Apple Pay的requestPayment方法仅用于获取用户的支付授权令牌,真正的扣款操作需要你的后端服务结合支付网关(如对应银行支付接口、专业支付服务商接口等)完成。
具体修复步骤
- 处理支付令牌,发起后端扣款请求
在requestPayment的回调中,必须将返回的paymentData(包含关键的支付令牌paymentToken)发送到你的后端服务,由后端调用支付网关的接口完成实际扣款。示例修改后的代码:
requestData = { merchantIdentifier: 'merchant.dumy.pkg', supportedNetworks: ['mastercard', 'visa'], countryCode: 'SA', currencyCode: 'SAR', id: sessionId, paymentSummaryItems: [ { amount: 100, label: 'dummy', // 修复原代码中字符串未闭合的语法错误 } ], }; ApplePay.requestPayment(requestData) .then(paymentData => { // 第一步:将支付令牌发送到后端发起扣款 fetch('你的后端扣款接口地址', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ paymentToken: paymentData.paymentToken, amount: 100, currency: 'SAR' }) }) .then(response => response.json()) .then(backendResult => { // 根据后端扣款结果,通知Apple Pay完成流程 if (backendResult.success) { ApplePay.complete(ApplePay.SUCCESS); } else { ApplePay.complete(ApplePay.FAILURE); } }) .catch(err => { // 处理后端请求失败的情况 ApplePay.complete(ApplePay.FAILURE); }); }) .catch(err => { // 处理Apple Pay授权失败的情况 console.error('Apple Pay授权失败:', err); });
- 修正代码语法错误
- 原代码中
label: 'dummy,缺少闭合引号,会导致语法错误,已在上述代码中修复。 - 原代码
catch(){语法错误,应改为catch(err => {}),确保错误能被正常捕获处理。
- 验证商家配置
- 确认苹果开发者后台中,你的
merchantIdentifier已正确配置,并且关联了有效的Apple Pay Merchant ID证书。 - 检查后端服务是否已正确配置支付网关的密钥、商户信息,确保能正常调用扣款接口。
- 测试环境注意事项
- 沙箱测试环境需使用苹果官方提供的沙箱测试银行卡,真实银行卡在沙箱环境不会产生实际扣款。
- 沙箱环境下的扣款仅为模拟流程,需切换到生产环境才能进行真实账户的金额扣除。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

