11"""Facade for M-Pesa B2B APIs (Express Checkout)."""
22
3+ from typing import Optional
34from mpesa_sdk .auth import TokenManager
45from mpesa_sdk .http_client import HttpClient
6+ from mpesa_sdk .business_buy_goods import (
7+ BusinessBuyGoods ,
8+ BusinessBuyGoodsRequest ,
9+ BusinessBuyGoodsResponse ,
10+ )
11+ from mpesa_sdk .business_paybill import (
12+ BusinessPayBill ,
13+ BusinessPayBillRequest ,
14+ BusinessPayBillResponse ,
15+ )
516from mpesa_sdk .B2B_express_checkout import (
617 B2BExpressCheckout ,
718 B2BExpressCheckoutRequest ,
@@ -19,6 +30,14 @@ def __init__(self, http_client: HttpClient, token_manager: TokenManager) -> None
1930 self ._express_checkout = B2BExpressCheckout (
2031 http_client = self .http_client , token_manager = self .token_manager
2132 )
33+ self ._business_paybill = BusinessPayBill (
34+ http_client = self .http_client ,
35+ token_manager = self .token_manager ,
36+ )
37+ self ._business_buygoods = BusinessBuyGoods (
38+ http_client = self .http_client ,
39+ token_manager = self .token_manager ,
40+ )
2241
2342 def express_checkout (
2443 self ,
@@ -31,7 +50,7 @@ def express_checkout(
3150 request_ref_id : str ,
3251 ** kwargs ,
3352 ) -> B2BExpressCheckoutResponse :
34- """Initiate a B2B Express Checkout USSD Push transaction.
53+ """Initiate a B2B Express Checkout USSD Push transaction to another merchant .
3554
3655 Args:
3756 primary_short_code: The primary short code for the transaction.
@@ -61,3 +80,109 @@ def express_checkout(
6180 },
6281 )
6382 return self ._express_checkout .ussd_push (request )
83+
84+ def paybill (
85+ self ,
86+ initiator : str ,
87+ security_credential : str ,
88+ amount : int ,
89+ party_a : int ,
90+ party_b : int ,
91+ account_reference : str ,
92+ requester : str ,
93+ remarks : str ,
94+ queue_timeout_url : str ,
95+ result_url : str ,
96+ ** kwargs ,
97+ ) -> BusinessPayBillResponse :
98+ """Initiate a Business PayBill transaction to another merchant.
99+
100+ Args:
101+ initiator: API username.
102+ security_credential: Encrypted credential.
103+ amount: The amount to be transacted.
104+ party_a: The sender short code.
105+ party_b: The receiver short code.
106+ account_reference: Reference for the account.
107+ requester: Requester phone number.
108+ remarks: Remarks for the transaction.
109+ queue_timeout_url: URL for timeout callback.
110+ result_url: URL for result callback.
111+ kwargs: Additional fields for BusinessPayBillRequest.
112+
113+ Returns:
114+ BusinessPayBillResponse: Response from M-Pesa API.
115+ """
116+ request = BusinessPayBillRequest (
117+ Initiator = initiator ,
118+ SecurityCredential = security_credential ,
119+ Amount = amount ,
120+ PartyA = party_a ,
121+ PartyB = party_b ,
122+ AccountReference = account_reference ,
123+ Requester = requester ,
124+ Remarks = remarks ,
125+ QueueTimeOutURL = queue_timeout_url ,
126+ ResultURL = result_url ,
127+ ** {
128+ k : v
129+ for k , v in kwargs .items ()
130+ if k in BusinessPayBillRequest .model_fields
131+ },
132+ )
133+
134+ return self ._business_paybill .paybill (request )
135+
136+ def buygoods (
137+ self ,
138+ initiator : str ,
139+ security_credential : str ,
140+ amount : int ,
141+ party_a : int ,
142+ party_b : int ,
143+ account_reference : str ,
144+ requester : str ,
145+ remarks : str ,
146+ queue_timeout_url : str ,
147+ result_url : str ,
148+ occassion : Optional [str ] = None ,
149+ ** kwargs ,
150+ ) -> BusinessBuyGoodsResponse :
151+ """Initiate a Business Buy Goods transaction to another merchant.
152+
153+ Args:
154+ initiator: API username.
155+ security_credential: Encrypted credential.
156+ amount: The amount to be transacted.
157+ party_a: The sender short code.
158+ party_b: The receiver short code.
159+ account_reference: Reference for the account.
160+ requester: Requester phone number.
161+ remarks: Remarks for the transaction.
162+ queue_timeout_url: URL for timeout callback.
163+ result_url: URL for result callback.
164+ occassion: Optional transaction occasion.
165+ kwargs: Additional fields for BusinessBuyGoodsRequest.
166+
167+ Returns:
168+ BusinessBuyGoodsResponse: Response from M-Pesa API.
169+ """
170+ request = BusinessBuyGoodsRequest (
171+ Initiator = initiator ,
172+ SecurityCredential = security_credential ,
173+ Amount = amount ,
174+ PartyA = party_a ,
175+ PartyB = party_b ,
176+ AccountReference = account_reference ,
177+ Requester = requester ,
178+ Remarks = remarks ,
179+ QueueTimeOutURL = queue_timeout_url ,
180+ ResultURL = result_url ,
181+ Occassion = occassion ,
182+ ** {
183+ k : v
184+ for k , v in kwargs .items ()
185+ if k in BusinessBuyGoodsRequest .model_fields
186+ },
187+ )
188+ return self ._business_buygoods .buy_goods (request )
0 commit comments