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