你好,请按照下面的说明优化一下支付流程
核心优化点:
- 调用支付接口时需传入
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()
}