b2c method
Future<Map<String, String>>
b2c(
- String initiatorName,
- String securityCredential,
- String? commandid,
- int amount,
- String partyA,
- String partyB,
- Uri queueTimeOutURL,
- Uri resultURL, {
- String? occasion,
})
Implementation
Future<Map<String, String>> b2c(String initiatorName, String securityCredential, String? commandid,
int amount, String partyA, String partyB, String remarks, Uri queueTimeOutURL, Uri resultURL,
{String? occasion}) async {
await setAccessToken();
// this values can be got from; https://developer.safaricom.co.ke/test_credentials
final b2cPayload = {
"InitiatorName": initiatorName,
"SecurityCredential": securityCredential,
"CommandID": commandid,
"Amount": amount,
"PartyA": partyA,
"PartyB": partyB,
"Remarks": remarks,
"QueueTimeOutURL": queueTimeOutURL.toString(),
"ResultURL": resultURL.toString(),
"Occasion": occasion
};
final Map<String, String> result = Map<String, String>();
// todo: handle exceptions
HttpClient client = HttpClient();
HttpClientRequest req = await client.postUrl(getB2cUrl());
req.headers.add("Content-Type", "application/json");
req.headers.add("Authorization", "Bearer " + access_token);
req.write(jsonEncode(b2cPayload)); // write is non-blocking
HttpClientResponse res = await req.close();
await utf8.decoder.bind(res).forEach((bodyString) {
dynamic jsondecodeBody = jsonDecode(bodyString);
if (res.statusCode == 200) {
result["ConversationID"] = jsondecodeBody["ConversationID"].toString();
result["OriginatorConversationID"] = jsondecodeBody["OriginatorConversationID"].toString();
result["ResponseCode"] = jsondecodeBody["ResponseCode"].toString();
result["ResponseDescription"] = jsondecodeBody["ResponseDescription"].toString();
} else {
result["requestId"] = jsondecodeBody["requestId"].toString();
result["errorCode"] = jsondecodeBody["errorCode"].toString();
result["errorMessage"] = jsondecodeBody["errorMessage"].toString();
}
});
return result;
}