You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.6 KiB
125 lines
2.6 KiB
const ProviderType = {
|
|
IAP: 'iap'
|
|
}
|
|
|
|
const IapTransactionState = {
|
|
purchasing: "0", // A transaction that is being processed by the App Store.
|
|
purchased: "1", // A successfully processed transaction.
|
|
failed: "2", // A failed transaction.
|
|
restored: "3", // A transaction that restores content previously purchased by the user.
|
|
deferred: "4" // A transaction that is in the queue, but its final status is pending external action such as Ask to Buy.
|
|
};
|
|
|
|
class Iap {
|
|
|
|
_channel = null;
|
|
_channelError = null;
|
|
_productIds = [];
|
|
|
|
_ready = false;
|
|
|
|
constructor({
|
|
products
|
|
}) {
|
|
this._productIds = products;
|
|
}
|
|
|
|
init() {
|
|
return new Promise((resolve, reject) => {
|
|
this.getChannels((channel) => {
|
|
this._ready = true;
|
|
resolve(channel);
|
|
}, (err) => {
|
|
reject(err);
|
|
})
|
|
})
|
|
}
|
|
|
|
getProduct(productIds) {
|
|
return new Promise((resolve, reject) => {
|
|
this._channel.requestProduct(productIds || this._productIds, (res) => {
|
|
console.log("requestProduct",res)
|
|
resolve(res);
|
|
}, (err) => {
|
|
reject(err);
|
|
})
|
|
});
|
|
}
|
|
|
|
requestPayment(orderInfo) {
|
|
return new Promise((resolve, reject) => {
|
|
uni.requestPayment({
|
|
provider: 'appleiap',
|
|
orderInfo: orderInfo,
|
|
success: (res) => {
|
|
resolve(res);
|
|
},
|
|
fail: (err) => {
|
|
reject(err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
restoreCompletedTransactions(username) {
|
|
return new Promise((resolve, reject) => {
|
|
this._channel.restoreCompletedTransactions({
|
|
manualFinishTransaction: true,
|
|
username
|
|
}, (res) => {
|
|
resolve(res);
|
|
}, (err) => {
|
|
reject(err);
|
|
})
|
|
});
|
|
}
|
|
|
|
finishTransaction(transaction) {
|
|
return new Promise((resolve, reject) => {
|
|
this._channel.finishTransaction(transaction, (res) => {
|
|
resolve(res);
|
|
}, (err) => {
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
getChannels(success, fail) {
|
|
if (this._channel !== null) {
|
|
success(this._channel)
|
|
return
|
|
}
|
|
|
|
if (this._channelError !== null) {
|
|
fail(this._channelError)
|
|
return
|
|
}
|
|
|
|
uni.getProvider({
|
|
service: 'payment',
|
|
success: (res) => {
|
|
this._channel = res.providers.find((channel) => {
|
|
return (channel.id === 'appleiap')
|
|
})
|
|
|
|
if (this._channel) {
|
|
success(this._channel)
|
|
} else {
|
|
this._channelError = {
|
|
errMsg: 'paymentContext:fail iap service not found'
|
|
}
|
|
fail(this._channelError)
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
get channel() {
|
|
return this._channel;
|
|
}
|
|
}
|
|
|
|
export {
|
|
Iap,
|
|
IapTransactionState
|
|
} |