// Create a Map to store all the data of a Payment
Map<String, Object> paymentMap = new Map<String, Object>();
paymentMap.put('TotalAmt','20');
paymentMap.put('DisplayName','Breadwinner Inc');
paymentMap.put('CustomerRef' , new Map<String, Object>{'value' => '70'});
// Link first Invoice to a Payment
Map<String,Object> lineMap = new Map<String, Object>();
lineMap.put('Amount','10');
Map<String,Object> linkedTxnMap = new Map<String, Object>();
linkedTxnMap.put('TxnId','233');
linkedTxnMap.put('TxnType','Invoice');
List<object> linkedTxnList = new List<object>();
linkedTxnList.add(linkedTxnMap);
lineMap.put('LinkedTxn',linkedTxnList);
// Link second Invoice to a Payment
Map<String,Object> paymentLineMap = new Map<String, Object>();
paymentLineMap.put('Amount','10');
Map<String,Object> paymentLinkedTxnMap = new Map<String, Object>();
paymentLinkedTxnMap.put('TxnId','234');
paymentLinkedTxnMap.put('TxnType','Invoice');
List<object> paymentLinkedTxnList = new List<object>();
paymentLinkedTxnList.add(paymentLinkedTxnMap);
paymentLineMap.put('LinkedTxn',paymentLinkedTxnList);
List<object> lineList = new List<object>();
lineList.add(lineMap);
lineList.add(paymentLineMap);
paymentMap.put('Line' ,lineList);
// Initializing the RequestJSON Data to be passed.
Map<String, Object> requestJSONMap = new Map<String, Object>();
requestJSONMap.put('payments', new List<Object>{paymentMap});
String reqJSON = JSON.serialize(requestJSONMap);
Map<String, Object> reqObj = new Map<String, Object>();
reqObj.put('version', '1.0');
reqObj.put('action', 'createPayment');
reqObj.put('requestJSON', reqJSON);
//Required, if QuickBooks Multi-Org is enabled in Breadwinner.
//reqObj.put('qbOrgId', '!aa00TM');
System.debug(reqJSON);
// Placing a request to Breadwinner Global API
Map<String, Object> respMap = breadwinner_qbo.BreadwinnerQBAPI.call(reqObj);
System.debug(respMap);