#flutter #stripe-payments #strip #flutter-test #flutterwebviewplugin
#flutter #stripe-платежи #Стриптиз #flutter-тест #flutterwebviewplugin
Вопрос:
Я использую платежный шлюз stripe в своем приложении, все работает нормально, когда я ввожу данные карты, после чего он перенаправляется на страницу OTP после ввода otp и отправки выдает эту ошибку
Эта проблема возникает только в реальном режиме, в тестовом режиме дебетовая карта не запрашивает OTP
I/flutter ( 5342): errprint : PlatformException(failed, failed, null, null)
payment-service.dart
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
import 'package:stripe_payment/stripe_payment.dart';
class StripeTransactionResponse {
String message;
bool success;
StripeTransactionResponse({this.message, this.success});
}
class StripeService {
static String apiBase = 'https://api.stripe.com/v1';
static String paymentApiUrl = '${StripeService.apiBase}/payment_intents';
static String secret = 'xxxMy_secretxxx';
static Map<String, String> headers = {
'Authorization': 'Bearer ${StripeService.secret}',
'Content-Type': 'application/x-www-form-urlencoded'
};
static init() {
StripePayment.setOptions(StripeOptions(
publishableKey: "xxxMy_keyxxx",
androidPayMode: 'production'));
}
static Future<StripeTransactionResponse> payViaExistingCard(
{String amount, String currency, CreditCard card}) async {
try {
var paymentMethod = await StripePayment.createPaymentMethod(
PaymentMethodRequest(card: card));
var paymentIntent =
await StripeService.createPaymentIntent(amount, currency);
print("payment intent ${paymentIntent}");
var response = await StripePayment.confirmPaymentIntent(PaymentIntent(
clientSecret: paymentIntent['client_secret'],
paymentMethodId: paymentMethod.id));
print("Payment confirm ${response.status}");
if (response.status == 'succeeded') {
return new StripeTransactionResponse(
message: 'Transaction successful', success: true);
} else {
return new StripeTransactionResponse(
message: 'Transaction failed', success: false);
}
} on PlatformException catch (err) {
print("errprint : $err");
return StripeService.getPlatformExceptionErrorResult(err);
} catch (err) {
print("errprint$err");
return new StripeTransactionResponse(
message: 'Transaction failed: ${err.toString()}', success: false);
}
}
static Future<Map<String, dynamic>> createPaymentIntent(
String amount, String currency) async {
try {
Map<String, dynamic> body = {
'amount': amount,
'currency': currency,
'payment_method_types[]': 'card',
'description': 'Software development services',
'shipping[name]': 'Jenny Rosen',
'shipping[address][line1]': '510 Townsend St',
'shipping[address][postal_code]': '98140',
'shipping[address][city]': 'San Francisco',
'shipping[address][state]': 'TN',
'shipping[address][country]': 'IN',
};
var response = await http.post(StripeService.paymentApiUrl,
body: body, headers: StripeService.headers);
print("check post res${jsonDecode(response.body)}");
return jsonDecode(response.body);
} catch (err) {
print('err charging user: ${err.toString()}');
}
return null;
}
}
Это мой pubspec.yaml
name: message
description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a .
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0 1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
intro_slider: ^2.3.2
firebase_auth: ^0.18.0 1
cloud_firestore: ^0.14.0 2
fluttertoast: ^7.0.2
image_picker: ^0.6.0 9
shared_preferences: ^0.5.3 1
firebase_storage: ^4.0.0
#flutter_html: ^1.0.2
firebase_core: ^0.5.0
giffy_dialog:
cached_network_image: ^2.2.0 1
modal_progress_hud: ^0.1.3
intl: ^0.16.1
flutter_clipboard_manager:
sentry: ^2.2.0
timeago: ^2.0.27
qr_flutter:
graphql:
image_cropper: ^1.0.2
contacts_service: ^0.4.6
permission_handler: ^5.0.1 1
share: ^0.6.1
fleva_icons: ^1.0.0
google_fonts : ^0.2.0
flutter_staggered_grid_view: ^0.3.0
flutter_icons: ^1.0.0 1
flutter_cache_store:
web3dart: ^1.2.3
bitcoins: ^1.0.3
#bitcoinFlutter
bitcoin_flutter: ^2.0.1
carousel_slider: ^1.3.1
transparent_image: ^1.0.0
smooth_star_rating: ^1.0.3
dots_indicator: ^1.1.0
bip32: ^1.0.5
bip39: ^1.0.3
tuple:
hex: ^0.1.2
scoped_model: ^1.0.1
equatable:
crypto: ^2.1.5
encrypt: ^4.0.2
localstorage:
path_provider:
photo_view: ^0.4.0
mime: ^0.9.6 2
ntp: ^1.0.3
decimal:
virtual_keyboard:
local_auth:
url_launcher: ^5.7.2
launch_review: ^2.0.0
flutter_secure_storage: ^3.3.4
giphy_client: ^0.2.0
flutter_barcode_scanner:
firebase_messaging: ^5.0.2
font_awesome_flutter:
#otpinput field
pin_code_fields: ^5.0.1
#otpanimation lib
flare_flutter: ^2.0.6
flutter_slidable: ^0.5.7
file_picker: ^2.0.6
ethereum_address:
flutter_downloader:
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
#upi payment gateway
upi_india: ^2.1.2
cool_alert: ^1.0.1
#webview for paymentgateway
#webview_flutter: ^1.0.0
#paypal payment gateway
http_auth: ^0.3.0
#Razorpay payment gateway
#razorpay_flutter: ^1.2.2
#stripe payment gateway
stripe_payment: ^1.0.8
#stripeUI
flutter_credit_card: ^0.1.3
progress_dialog: ^1.2.2
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
assets:
- assets/img_not_available.jpeg
- assets/flags/
- assets/emoji/
- assets/images/
- assets/bg1.jpg
- assets/giphy.png
- assets/anime/otp.flr
- assets/splash.png
- assets/splashc.jpg
- assets/json/FacebookPost.json
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
Ответ №1:
Предполагая, что «OTP» является «одноразовым паролем» как часть 3D Secure flow, вы можете запустить его в тестовом режиме, используя нормативные тестовые карты SCA, такие как карты 3155 или 3184.
Неясно, откуда взялась ваша ошибка, но если вы можете поделиться более подробной информацией с reproduction в тестовом режиме, тогда кто-нибудь сможет предложить больше предложений.
Комментарии:
1. Спасибо, что предложили 3D Secure flow, это мне очень помогает в моем случае проблема заключалась в том, что моя дебетовая корзина не принимала международные платежи