payWithAgreement method
Future<BkashPaymentResponse>
payWithAgreement({
- required BuildContext context,
- required double amount,
- required String agreementId,
- required String marchentInvoiceNumber,
Call this Fucntion to Pay with AgreementId
Throws BkashFailure for error with a user-friendly message
Implementation
Future<BkashPaymentResponse> payWithAgreement({
required BuildContext context,
required double amount,
required String agreementId,
required String marchentInvoiceNumber,
}) async {
await _validateToken();
final paymentResponse = await _token?.fold<Future<BkashPaymentResponse>>(
(l) async => throw l,
(tokenRes) async {
final apiResponse = await _bkashApi.payWithAgreement(
idToken: tokenRes.idToken,
agreementId: agreementId,
amount: amount.toString(),
merchantInvoiceNumber: marchentInvoiceNumber,
);
return await apiResponse.fold<Future<BkashPaymentResponse>>(
(l) async => throw l,
(apiRes) async {
if (apiRes.statusCode != "0000") {
throw BkashFailure(message: apiRes.statusMessage);
}
final bkashPaymentStatus = await Navigator.push<BkashPaymentStatus>(
context,
MaterialPageRoute(
builder: (context) => FlutterBkashView(
bkashURL: apiRes.bkashURL,
failureCallbackURL: apiRes.failureCallbackURL,
successCallbackURL: apiRes.successCallbackURL,
cancelledCallbackURL: apiRes.cancelledCallbackURL,
),
),
) ??
BkashPaymentStatus.canceled;
if (bkashPaymentStatus == BkashPaymentStatus.successed) {
final result = await _bkashApi.executePayWithAgreement(
paymentId: apiRes.paymentID,
idToken: tokenRes.idToken,
);
return result.fold<BkashPaymentResponse>(
(l) => throw l,
(r) {
// failed to execute
if (r.statusCode != "0000") {
throw BkashFailure(message: r.statusMessage);
}
return BkashPaymentResponse(
r.paymentExecuteTime,
trxId: r.trxID,
payerReference: r.payerReference,
paymentId: r.paymentID,
customerMsisdn: r.customerMsisdn,
merchantInvoiceNumber: r.merchantInvoiceNumber,
);
},
);
}
if (bkashPaymentStatus == BkashPaymentStatus.canceled) {
throw BkashFailure(message: "Payment Cancelled");
}
throw BkashFailure();
},
);
},
);
if (paymentResponse == null) {
throw BkashFailure();
}
return paymentResponse;
}