ChadCSong

苹果订阅相关

......@@ -24,4 +24,19 @@ class OrderApi extends BaseApi {
return json.decode(value.data);
});
}
Future<dynamic> verifyOrder(String orderId, String type, String token, {Map<String, dynamic>? others}) {
var data = {
"order_sn": orderId,
"pay_type": type,
"token": token,
"others": others ?? {},
};
return post("pay", data: data).then((value) {
if (TextUtil.isEmpty(value.data)) {
return {};
}
return value.data;
});
}
}
......
......@@ -4,8 +4,12 @@ import 'package:Parlando/apis/api_order.dart';
import 'package:Parlando/membership/models/membership_entity.dart';
import 'package:common_utils/common_utils.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
class PaymentSdk {
var currentOrder;
PaymentSdk._privateConstructor();
static final PaymentSdk _instance = PaymentSdk._privateConstructor();
......@@ -59,6 +63,7 @@ class PaymentSdk {
onFailed?.call();
return;
}
currentOrder = orderId;
final PurchaseParam purchaseParam = PurchaseParam(productDetails: details, applicationUserName: orderId);
if (_isConsumable(details)) {
InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
......@@ -97,7 +102,30 @@ class PaymentSdk {
}
void _deliverProduct(PurchaseDetails purchaseDetails) {
onPaySuccess?.call();
String type = "";
Map<String, dynamic> otherField = {};
if (purchaseDetails is GooglePlayPurchaseDetails) {
currentOrder = purchaseDetails.billingClientPurchase.obfuscatedAccountId;
type = "google";
otherField["google"] = {
"originalJson": purchaseDetails.billingClientPurchase.originalJson,
};
}
if (purchaseDetails is AppStorePurchaseDetails) {
type = "apple";
otherField["apple"] = {
"transactionIdentifier": purchaseDetails.skPaymentTransaction.transactionIdentifier,
"originalTransactionIdentifier":
purchaseDetails.skPaymentTransaction.originalTransaction?.transactionIdentifier ?? "",
};
}
var serverVerifyStr = purchaseDetails.verificationData.serverVerificationData;
var verifySource = purchaseDetails.verificationData.source;
otherField["source"] = verifySource;
OrderApi.request.verifyOrder(currentOrder, type, serverVerifyStr, others: otherField).then((value) {
if (value != null) {}
onPaySuccess?.call();
});
}
void _handleInvalidPurchase(PurchaseDetails purchaseDetails) {
......