Skip to content

Commit 312396a

Browse files
committed
refactor: fix parameter naming from thirdPartReference to thirdPartyReference and update response property visibility
1 parent b23a66b commit 312396a

12 files changed

Lines changed: 693 additions & 96 deletions

.phpunit.result.cache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version":1,"defects":{"Tests\\Unit\\Auth\\TokenManagerTest::testGetTokenGeneratesNewToken":4,"Tests\\Unit\\Auth\\TokenManagerTest::testClearTokenResetsState":4,"Tests\\Unit\\Auth\\TokenManagerTest::testRefreshTokenGeneratesNewToken":4,"Tests\\Unit\\Auth\\TokenManagerTest::testTokenIsReusedWhenAlreadyGenerated":4,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsTrueForValidNumbers":3,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsFalseForInvalidNumbers":3,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsEmptyArrayForValidParams":3},"times":{"Tests\\Unit\\Auth\\TokenManagerTest::testGetTokenGeneratesNewToken":0.09,"Tests\\Unit\\Auth\\TokenManagerTest::testClearTokenResetsState":0.108,"Tests\\Unit\\Auth\\TokenManagerTest::testRefreshTokenGeneratesNewToken":1.063,"Tests\\Unit\\Auth\\TokenManagerTest::testTokenIsReusedWhenAlreadyGenerated":0.08,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsSuccessReturnsTrueForSuccessCode":0.001,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsSuccessReturnsFalseForErrorCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testGetDescriptionReturnsCorrectDescriptions":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsHttpSuccessReturnsTrueForSuccessStatusCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsHttpSuccessReturnsFalseForErrorStatusCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testConstantsHaveCorrectValues":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsCompletedReturnsTrueForCompletedStatuses":0.001,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsCompletedReturnsFalseForNonCompletedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsPendingReturnsTrueForPendingStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsPendingReturnsFalseForNonPendingStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsFailedReturnsTrueForFailedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsFailedReturnsFalseForNonFailedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testGetAllStatusesReturnsAllStatuses":0.001,"Tests\\Unit\\Constants\\TransactionStatusTest::testConstantsHaveCorrectValues":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsTrueForValidNumbers":0.001,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsFalseForInvalidNumbers":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateTransactionReferenceReturnsTrueForValidReferences":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateTransactionReferenceReturnsFalseForInvalidReferences":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateServiceProviderCodeReturnsTrueForValidCodes":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateServiceProviderCodeReturnsFalseForInvalidCodes":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateAmountReturnsTrueForValidAmounts":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateAmountReturnsFalseForInvalidAmounts":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsEmptyArrayForValidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsErrorsForInvalidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateB2BParametersReturnsEmptyArrayForValidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateReversalParametersReturnsEmptyArrayForValidParams":0}}
1+
{"version":1,"defects":{"Tests\\Unit\\Auth\\TokenManagerTest::testGetTokenGeneratesNewToken":4,"Tests\\Unit\\Auth\\TokenManagerTest::testClearTokenResetsState":4,"Tests\\Unit\\Auth\\TokenManagerTest::testRefreshTokenGeneratesNewToken":4,"Tests\\Unit\\Auth\\TokenManagerTest::testTokenIsReusedWhenAlreadyGenerated":4,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsTrueForValidNumbers":3,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsFalseForInvalidNumbers":3,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsEmptyArrayForValidParams":3,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testInProgressTransactionStatus":3},"times":{"Tests\\Unit\\Auth\\TokenManagerTest::testGetTokenGeneratesNewToken":0.26,"Tests\\Unit\\Auth\\TokenManagerTest::testClearTokenResetsState":0.093,"Tests\\Unit\\Auth\\TokenManagerTest::testRefreshTokenGeneratesNewToken":1.063,"Tests\\Unit\\Auth\\TokenManagerTest::testTokenIsReusedWhenAlreadyGenerated":0.124,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsSuccessReturnsTrueForSuccessCode":0.001,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsSuccessReturnsFalseForErrorCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testGetDescriptionReturnsCorrectDescriptions":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsHttpSuccessReturnsTrueForSuccessStatusCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testIsHttpSuccessReturnsFalseForErrorStatusCodes":0,"Tests\\Unit\\Constants\\ResponseCodesTest::testConstantsHaveCorrectValues":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsCompletedReturnsTrueForCompletedStatuses":0.001,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsCompletedReturnsFalseForNonCompletedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsPendingReturnsTrueForPendingStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsPendingReturnsFalseForNonPendingStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsFailedReturnsTrueForFailedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testIsFailedReturnsFalseForNonFailedStatuses":0,"Tests\\Unit\\Constants\\TransactionStatusTest::testGetAllStatusesReturnsAllStatuses":0.001,"Tests\\Unit\\Constants\\TransactionStatusTest::testConstantsHaveCorrectValues":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsTrueForValidNumbers":0.001,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateMSISDNReturnsFalseForInvalidNumbers":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateTransactionReferenceReturnsTrueForValidReferences":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateTransactionReferenceReturnsFalseForInvalidReferences":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateServiceProviderCodeReturnsTrueForValidCodes":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateServiceProviderCodeReturnsFalseForInvalidCodes":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateAmountReturnsTrueForValidAmounts":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateAmountReturnsFalseForInvalidAmounts":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsEmptyArrayForValidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateC2BParametersReturnsErrorsForInvalidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateB2BParametersReturnsEmptyArrayForValidParams":0,"Tests\\Unit\\Validation\\ParameterValidatorTest::testValidateReversalParametersReturnsEmptyArrayForValidParams":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testSuccessfulCustomerNameLookup":0.006,"Tests\\Unit\\Response\\CustomerNameResponseTest::testCustomerWithOnlyFirstName":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testCustomerNotFound":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testInvalidMSISDN":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testCustomerNameWithSpecialCharacters":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testEmptyNames":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testHttpErrorOnCustomerLookup":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testUnauthorizedLookup":0,"Tests\\Unit\\Response\\CustomerNameResponseTest::testInheritsBaseResponseMethods":0,"Tests\\Unit\\Response\\ReversalResponseTest::testSuccessfulFullReversal":0.001,"Tests\\Unit\\Response\\ReversalResponseTest::testSuccessfulPartialReversal":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalFailedTransactionNotFound":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalFailedAlreadyReversed":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalFailedInsufficientBalance":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalWithDecimalAmount":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalWithStringAmount":0,"Tests\\Unit\\Response\\ReversalResponseTest::testHttpErrorOnReversal":0,"Tests\\Unit\\Response\\ReversalResponseTest::testUnauthorizedReversal":0,"Tests\\Unit\\Response\\ReversalResponseTest::testReversalTimeout":0,"Tests\\Unit\\Response\\ReversalResponseTest::testInheritsBaseResponseMethods":0,"Tests\\Unit\\Response\\TransactionResponseTest::testSuccessfulC2BTransaction":0.001,"Tests\\Unit\\Response\\TransactionResponseTest::testSuccessfulB2BTransaction":0,"Tests\\Unit\\Response\\TransactionResponseTest::testSuccessfulB2CTransaction":0,"Tests\\Unit\\Response\\TransactionResponseTest::testAsyncTransactionInitiated":0,"Tests\\Unit\\Response\\TransactionResponseTest::testInsufficientBalanceError":0,"Tests\\Unit\\Response\\TransactionResponseTest::testTransactionFailedError":0,"Tests\\Unit\\Response\\TransactionResponseTest::testDuplicateTransactionError":0,"Tests\\Unit\\Response\\TransactionResponseTest::testHttpErrorResponse":0,"Tests\\Unit\\Response\\TransactionResponseTest::testUnauthorizedResponse":0,"Tests\\Unit\\Response\\TransactionResponseTest::testGetRawResponse":0.001,"Tests\\Unit\\Response\\TransactionResponseTest::testGetHeaders":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testCompletedTransactionStatus":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testPendingTransactionStatus":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testFailedTransactionStatus":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testCancelledTransactionStatus":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testInProgressTransactionStatus":0.005,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testTransactionNotFoundError":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testNullTransactionStatus":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testHttpErrorOnStatusCheck":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testInheritsBaseResponseMethods":0,"Tests\\Unit\\Response\\TransactionStatusResponseTest::testProcessingTransactionStatus":0}}

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ $mpesa = new Mpesa(
5252
// C2B Transaction (Unified API)
5353
$response = $mpesa->c2b(
5454
transactionReference: 'TXN001',
55-
from: '258841234567',
55+
customerMSISDN: '258841234567',
5656
amount: 100,
57-
thirdPartReference: 'REF001'
57+
thirdPartyReference: 'REF001'
5858
);
5959

6060
if ($response->isTransactionSuccessful()) {
@@ -80,7 +80,7 @@ $response = $mpesa->b2c(
8080
customerMSISDN: '258841234567',
8181
amount: 100,
8282
transactionReference: 'TXN002',
83-
thirdPartReference: 'REF002'
83+
thirdPartyReference: 'REF002'
8484
);
8585

8686
if ($response->isTransactionSuccessful()) {
@@ -128,7 +128,7 @@ if ($response->isSuccessful()) {
128128
$response = $mpesa->b2b(
129129
transactionReference: 'TXN003',
130130
amount: 100,
131-
thirdPartReference: 'REF003',
131+
thirdPartyReference: 'REF003',
132132
primaryPartyCode: '171717', // Sender business code
133133
receiverPartyCode: '979797' // Receiver business code
134134
);
@@ -323,9 +323,9 @@ class PaymentController extends Controller
323323
{
324324
$response = $this->mpesa->c2b(
325325
transactionReference: $request->transaction_ref,
326-
from: $request->phone_number,
326+
customerMSISDN: $request->phone_number,
327327
amount: $request->amount,
328-
thirdPartReference: $request->reference
328+
thirdPartyReference: $request->reference
329329
);
330330

331331
if ($response->isTransactionSuccessful()) {

src/Laravel/Mpesa.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
use Illuminate\Support\Facades\Facade;
66

77
/**
8-
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse c2b(string $transactionReference, string $customerMSISDN, float $amount, string $thirdPartReference, ?string $serviceProviderCode = null)
9-
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse b2c(string $customerMSISDN, int $amount, string $transactionReference, string $thirdPartReference, ?string $serviceProviderCode = "171717")
10-
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse b2b(string $transactionReference, int $amount, string $thirdPartReference, string $primaryPartyCode, string $receiverPartyCode)
8+
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse c2b(string $transactionReference, string $customerMSISDN, float $amount, string $thirdPartyReference, ?string $serviceProviderCode = null)
9+
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse b2c(string $customerMSISDN, int $amount, string $transactionReference, string $thirdPartyReference, ?string $serviceProviderCode = null)
10+
* @method static \Karson\MpesaPhpSdk\Response\TransactionResponse b2b(string $transactionReference, int $amount, string $thirdPartyReference, string $primaryPartyCode, string $receiverPartyCode)
1111
* @method static \Karson\MpesaPhpSdk\Response\ReversalResponse reversal(string $transactionID, string $securityCredential, string $initiatorIdentifier, string $thirdPartyReference, ?string $serviceProviderCode = null, ?string $reversalAmount = null)
1212
* @method static \Karson\MpesaPhpSdk\Response\TransactionStatusResponse queryTransactionStatus(string $thirdPartyReference, string $queryReference, ?string $serviceProviderCode = null)
1313
* @method static \Karson\MpesaPhpSdk\Response\CustomerNameResponse queryCustomerName(string $customerMSISDN, string $thirdPartyReference, ?string $serviceProviderCode = null)

src/Mpesa.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public function __construct(private string $publicKey, private string $apiKey, p
3232

3333
if ($isTest) {
3434
$this->base_uri = 'https://api.sandbox.vm.co.mz';
35+
$this->serviceProviderCode = '171717';
3536
}
3637
}
3738

@@ -42,18 +43,18 @@ public function __construct(private string $publicKey, private string $apiKey, p
4243
* @param string $transactionReference
4344
* @param string $customerMSISDN
4445
* @param string $amount
45-
* @param string $thirdPartReference
46+
* @param string $thirdPartyReference
4647
* @return TransactionResponse
4748
* @throws ValidationException
4849
*/
49-
public function c2b(string $transactionReference, string $customerMSISDN, string $amount, string $thirdPartReference, ?string $serviceProviderCode = null): TransactionResponse
50+
public function c2b(string $transactionReference, string $customerMSISDN, string $amount, string $thirdPartyReference, ?string $serviceProviderCode = null): TransactionResponse
5051
{
5152
// Validate parameters
5253
$params = [
5354
'transactionReference' => $transactionReference,
5455
'customerMSISDN' => $customerMSISDN,
5556
'amount' => $amount,
56-
'thirdPartyReference' => $thirdPartReference,
57+
'thirdPartyReference' => $thirdPartyReference,
5758
'serviceProviderCode' => $serviceProviderCode ?? $this->serviceProviderCode
5859
];
5960

@@ -66,7 +67,7 @@ public function c2b(string $transactionReference, string $customerMSISDN, string
6667
"input_TransactionReference" => $transactionReference,
6768
"input_CustomerMSISDN" => $customerMSISDN,
6869
"input_Amount" => $amount,
69-
"input_ThirdPartyReference" => $thirdPartReference,
70+
"input_ThirdPartyReference" => $thirdPartyReference,
7071
"input_ServiceProviderCode" => $serviceProviderCode ?? $this->serviceProviderCode
7172
];
7273

@@ -82,16 +83,16 @@ public function c2b(string $transactionReference, string $customerMSISDN, string
8283
* @param string $customerMSISDN
8384
* @param string $amount
8485
* @param string $transactionReference
85-
* @param string $thirdPartReference
86+
* @param string $thirdPartyReference
8687
* @return TransactionResponse
8788
*/
88-
public function b2c(string $customerMSISDN, ?string $amount, string $transactionReference, string $thirdPartReference, ?string $serviceProviderCode = null): TransactionResponse
89+
public function b2c(string $customerMSISDN, ?string $amount, string $transactionReference, string $thirdPartyReference, ?string $serviceProviderCode = null): TransactionResponse
8990
{
9091
$fields = [
9192
"input_TransactionReference" => $transactionReference,
9293
"input_CustomerMSISDN" => $customerMSISDN,
9394
"input_Amount" => $amount,
94-
"input_ThirdPartyReference" => $thirdPartReference,
95+
"input_ThirdPartyReference" => $thirdPartyReference,
9596
"input_ServiceProviderCode" => $serviceProviderCode ?? $this->serviceProviderCode
9697
];
9798

@@ -107,17 +108,17 @@ public function b2c(string $customerMSISDN, ?string $amount, string $transaction
107108
*
108109
* @param string $transactionReference
109110
* @param string $amount
110-
* @param string $thirdPartReference
111+
* @param string $thirdPartyReference
111112
* @param string $primaryPartyCode Business shortcode for funds debit
112113
* @param string $receiverPartyCode Business shortcode for funds credit
113114
* @return TransactionResponse
114115
*/
115-
public function b2b(string $transactionReference, ?string $amount, string $thirdPartReference, ?string $primaryPartyCode, ?string $receiverPartyCode): TransactionResponse
116+
public function b2b(string $transactionReference, ?string $amount, string $thirdPartyReference, ?string $primaryPartyCode, ?string $receiverPartyCode): TransactionResponse
116117
{
117118
$fields = [
118119
"input_TransactionReference" => $transactionReference,
119120
"input_Amount" => $amount,
120-
"input_ThirdPartyReference" => $thirdPartReference,
121+
"input_ThirdPartyReference" => $thirdPartyReference,
121122
"input_PrimaryPartyCode" => $primaryPartyCode,
122123
"input_ReceiverPartyCode" => $receiverPartyCode
123124
];

src/Response/BaseResponse.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ abstract class BaseResponse
1212
protected array $headers;
1313

1414

15-
private ?string $output_TransactionID = null; // Sync response property
16-
private ?string $output_ConversationID = null;
17-
private ?string $output_ResponseCode = null;
18-
private ?string $output_ResponseDescription = null;
19-
private ?string $output_ThirdPartyReference = null; // Sync response property
15+
protected ?string $output_TransactionID = null;
16+
protected ?string $output_ConversationID = null;
17+
protected ?string $output_ResponseCode = null;
18+
protected ?string $output_ResponseDescription = null;
19+
protected ?string $output_ThirdPartyReference = null;
2020

2121

2222

src/Response/CustomerNameResponse.php

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ class CustomerNameResponse extends BaseResponse
99
private ?string $output_CustomerMSISDN;
1010
private ?string $output_FirstName;
1111
private ?string $output_SecondName;
12-
private ?string $output_ResponseCode;
13-
private ?string $output_ResponseDesc;
1412

1513
public function __construct(\Psr\Http\Message\ResponseInterface $response)
1614
{
@@ -26,8 +24,6 @@ private function parseCustomerNameResponse(): void
2624
$this->output_CustomerMSISDN = $data->output_CustomerMSISDN ?? null;
2725
$this->output_FirstName = $data->output_FirstName ?? null;
2826
$this->output_SecondName = $data->output_SecondName ?? null;
29-
$this->output_ResponseCode = $data->output_ResponseCode ?? null;
30-
$this->output_ResponseDesc = $data->output_ResponseDesc ?? null;
3127
}
3228
}
3329

@@ -59,16 +55,6 @@ public function getCustomerName(): ?string
5955
return trim($firstName . ' ' . $secondName) ?: null;
6056
}
6157

62-
public function getResponseCode(): ?string
63-
{
64-
return $this->output_ResponseCode;
65-
}
66-
67-
public function getResponseDescription(): ?string
68-
{
69-
return $this->output_ResponseDesc;
70-
}
71-
7258
public function isCustomerFound(): bool
7359
{
7460
return $this->isSuccessful() && !empty($this->output_FirstName);

0 commit comments

Comments
 (0)