123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // uni iap
- 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) => {
- 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
- }
|