1.0.3: Fixed iOS confirmation flow. Refactored TokenizationResult, now it's have SuccessTokenizationResult, ErrorTokenizationResult and CanceledTokenizationResult versions.
This commit is contained in:
@@ -6,11 +6,16 @@ class PaymentMethodTypes {
|
||||
return paymentMethodTypes.map((e) => e.toString()).toList();
|
||||
}
|
||||
|
||||
static const PaymentMethodTypes bankCard = PaymentMethodTypes([PaymentMethod.bankCard]);
|
||||
static const PaymentMethodTypes yooMoney = PaymentMethodTypes([PaymentMethod.yooMoney]);
|
||||
static const PaymentMethodTypes sberbank = PaymentMethodTypes([PaymentMethod.sberbank]);
|
||||
static const PaymentMethodTypes applePay = PaymentMethodTypes([PaymentMethod.applePay]);
|
||||
static const PaymentMethodTypes googlePay = PaymentMethodTypes([PaymentMethod.googlePay]);
|
||||
static const PaymentMethodTypes bankCard =
|
||||
PaymentMethodTypes([PaymentMethod.bankCard]);
|
||||
static const PaymentMethodTypes yooMoney =
|
||||
PaymentMethodTypes([PaymentMethod.yooMoney]);
|
||||
static const PaymentMethodTypes sberbank =
|
||||
PaymentMethodTypes([PaymentMethod.sberbank]);
|
||||
static const PaymentMethodTypes applePay =
|
||||
PaymentMethodTypes([PaymentMethod.applePay]);
|
||||
static const PaymentMethodTypes googlePay =
|
||||
PaymentMethodTypes([PaymentMethod.googlePay]);
|
||||
static const PaymentMethodTypes all = PaymentMethodTypes([
|
||||
PaymentMethod.bankCard,
|
||||
PaymentMethod.yooMoney,
|
||||
@@ -20,10 +25,22 @@ class PaymentMethodTypes {
|
||||
]);
|
||||
}
|
||||
|
||||
enum PaymentMethod {
|
||||
bankCard,
|
||||
yooMoney,
|
||||
applePay,
|
||||
googlePay,
|
||||
sberbank
|
||||
}
|
||||
enum PaymentMethod { bankCard, yooMoney, applePay, googlePay, sberbank }
|
||||
|
||||
extension PaymentMethodExtension on PaymentMethod {
|
||||
static PaymentMethod fromStringValue(String rawValue) {
|
||||
switch (rawValue) {
|
||||
case 'bank_card':
|
||||
return PaymentMethod.bankCard;
|
||||
case 'yoo_money':
|
||||
return PaymentMethod.yooMoney;
|
||||
case 'sberbank':
|
||||
return PaymentMethod.sberbank;
|
||||
case 'apple_pay':
|
||||
return PaymentMethod.applePay;
|
||||
case 'google_pay':
|
||||
return PaymentMethod.googlePay;
|
||||
}
|
||||
return PaymentMethod.bankCard;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,35 +1,62 @@
|
||||
import 'package:yookassa_payments_flutter/models/payment_method_types.dart';
|
||||
|
||||
class TokenizationResult {
|
||||
String token;
|
||||
PaymentMethod? paymentMethodType;
|
||||
TokenizationResult._();
|
||||
|
||||
TokenizationResult(this.token, this.paymentMethodType);
|
||||
factory TokenizationResult.success(
|
||||
String token, PaymentMethod? paymentMethodType) =
|
||||
SuccessTokenizationResult;
|
||||
factory TokenizationResult.canceled() = CanceledTokenizationResult;
|
||||
factory TokenizationResult.error(String error) = ErrorTokenizationResult;
|
||||
|
||||
factory TokenizationResult.fromJson(Map<String, dynamic> json) {
|
||||
var token = json['paymentToken'];
|
||||
|
||||
PaymentMethod? paymentMethodType;
|
||||
switch(json['paymentMethodType']){
|
||||
case "sberbank":
|
||||
paymentMethodType = PaymentMethod.sberbank;
|
||||
break;
|
||||
case "bank_card":
|
||||
paymentMethodType = PaymentMethod.bankCard;
|
||||
break;
|
||||
case "yoo_money":
|
||||
paymentMethodType = PaymentMethod.yooMoney;
|
||||
break;
|
||||
case "apple_pay":
|
||||
paymentMethodType = PaymentMethod.applePay;
|
||||
break;
|
||||
case "google_pay":
|
||||
paymentMethodType = PaymentMethod.googlePay;
|
||||
break;
|
||||
final status = json['status'];
|
||||
switch (status) {
|
||||
case 'success':
|
||||
{
|
||||
final token = json['paymentToken'];
|
||||
PaymentMethod? paymentMethodType =
|
||||
_paymentMethodFromString(json['paymentMethodType']);
|
||||
return TokenizationResult.success(token, paymentMethodType);
|
||||
}
|
||||
case 'canceled':
|
||||
return TokenizationResult.canceled();
|
||||
default:
|
||||
break;
|
||||
return TokenizationResult.error(json['error'] ?? 'Unknown error');
|
||||
}
|
||||
|
||||
return TokenizationResult(token, paymentMethodType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SuccessTokenizationResult extends TokenizationResult {
|
||||
final String token;
|
||||
final PaymentMethod? paymentMethodType;
|
||||
|
||||
SuccessTokenizationResult(this.token, this.paymentMethodType) : super._();
|
||||
}
|
||||
|
||||
class CanceledTokenizationResult extends TokenizationResult {
|
||||
CanceledTokenizationResult() : super._();
|
||||
}
|
||||
|
||||
class ErrorTokenizationResult extends TokenizationResult {
|
||||
final String error;
|
||||
|
||||
ErrorTokenizationResult(this.error) : super._();
|
||||
}
|
||||
|
||||
PaymentMethod? _paymentMethodFromString(String type) {
|
||||
switch (type) {
|
||||
case "sberbank":
|
||||
return PaymentMethod.sberbank;
|
||||
case "bank_card":
|
||||
return PaymentMethod.bankCard;
|
||||
case "yoo_money":
|
||||
return PaymentMethod.yooMoney;
|
||||
case "apple_pay":
|
||||
return PaymentMethod.applePay;
|
||||
case "google_pay":
|
||||
return PaymentMethod.googlePay;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ export 'models/tokenization_settings.dart';
|
||||
export 'models/customization_settings.dart';
|
||||
export 'models/google_pay_parameters.dart';
|
||||
export 'models/test_mode_settings.dart';
|
||||
export 'models/tokenization_result.dart';
|
||||
export 'input_data/tokenization_module_input_data.dart';
|
||||
|
||||
import 'input_data/saved_card_module_input_data.dart';
|
||||
@@ -14,28 +15,31 @@ import 'package:flutter/services.dart';
|
||||
import 'package:yookassa_payments_flutter/models/tokenization_result.dart';
|
||||
import 'input_data/tokenization_module_input_data.dart';
|
||||
import 'models/payment_method_types.dart';
|
||||
import 'models/tokenization_result.dart';
|
||||
|
||||
class YookassaPaymentsFlutter {
|
||||
static const MethodChannel _channel = MethodChannel('ru.yoomoney.yookassa_payments_flutter/yoomoney');
|
||||
static const MethodChannel _channel =
|
||||
MethodChannel('ru.yoomoney.yookassa_payments_flutter/yoomoney');
|
||||
|
||||
static Future<TokenizationResult> tokenization(TokenizationModuleInputData data) async {
|
||||
static Future<TokenizationResult> tokenization(
|
||||
TokenizationModuleInputData data) async {
|
||||
var inputData = data.toJson();
|
||||
|
||||
return await _channel
|
||||
.invokeMethod('tokenization', inputData).then((value) => TokenizationResult.fromJson(json.decode(value)));
|
||||
.invokeMethod('tokenization', inputData)
|
||||
.then((value) => TokenizationResult.fromJson(json.decode(value)));
|
||||
}
|
||||
|
||||
static Future<void> confirmation(String url, PaymentMethod? paymentMethod) async {
|
||||
await _channel
|
||||
.invokeMethod('confirmation',
|
||||
{
|
||||
'url': url,
|
||||
'paymentMethod': paymentMethod?.name
|
||||
}
|
||||
);
|
||||
static Future<void> confirmation(
|
||||
String url, PaymentMethod? paymentMethod) async {
|
||||
var inputData = {'url': url, 'paymentMethod': paymentMethod?.name};
|
||||
return await _channel.invokeMethod('confirmation', inputData);
|
||||
}
|
||||
|
||||
static Future<TokenizationResult> bankCardRepeat(SavedBankCardModuleInputData data) async {
|
||||
return await _channel.invokeMethod('repeat', data.toJson()).then((value) => TokenizationResult.fromJson(json.decode(value)));
|
||||
static Future<TokenizationResult> bankCardRepeat(
|
||||
SavedBankCardModuleInputData data) async {
|
||||
return await _channel
|
||||
.invokeMethod('repeat', data.toJson())
|
||||
.then((value) => TokenizationResult.fromJson(json.decode(value)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user