uni-app ios内购问题,两次购买返回了同一个receipt支付凭证

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app ios内购问题,两次购买返回了同一个receipt支付凭证
两个用户分开购买,给我返回了同一个支付凭证,这两次购买的时间间隔了4天
有遇到相同问题的朋友吗?请问如何解决呢

1 回复

在处理uni-app中的iOS内购问题时,遇到两次购买返回同一个receipt支付凭证的情况,通常是由于内购流程或收据验证处理不当所导致的。下面是一个基本的代码案例,展示了如何在uni-app中处理iOS内购,并验证receipt支付凭证。请注意,这只是一个基础示例,实际项目中可能需要更复杂的逻辑来处理各种边缘情况。

1. 引入必要的库

首先,确保你的uni-app项目中已经集成了iOS内购相关的库。对于uni-app,你可能需要使用原生插件或者通过条件编译来引入iOS特定的代码。

2. 实现购买流程

// 发起购买请求
function purchaseProduct(productId) {
    if (process.platform === 'ios') {
        plus.store.order(productId, function(e) {
            if (e.code === 0) {
                // 购买成功,获取transactionReceipt
                const transactionReceipt = plus.store.getTransactionReceipt(e.transactionId);
                verifyReceipt(transactionReceipt);
            } else {
                console.error('购买失败:', e.msg);
            }
        });
    } else {
        console.warn('当前平台不支持内购');
    }
}

### 3. 验证Receipt支付凭证

```javascript
// 注意:这里假设你有一个后端服务来验证receipt
function verifyReceipt(receipt) {
    uni.request({
        url: 'https://your-backend-service.com/verifyReceipt',
        method: 'POST',
        data: {
            receipt: receipt
        },
        success: function(res) {
            if (res.data.valid) {
                console.log('收据验证成功');
                // 处理购买成功后的逻辑
            } else {
                console.error('收据验证失败:', res.data.error);
                // 处理验证失败的情况
            }
        },
        fail: function(err) {
            console.error('请求失败:', err);
        }
    });
}

4. 后端验证逻辑(示例)

后端验证逻辑通常涉及与Apple的验证服务器通信,以确认receipt的有效性。这里是一个简化的Node.js示例:

const axios = require('axios');

async function verifyReceipt(receipt) {
    const response = await axios.post('https://buy.itunes.apple.com/verifyReceipt', {
        'receipt-data': receipt,
        'password': 'your-shared-secret' // 替换为你的iTunes Connect中设置的共享密钥
    });
    
    return response.data;
}

注意

  • 确保你的App Store Connect账号已经设置了内购项目和共享密钥。
  • 在生产环境中,务必妥善处理错误和异常情况,比如网络请求失败、Apple服务器响应超时等。
  • 对于多次购买返回相同receipt的情况,可以在后端增加逻辑来记录已验证的receipt,避免重复处理。

以上代码提供了一个基本的框架来处理uni-app中的iOS内购和receipt验证。根据具体需求,你可能需要调整和完善这些代码。

回到顶部