首页 > 解决方案 > 关于支付方式 Flutter

问题描述

我正在使用返回以下响应的付款方式:

{
  "TxnMessage": "Transaction Failed",
  "RespTime": "2020-06-13 12:24:55",
  "BankRefNo": "SITTest6581075080681879",
  "AuthCode": "",
  "TxnStatus": "1",
  "IssuingBank": "HostSim",
  "TxnID": "SITTest6581075080681879",
  "HashValue2": "6b27371a3aaedf7b14d0121aab9eb264791a1bc86bd65a5a18d6d6896de438e5",
  "HashValue": "d48c795d65c1a119bacf67ad4220b2cf6d6c76ef4d3f545fe470833d3180505c",
  "CurrencyCode": "MYR",
  "Amount": "1.00",
  "OrderNumber": "Test6581075080681879",
  "PaymentID": "Test6581075080681879",
  "ServiceID": "SIT",
  "PymtMethod": "CC",
  "TransactionType": "SALE"
}

我正在使用 EGHL Flutter 插件。我想从此响应中获取“TxnMessage”。例如,在这种情况下,我想显示您的交易失败的消息。

我的代码:

import 'dart:async';
import 'dart:convert';

import 'package:eghl_plugin_unofficial/eghl_plugin_unofficial.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';


class Payment extends StatefulWidget {
  @override
  _PaymentState createState() => _PaymentState();
}

class _PaymentState extends State<Payment> {
  String _result = 'Awaiting results';
  MyClass myClass;

  Future<void> pay() async {
    try {
      String paymentId = await Eghlpluginunofficial.generateId('Test');

      String result = await Eghlpluginunofficial.makePayment(
        merchantReturnUrl: 'SDK',
        serviceId: 'SIT',
        password: 'sit12345',
        merchantName: 'GHL ePayment Testing',
        amount: 1.00,
        paymentDescription: 'eGHL Payment testing',
        customerName: 'Somebody',
        customerEmail: 'somebody@somesite.com',
        customerPhone: '60123456789',
        paymentId: paymentId,
        orderNumber: paymentId,
        currencyCode: 'MYR',
        languageCode: 'EN',
        pageTimeout: Duration(
          minutes: 12,
          seconds: 30,
        ),
        transactionType: 'SALE',
        paymentMethod: 'ANY',
        useDebugPaymentUrl: true,
      );

      setState(() {
        _result = result;
      });

      print(_result);

    } on PlatformException catch (err) {
      setState(() {
        _result = 'PlatformException: ${err.toString()}';
      });
    } catch (err) {
      setState(() {
        _result = 'Error: ${err.toString()}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              RaisedButton(
                onPressed: pay,
                child: Text('Click me to launch payment'),
              ),
              Text(_result),
            ],
          ),
        ),
      ),
    );
  }
}

标签: flutterflutter-dependencies

解决方案


您不能直接将结果作为单个字符串获取,而响应将来自 Map。您首先需要解码响应,然后调用您要访问的特定字段。

final response =  await Eghlpluginunofficial.makePayment(
    merchantReturnUrl: 'SDK',
    serviceId: 'SIT',
    password: 'sit12345',
    merchantName: 'GHL ePayment Testing',
    amount: 1.00,
    paymentDescription: 'eGHL Payment testing',
    customerName: 'Somebody',
    customerEmail: 'somebody@somesite.com',
    customerPhone: '60123456789',
    paymentId: paymentId,
    orderNumber: paymentId,
    currencyCode: 'MYR',
    languageCode: 'EN',
    pageTimeout: Duration(
      minutes: 12,
      seconds: 30,
    ),
    transactionType: 'SALE',
    paymentMethod: 'ANY',
    useDebugPaymentUrl: true,
  );

然后使用飞镖的转换库对其进行解码。它将提供一个解码的 json,您可以在其中访问该特定字段。

final decodedJson = jsonDecode(response);
final String TxnMessage = decodedJson['TxnMessage'];
print(TxnMessage);

它应该会给你想要的结果。这就是json的序列化和反序列化的基本工作方式。' 如果想了解更多信息,可以查看链接:Json and Serialization


推荐阅读