flutter - 关于支付方式 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),
],
),
),
),
);
}
}
解决方案
您不能直接将结果作为单个字符串获取,而响应将来自 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
推荐阅读
- reactjs - 如何将道具从功能组件传递到类组件
- javascript - javascript在动态生成的元素中设置onclick
- android - 需要帮助使用 Google Oauth 和 Android 配置 Django Rest API
- deep-learning - 关于过拟合模型
- haxe - 裸包声明的目的是什么,它有什么作用?
- java - 为什么JDK Thread StackSize 为0?
- rust - 如何使用 serde 反序列化结构中的 json 格式的结构数组?
- javascript - 后续的变量声明必须具有相同的类型。变量“where”必须是“any[]”类型,但这里有“string[]”类型
- wordpress - 在我的 htaccess 中重写规则可能导致身份验证登录连续弹出 3 次
- javascript - TypeError:this.state.annonces.map 不是函数