Я разрабатываю платежный модуль для приложения, над которым сейчас работаю. это код функции будущего вызова b2c
Future b2cPayment({
required String phoneNumber,
required String amount,
required String remarks,
}) async {
try {
String originatorConversationID = 'B2C_${DateTime.now()}_${Random().nextInt(1000000).toString().padLeft(6, '0')}';
// Validate amount for B2C
final amountValue = int.tryParse(amount);
if (amountValue == null || amountValue < 10) {
throw Exception('Minimum withdrawal amount is 10 KES');
}
if (amountValue > 150000) {
throw Exception('Maximum withdrawal amount is 150,000 KES');
}
final token = await _getAccessToken(false);
// Format phone number
String formattedPhone = phoneNumber.trim();
if (formattedPhone.startsWith('0')) {
formattedPhone = '254${formattedPhone.substring(1)}';
} else if (formattedPhone.startsWith('+254')) {
formattedPhone = formattedPhone.substring(1);
}
final requestData = {
'OriginatorCoversationID': originatorConversationID,
'InitiatorName': Mpesa_Withdraw_Config.initiatorName,
'SecurityCredential': Mpesa_Withdraw_Config.securityCredential,
'CommandID':
'BusinessPayment', // Use 'BusinessPayment' not 'PromotionPayment'
'Amount': amount,
'PartyA': Mpesa_Withdraw_Config.businessShortCode,
'PartyB': formattedPhone,
'Remarks': remarks,
'QueueTimeOutURL': Mpesa_Withdraw_Config.timeoutUrl,
'ResultURL': Mpesa_Withdraw_Config.b2cCallbackUrl,
'Occasion': 'Withdrawal',
};
final response = await http
.post(
Uri.parse(
'${Mpesa_Withdraw_Config.baseUrl}/mpesa/b2c/v3/paymentrequest'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
body: jsonEncode(requestData),
)
.timeout(
const Duration(seconds: 30),
onTimeout: () {
throw Exception('Request timed out. Please try again.');
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
// Check for errors in response
if (data['errorCode'] != null) {
throw Exception('M-Pesa B2C Error: ${data['errorMessage']}');
}
return data;
} else {
final errorBody = jsonDecode(response.body);
throw Exception(
'${response.statusCode}: B2C payment failed: ${errorBody['errorMessage'] ?? response.body}');
print('${errorBody['errorMessage']}');
}
} catch (e) {
if (e.toString().contains('SocketException')) {
throw Exception('No internet connection.');
}
rethrow;
}
}
Я продолжаю получать эту ошибку, пожалуйста, помогите мне
введите описание изображения здесь
Я пытался создать функцию генератора() для генерации случайного строкового значения для originatorConversationId, но все равно получил ту же ошибку
String generator(){
const originatorConversationID = `B2C_${Date.now()}_${Math.random().toString(36).substring(7)}`;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... call-error
Daraja API (Safacricom) Ошибка вызова API флаттера b2c для оплаты ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1760388908
Anonymous
Я разрабатываю платежный модуль для приложения, над которым сейчас работаю. это код функции будущего вызова b2c
Future b2cPayment({
required String phoneNumber,
required String amount,
required String remarks,
}) async {
try {
String originatorConversationID = 'B2C_${DateTime.now()}_${Random().nextInt(1000000).toString().padLeft(6, '0')}';
// Validate amount for B2C
final amountValue = int.tryParse(amount);
if (amountValue == null || amountValue < 10) {
throw Exception('Minimum withdrawal amount is 10 KES');
}
if (amountValue > 150000) {
throw Exception('Maximum withdrawal amount is 150,000 KES');
}
final token = await _getAccessToken(false);
// Format phone number
String formattedPhone = phoneNumber.trim();
if (formattedPhone.startsWith('0')) {
formattedPhone = '254${formattedPhone.substring(1)}';
} else if (formattedPhone.startsWith('+254')) {
formattedPhone = formattedPhone.substring(1);
}
final requestData = {
'OriginatorCoversationID': originatorConversationID,
'InitiatorName': Mpesa_Withdraw_Config.initiatorName,
'SecurityCredential': Mpesa_Withdraw_Config.securityCredential,
'CommandID':
'BusinessPayment', // Use 'BusinessPayment' not 'PromotionPayment'
'Amount': amount,
'PartyA': Mpesa_Withdraw_Config.businessShortCode,
'PartyB': formattedPhone,
'Remarks': remarks,
'QueueTimeOutURL': Mpesa_Withdraw_Config.timeoutUrl,
'ResultURL': Mpesa_Withdraw_Config.b2cCallbackUrl,
'Occasion': 'Withdrawal',
};
final response = await http
.post(
Uri.parse(
'${Mpesa_Withdraw_Config.baseUrl}/mpesa/b2c/v3/paymentrequest'),
headers: {
'Authorization': 'Bearer $token',
'Content-Type': 'application/json',
},
body: jsonEncode(requestData),
)
.timeout(
const Duration(seconds: 30),
onTimeout: () {
throw Exception('Request timed out. Please try again.');
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
// Check for errors in response
if (data['errorCode'] != null) {
throw Exception('M-Pesa B2C Error: ${data['errorMessage']}');
}
return data;
} else {
final errorBody = jsonDecode(response.body);
throw Exception(
'${response.statusCode}: B2C payment failed: ${errorBody['errorMessage'] ?? response.body}');
print('${errorBody['errorMessage']}');
}
} catch (e) {
if (e.toString().contains('SocketException')) {
throw Exception('No internet connection.');
}
rethrow;
}
}
Я продолжаю получать эту ошибку, пожалуйста, помогите мне
введите описание изображения здесь
Я пытался создать функцию генератора() для генерации случайного строкового значения для originatorConversationId, но все равно получил ту же ошибку
String generator(){
const originatorConversationID = `B2C_${Date.now()}_${Math.random().toString(36).substring(7)}`;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79789631/daraja-api-safacricom-b2c-payment-flutter-api-call-error[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия