createAgreement method
Future<BkashAgreementResponse>
createAgreement({
- required BuildContext context,
- String payerReference = " ",
Call this function to Create an AgreementId
Throws BkashFailure for error with a user-friendly message
Provide User Phonenumber for payerReference
Implementation
Future<BkashAgreementResponse> createAgreement({
required BuildContext context,
String payerReference = " ",
}) async {
await _validateToken();
final paymentResponse = await _token?.fold<Future<BkashAgreementResponse>>(
(l) async => throw l,
(tokenRes) async {
final agreementResponse = await _bkashApi.createAgreement(
idToken: tokenRes.idToken,
payerReference: payerReference,
);
return await agreementResponse.fold<Future<BkashAgreementResponse>>(
(l) async => throw l,
(agrRes) async {
if (agrRes.statusCode != "0000") {
throw BkashFailure(message: agrRes.statusMessage);
}
final bkashPaymentStatus = await Navigator.push<BkashPaymentStatus>(
context,
MaterialPageRoute(
builder: (context) => FlutterBkashView(
bkashURL: agrRes.bkashURL,
failureCallbackURL: agrRes.failureCallbackURL,
successCallbackURL: agrRes.successCallbackURL,
cancelledCallbackURL: agrRes.cancelledCallbackURL,
),
),
) ??
BkashPaymentStatus.canceled;
if (bkashPaymentStatus == BkashPaymentStatus.successed) {
final result = await _bkashApi.executeCreateAgreement(
paymentId: agrRes.paymentID,
idToken: tokenRes.idToken,
);
return result.fold<BkashAgreementResponse>(
(l) => throw l,
(r) {
// failed to execute
if (r.statusCode != "0000") {
throw BkashFailure(message: r.statusMessage);
}
return BkashAgreementResponse(
r.agreementExecuteTime,
payerReference: r.payerReference,
paymentId: r.paymentID,
customerMsisdn: r.customerMsisdn,
agreementId: r.agreementID,
);
},
);
}
if (bkashPaymentStatus == BkashPaymentStatus.canceled) {
throw BkashFailure(message: "Agreement creation Cancelled");
}
throw BkashFailure(message: "Agreement creation Failed");
},
);
},
);
if (paymentResponse == null) {
throw BkashFailure();
}
return paymentResponse;
}