2***@qq.com
2***@qq.com
  • 发布:2021-03-06 20:33
  • 更新:2021-09-03 17:00
  • 阅读:2702

关于IAP支付,支付成功后给后端校验的问题

分类:uni-app

苹果应用内支付,用的是uniapp官网的api教程,如果用户的Apple ID没有绑定任何付款方式,支付完成后无法完成
后端校验
1.支付流程是:在uni.requestPayment的success回调中请求了我们后端的接口,
主要是给后端传了transactionReceipt和productid,只有请求后端校验后才会给用户vip

2.如果用户的Apple ID没有绑定任何付款方式,会有一个弹窗 “需要付款信息” 点击了继续

3.那么会跳转到App Store “添加付款方式” 的界面,然后验证了支付宝添加付款方式成功之后,

4.会弹出“操作完成 已经完成购买”弹窗,点击弹窗的“好”之后因为是在App Store界面,并没有在本项目的付款界面,所以也没有请求到后端的校验接口,点击弹窗的“好”之后再返回到本项目的app之后也没再请求后端校验。

  1. 用户钱也付了,也没有给用户vip这怎么解决。
  2. 如果用户绑定过支付方式那么应该不会有问题,沙盒中测试的时候一直在自己的app中完成的操作,沙盒账号购买之后也没问题
  3. 怎么才能实现绑定支付方式的过程完成支付的时候也能请求后端校验呢。联系方式qq: 2032914783
2021-03-06 20:33 负责人:DCloud_iOS_XHY 分享
已邀请:
DCloud_iOS_XHY

DCloud_iOS_XHY

你好,请按照下面的说明优化一下支付流程
核心优化点:

  • 调用支付接口时需传入optimize: true
  • 在支付失败的回调中需要调用 restoreComplateRequest()恢复购买方法确认是否有未完成或可恢复的订单
  • 在支付页面每次显示的时候需要调用 restoreComplateRequest()恢复购买方法确认是否有未完成或可恢复的订单

1.获取appleiap支付通道

var iap = null;  
plus.payment.getChannels(function(channels) {  
    for (var i in channels) {  
        var channel = channels[i];  
            // 获取 id 为 'appleiap' 的 channel  
            if (channel.id === 'appleiap') {  
                iap = channel;  
            }  
        }  
}, function(e) {  
    console.log("获取支付通道失败:" + e.message);  
});

2.获取订单信息

// ids 为在苹果开发后台配置的应用内购项目的标识集合  
var ids = ['donation', 'donation6'];   
// iap 为刚刚获取的`appleiap`支付通道  
iap.requestOrder(ids, function(e) {  
    // 获取订单信息成功回调方法  
    console.log('requestOrder success: ' + JSON.stringify(e));  
}, function(e) {  
    // 获取订单信息失败回调方法  
    console.log('requestOrder failed: ' + JSON.stringify(e));  
});

3.进行支付

plus.payment.request(iap, {  
    productid: id,  
    username: "appusername",  
    optimize: true  // 支付时设置 optimize: true  
}, function(result) {  
    // 支付成功,result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证  
}, function(e) {  
    // 支付失败,需要调用一下 restoreComplateRequest 方法  
    restoreComplateRequest()  
});

4.恢复购买方法(获取已购的非消耗性商品和订阅商品)

注意:如果用户在支付过程中退出了App,或其他情况造成的丢单的消耗类型商品在支付完成后,首次调用该接口可返回支付凭证

function restoreComplateRequest() {  
    iap.restoreComplateRequest({}, function(results) {  
        // results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,通用需将返回的支付凭证传给后端进行二次认证  
    });  
}

5.在支付页面每次显示的时候调用 restoreComplateRequest()恢复购买方法确认是否有未完成或可恢复的订单

1. 5+app 在 resume 回调中调用 restoreComplateRequest  
document.addEventListener('resume',function(){  
    restoreComplateRequest() // 3. 在支付页面每次显示的时候需要调用 `restoreComplateRequest()`方法  
},false);  

2.uniapp 在页面 onShow 方法中调用 restoreComplateRequest  
onShow() {  
    restoreComplateRequest()  
}
时光知味

时光知味

支付票据有问题怎么解决ios那边返回21002

该问题目前已经被锁定, 无法添加新回复