我正在使用返回以下响应的支付方法:
{
"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插件。我想要从这个response.For示例中获得'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),
],
),
),
),
);
}
}发布于 2020-06-13 20:50:49
import package:dart.io;
var jsonData = json.decode(_result);
String txnMessage = jsonData['TxnMessage'];
print(txnMessage);发布于 2020-06-13 22:02:30
您不能直接以单字符串的形式获得结果,相反,响应将是form 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,
);然后使用dart的转换库对其进行解码。它将提供一个已解码的json,您可以在其中访问该特定字段。
final decodedJson = jsonDecode(response);
final String TxnMessage = decodedJson['TxnMessage'];
print(TxnMessage);它应该会给你想要的结果。这基本上就是json的序列化和反序列化的工作方式。‘如果你想获得更多信息,你可以查看链接:Json and Serialization
https://stackoverflow.com/questions/62355589
复制相似问题