出现此错误I/flutter(26554):格式异常:意外字符(在字符1处)

wljmcqd8  于 2023-03-19  发布在  Flutter
关注(0)|答案(1)|浏览(155)

我收到此错误

I/flutter (26554): FormatException: Unexpected character (at character 1)
I/flutter (26554): <html>
I/flutter (26554): ^

尝试向https://api.flutterwave.com/v3/transfers发出POST请求时
有效载荷如下所示(内部 Postman )

{
    "amount": 500,
    "narration": "Test Int'l bank transfers",
    "currency": "USD",
    "beneficiary_name": "Mark Cuban",
    "meta": [
        {
            "AccountNumber": "09182972BH",
            "RoutingNumber": "0000000002993",
            "SwiftCode": "ABJG190",
            "BankName": "BANK OF AMERICA, N.A., SAN FRANCISCO, CA",
            "BeneficiaryName": "Mark Cuban",
            "BeneficiaryAddress": "San Francisco, 4 Newton",
            "BeneficiaryCountry": "US"
        }
    ]
}

它给了我这个响应(在Postman内部测试,结果正确)

{
    "status": "success",
    "message": "Transfer Queued Successfully",
    "data": {
        "id": 396427,
        "account_number": "FOREIGN-ACCOUNT",
        "bank_code": "FOREIGN-BANK",
        "full_name": "Mark Cuban",
        "created_at": "2023-03-10T20:30:52.000Z",
        "currency": "USD",
        "amount": 500,
        "fee": 40,
        "status": "NEW",
        "reference": "ebce2909fc3a57a7",
        "meta": [
            {
                "MerchantName": "TestLucas LLC",
                "SenderCountry": "NG",
                "AccountNumber": "FOREIGN-ACCOUNT",
                "RoutingNumber": "FOREIGN-BANK",
                "Sender": "TestLucas LLC",
                "Address": null,
                "MobileNumber": "23480000000000"
            }
        ],
        "narration": "Test Int'l bank transfers",
        "complete_message": "",
        "requires_approval": 0,
        "is_approved": 1,
        "bank_name": "FA-BANK"
    }
}

但是当我在flutter代码中测试时,它给我这个错误

I/flutter (26554): FormatException: Unexpected character (at character 1)
I/flutter (26554): <html>
I/flutter (26554): ^

请查看我的Flutter代码

class UsTransferProvider extends ChangeNotifier {
  final Future<SharedPreferences> _pref = SharedPreferences.getInstance();

  bool _isLoading = false;
  String _reqMessage = '';

  bool get isLoading => _isLoading;
  String get reqMessage => _reqMessage;

  void usTransfer({
    required String amount,
    required String narration,
    required String currency,
    required String bankName,
    required String accountNum,
    required String beneficiary_name,
    required String routingNumber,
    required String swiftCode,
    required String beneficiaryCountry,
    required String beneficiaryAddress,
  }) async {
    _isLoading = true;
    notifyListeners();

    String url = 'https://api.flutterwave.com/v3/transfers';

    String tokenUser = "FLWSECK_TEST-153740d351951b5f6d5ae8b903e0c467-X";
    final body = {
      "amount": amount,
      "narration": narration,
      "currency": currency,
      "beneficiary_name": beneficiary_name,
      "meta": [
        {
          "AccountNumber": accountNum,
          "RoutingNumber": routingNumber,
          "SwiftCode": swiftCode,
          "BankName": bankName,
          "BeneficiaryName": beneficiary_name,
          "BeneficiaryAddress": beneficiaryAddress,
          "BeneficiaryCountry": beneficiaryCountry,
        }
      ]
    };
    print(body);

    Map<String, String> headers = {
      'Content-Type': 'application/json',
      'Charset': 'utf-8',
      'Authorization': 'Bearer $tokenUser'
    };

    print(tokenUser);
    //making http request

    http.Response req = await http.post(Uri.parse(url),
        headers: headers, body: json.encode(body));

    try {
      if (req.statusCode == 200 || req.statusCode == 201) {
        print(req.body);
        _isLoading = false;
        _reqMessage = "Transfer Successful";
        pushNotification(
            'Money Transfer Complete', 'Successfully sent $amount');
        notifyListeners();
      } else {
        final res = json.decode(req.body);
        _isLoading = false;
        _reqMessage = '';
        notifyListeners();
      }
    } on SocketException catch (_) {
      _isLoading = false;
      _reqMessage = 'No Internet Connection';
      notifyListeners();
      print(_);
    } catch (e) {
      _isLoading = false;
      _reqMessage = 'Check your Internet connection';
      notifyListeners();

      print(e);
    }
  }

  void clear() {
    _reqMessage = '';
    notifyListeners();
  }
}

调用它的代码是这样的

Consumer<UsTransferProvider>(builder: (context, auth, child) {
            WidgetsBinding.instance.addPostFrameCallback((_) {
              if (auth.reqMessage != '') {
                showMessage(
                  message: auth.reqMessage,
                  context: context,
                );
              }
              auth.clear();
            });
            return customButton(
                tap: () {
                  if (amountController.text.isEmpty ||
                      narrationController.text.isEmpty ||
                      accountController.text.isEmpty ||
                      routingController.text.isEmpty ||
                      beneficiaryAddressController.text.isEmpty ||
                      beneficiaryCountryController.text.isEmpty ||
                      beneficiaryNameController.text.isEmpty ||
                      swifcodeController.text.isEmpty ||
                      _mybank.toString().isEmpty) {
                    showMessage(
                      message: "All field is required",
                      context: context,
                    );
                  } else {
                    auth.usTransfer(
                        amount: amountController.text,
                        narration: narrationController.text,
                        currency: selectCurrency,
                        bankName: _mybank.toString().trim(),
                        accountNum: accountController.text,
                        beneficiary_name: beneficiaryNameController.text,
                        routingNumber: routingController.text,
                        swiftCode: swifcodeController.text,
                        beneficiaryCountry: beneficiaryCountryController.text,
                        beneficiaryAddress: beneficiaryAddressController.text);
                  }
                },
                text: 'Send Money',
                textColor: white,
                color: primaryColor,
                status: auth.isLoading,
                borderColor: primaryColor);
          })

我该怎么走?
编辑
如您所要求,我的 Postman 要求如下

n3schb8v

n3schb8v1#

首先,您应该确保此错误仅由于此金额变量而发生,您可以给予硬编码值以检查所有其他参数是否正确传递。如果金额为int,如amount=500(此处我认为500是临时整数),则您可以传递

final body ={
---
"amount":amount,
----
}

如果amount是"500"等字符串中整数,则可以遵循以下方法

int? amountint=int.parse(amount.toString())

那么

final body ={
 
    if(amountint!=null)
    "amount":amountint,
 
    };

相关问题