Flutter NearPay SDK не может подключиться к терминалу из-за ошибки «пользователь не найден» в песочницеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Flutter NearPay SDK не может подключиться к терминалу из-за ошибки «пользователь не найден» в песочнице

Сообщение Anonymous »

Я интегрирую NearPay SDK в приложение Flutter для обработки платежей NFC на POS-устройстве iMin и печати квитанций с помощью принтера iMin.
Среда
Flutter: 3.35.5
Android: minSdkVersion 26
NearPay SDK: последняя версия
Среда: песочница
Устройство: iMin POS (например, S1)
Что работает
NearPay SDK инициализируется успешно
Разрешения NFC предоставлены
Устройство и терминал включены
Проблема
При попытке подключения к терминал, операция завершается со следующей ошибкой: пользователь не найден. Это происходит, даже если инициализация SDK завершается без каких-либо проблем.
import 'package:donations/core/nearpay/terminal_config.dart';
import 'package:flutter/material.dart';
import 'package:flutter_terminal_sdk/flutter_terminal_sdk.dart';
импортировать 'package:flutter_terminal_sdk/models/card_reader_callbacks.dart';
import 'package:flutter_terminal_sdk/models/data/ui_dock_position.dart';
импортировать «пакет: flutter_terminal_sdk/models/nearpay_user_response.dart»;
импортировать «пакет: flutter_terminal_sdk/models/purchase_callbacks.dart»;
импорт 'package:flutter_terminal_sdk/models/terminal_response.dart';
import 'package:uuid/uuid.dart';
final FlutterTerminalSdk _terminalSdk = FlutterTerminalSdk();
Future Initialize() async {
// инициализация TerminalSDK может вызвать исключение, поэтому оберните его в блок try-catch
try {

Код: Выделить всё

await \_terminalSdk.initialize(

environment: Environment.sandbox,

// Choose sandbox, production, internal

googleCloudProjectNumber: 162056333315,

// Add your google cloud project number

huaweiSafetyDetectApiKey:

"3lA5jiaqe14enqRRgsVPj0O5FRmEL4LUjsoDlqqXwNs7Jy7eO0pUFvAGhy4w",

// Add your huawei safety detect api key

uiDockPosition: UiDockPosition.BOTTOM_CENTER,

// Optional: set the location of the Tap to Pay modal

country: Country.sa, // Choose country: sa, tr, usa

);
} улов (e) {

Код: Выделить всё

print("Error initializing TerminalSDK: $e");
}
}
Будущее sendOtp(String mobile) async {
попробуй {

Код: Выделить всё

await \_terminalSdk.sendMobileOtp(mobile);

print("✅ OTP sent to $mobile");
} улов (e) {

Код: Выделить всё

print("❌ Error sending OTP: $e");
}

Future connectToTerminal() async {
попробуй {

Код: Выделить всё

print("🔄 جاري الاتصال بالـ Terminal (TID: ${TerminalConfig.tid})...");

// await initialize();

final result = await \_terminalSdk.connectTerminal(

tid: TerminalConfig.tid,

userUUID: TerminalConfig.userUUID,

terminalUUID: TerminalConfig.terminalUUID,

);

print(result);

return result;
} улов (e) {

Код: Выделить всё

print("❌ خطأ أثناء الاتصال: $e");

print(e.toString());

if (e.toString().contains("timeout")) {

print("⏰ الجهاز غير متصل بالشبكة أو بعيد");

} else if (e.toString().contains("invalid")) {

print("🔑 تأكدي من TID أو UUID");

}

return null;
}

Future транзакция1 (контекст BuildContext, строковая сумма) async {
//await Initialize();
final mobile = "+966509738300";
if (TerminalConfig.userUUID.isEmpty) {

Код: Выделить всё

await sendOtp(mobile);

final code = await promptForOtp(context);

if (code == null || code.isEmpty) {

print("❌ User cancelled OTP entry");

return false;

}

final verified = await verifyOtp(mobile, code);

if (!verified) {

print("❌ OTP verification failed, aborting transaction");

return false;

}
} // получаем userUUID
final linkedTerminal = await ConnectToTerminal();
if (connectedTerminal == null) {

Код: Выделить всё

print("فشل الاتصال بالترمينال، لا يمكن إتمام العملية");

return false;
print(connectedTerminal?.tid ?? "");
double? sumDouble = double.tryParse(amount.replaceAll(',', ''));
try {

Код: Выделить всё

final intentUUID = const Uuid().v4();

final customerReferenceNumber = "01142674856";

await connectedTerminal?.purchase(

intentUUID: intentUUID,

amount: amountDouble?.toInt() ?? 0,

callbacks: PurchaseCallbacks(

cardReaderCallbacks: CardReaderCallbacks(

onCardReadSuccess: () {

print("success");

},

onReaderDismissed: () {

print("Reader dismissed by user");

},

),

),

);
print("connectedTerminal.terminalUUID:${connectedTerminal?.terminalUUID}"); print("connectedTerminal.name:${connectedTerminal?.name}");
print("connectedTerminal.tid:${connectedTerminal?.tid}");

Код: Выделить всё

return true;
} улов (e) {

Код: Выделить всё

print(e.toString());

return false;
}
}
Future PromptForOtp(BuildContext context) async {
String otp = '';
return showDialog(

Код: Выделить всё

context: context,

barrierDismissible: false,

builder: (context) =\> AlertDialog(

title: Text('Enter OTP'),

content: TextField(

keyboardType: TextInputType.number,

onChanged: (value) =\> otp = value,

decoration: InputDecoration(hintText: "OTP code"),

),

actions: \[

TextButton(

onPressed: () =\> Navigator.of(context).pop(otp),

child: Text('Submit'),

),

\],

),
);
}
БудущееverifyOtp(String mobile, String code) async {
try {

Код: Выделить всё

final user = await \_terminalSdk.verifyMobileOtp(

mobileNumber: mobile,

code: code,

);

TerminalConfig.userUUID = user.userUUID ?? "";

print("✅ OTP verified, userUUID: ${TerminalConfig.userUUID}");

return TerminalConfig.userUUID.isNotEmpty;
} улов (e) {

Код: Выделить всё

print("❌ Error verifying OTP: $e");

return false;
}

Я использую функцию транзакции 1
Вопрос
Означает ли ошибка «Пользователь не найден», что терминал не связан с той же учетной записью продавца/пользователя, что и учетные данные API, даже если инициализация SDK прошла успешно?
Если да, то каков правильный способ проверки или исправления конфигурация терминала-продавца для тестирования в песочнице?

Подробнее здесь: https://stackoverflow.com/questions/798 ... d-error-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»