{"id":85100,"date":"2024-11-23T16:28:51","date_gmt":"2024-11-23T12:58:51","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/"},"modified":"2024-11-23T16:28:51","modified_gmt":"2024-11-23T12:58:51","slug":"introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/","title":{"rendered":"\u0645\u0639\u0631\u0641\u06cc Pesapal PHP SDK: \u0627\u062f\u063a\u0627\u0645 \u067e\u0631\u062f\u0627\u062e\u062a \u062e\u0648\u062f \u0631\u0627 \u0633\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang <\/p>\n<p>\u0627\u062f\u063a\u0627\u0645 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc PHP \u0634\u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u062a\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645 \u06a9\u0647 \u0627\u0646\u062a\u0634\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u06cc\u0645 Pesapal PHP SDK\u060c \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0642\u0648\u06cc \u0648 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0639\u0627\u0645\u0644 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0631\u06af\u0627\u0647 \u067e\u0631\u062f\u0627\u062e\u062a Pesapal \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>  \ud83c\udf1f \u0686\u0631\u0627 Pesapal PHP SDK\u061f<\/p>\n<p>Pesapal \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u067e\u0631\u062f\u0627\u062e\u062a \u067e\u06cc\u0634\u0631\u0648 \u062f\u0631 \u0622\u0641\u0631\u06cc\u0642\u0627 \u0627\u0633\u062a \u06a9\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u0631\u062f\u0627\u062e\u062a \u0627\u06cc\u0645\u0646 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u063a\u0644 \u062f\u0631 \u0647\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u062f\u063a\u0627\u0645 \u0645\u0633\u062a\u0642\u06cc\u0645 API Pesapal \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0632\u0645\u0627\u0646 \u0628\u0631 \u0648 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627\u0634\u062f. SDK \u0645\u0627 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0647\u0627\u06cc API \u0631\u0627 \u062e\u0644\u0627\u0635\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062a\u0645\u06cc\u0632 \u0648 \u0634\u0647\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>  \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<\/p>\n<p>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0622\u0633\u0627\u0646: \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a OAuth \u0628\u0627 Pesapal \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u062f\u0648\u0646 \u062f\u0631\u0632: \u0628\u0647 \u0633\u0631\u0639\u062a \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u0648 \u067e\u0627\u0633\u062e\u06af\u0648\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634: \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627 PSR-4: \u0627\u0632 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc PHP-FIG \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u06af\u0633\u062a\u0631\u062f\u0647: \u0631\u0648\u0634\u200c\u0647\u0627 \u0648 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u0633\u062a\u0646\u062f \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639.<\/p>\n<p>  \ud83d\ude80 \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631<\/p>\n<p>  \u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<\/p>\n<p>SDK \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 Composer \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>composer require katorymnd\/pesapal-php-sdk<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u0644\u0632\u0627\u0645\u0627\u062a<\/p>\n<p>  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc<\/p>\n<p>\u0645\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631 Pesapal \u062e\u0648\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<p>require &#8216;vendor\/autoload.php&#8217;;<\/p>\n<p>use Katorymnd\\PesapalPhpSdk\\Api\\PesapalClient;<br \/>\nuse Katorymnd\\PesapalPhpSdk\\Config\\PesapalConfig;<\/p>\n<p>$consumerKey = &#8216;YOUR_CONSUMER_KEY&#8217;;<br \/>\n$consumerSecret = &#8216;YOUR_CONSUMER_SECRET&#8217;;<\/p>\n<p>\/\/ Initialize PesapalConfig and PesapalClient<br \/>\n$configPath = __DIR__ . &#8216;\/..\/pesapal_dynamic.json&#8217;;<br \/>\n$config = new PesapalConfig($consumerKey, $consumerSecret, $configPath);<br \/>\n$environment = &#8216;sandbox&#8217;;<br \/>\n$sslVerify = false; \/\/ Enable SSL verification for production<\/p>\n<p>$pesapal = new PesapalClient($config, $environment, $sslVerify);<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \ud83d\udcb3 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u062e\u062a<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u06a9\u062f \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>use Katorymnd\\PesapalPhpSdk\\Utils\\PesapalHelpers;<\/p>\n<p>$merchantReference = PesapalHelpers::generateMerchantReference();<br \/>\n$notificationId = &#8216;adbd39cc-a48e-4789-b42b-79ad8deb32df&#8217;;  \/\/ Replace with actual notification ID from IPN registration<\/p>\n<p>\/\/ Define the order data as an associative array for the POST request<br \/>\n$paymentDetails= [<br \/>\n    &#8220;id&#8221; =&gt; $merchantReference,<br \/>\n    &#8220;currency&#8221; =&gt; &#8220;USD&#8221;,<br \/>\n    &#8220;amount&#8221; =&gt; 100.00,<br \/>\n    &#8220;description&#8221; =&gt; &#8220;Payment for invoice &#8221; . $merchantReference,<br \/>\n    &#8220;callback_url&#8221; =&gt; &#8220;https:\/\/www.example.com\/payment-callback&#8221;,<br \/>\n    &#8220;notification_id&#8221; =&gt; $notificationId,<br \/>\n    &#8220;redirect_mode&#8221; =&gt; &#8220;PARENT_WINDOW&#8221;,<br \/>\n    &#8220;cancellation_url&#8221; =&gt; &#8220;https:\/\/www.example.com\/payment-cancel&#8221;,<br \/>\n    &#8220;billing_address&#8221; =&gt; [<br \/>\n        &#8220;phone_number&#8221; =&gt; &#8220;0700000000&#8221;,<br \/>\n        &#8220;email_address&#8221; =&gt; &#8220;john.doe@example.com&#8221;,<br \/>\n        &#8220;country_code&#8221; =&gt; &#8220;UG&#8221;,<br \/>\n        &#8220;first_name&#8221; =&gt; &#8220;John&#8221;,<br \/>\n        &#8220;middle_name&#8221; =&gt; &#8220;&#8221;,<br \/>\n        &#8220;last_name&#8221; =&gt; &#8220;Doe&#8221;,<br \/>\n        &#8220;line_1&#8221; =&gt; &#8220;123 Example Street&#8221;,<br \/>\n        &#8220;line_2&#8221; =&gt; &#8220;&#8221;,<br \/>\n        &#8220;city&#8221; =&gt; &#8220;Kampala&#8221;,<br \/>\n        &#8220;state&#8221; =&gt; &#8220;KMP&#8221;,<br \/>\n        &#8220;postal_code&#8221; =&gt; 256<br \/>\n    ]\n];<\/p>\n<p>\/\/ Obtain a valid access token<br \/>\n    $accessToken = $clientApi-&gt;getAccessToken();<br \/>\n    if (!$accessToken) {<br \/>\n        throw new PesapalException(&#8216;Failed to obtain access token&#8217;);<br \/>\n    }<\/p>\n<p>\/\/ Submit order request to Pesapal<br \/>\n    $response = $clientApi-&gt;submitOrderRequest($orderData);<\/p>\n<p>if ($response[&#8216;status&#8217;] === 200 &amp;&amp; isset($response[&#8216;response&#8217;][&#8216;redirect_url&#8217;])) {<br \/>\n        $redirectUrl = $response[&#8216;response&#8217;][&#8216;redirect_url&#8217;];<br \/>\n        $orderTrackingId = $response[&#8216;response&#8217;][&#8216;order_tracking_id&#8217;];<\/p>\n<p>} else {<br \/>\n    \/\/ Handle errors<br \/>\n    $response[&#8216;response&#8217;][&#8216;error&#8217;]\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \ud83d\udd0d \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634:<\/p>\n<p>use Katorymnd\\PesapalPhpSdk\\Exceptions\\PesapalException;<\/p>\n<p>\/\/ Obtain a valid access token<br \/>\n    $accessToken = $clientApi-&gt;getAccessToken();<br \/>\n    if (!$accessToken) {<br \/>\n        throw new PesapalException(&#8216;Failed to obtain access token&#8217;);<br \/>\n    }<\/p>\n<p> \/\/ Get the transaction status<br \/>\n    $response = $clientApi-&gt;getTransactionStatus($orderTrackingId);<\/p>\n<p>if ($response[&#8216;status&#8217;] === 200 &amp;&amp; isset($response[&#8216;response&#8217;])) {<br \/>\n        $transactionStatusData = $response[&#8216;response&#8217;];<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \ud83d\udcb0 \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a<\/p>\n<p>\u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627 \u0635\u0627\u062f\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\/\/ Prepare refund data with user-provided values<br \/>\n$refundData = [<br \/>\n    &#8216;confirmation_code&#8217; =&gt; &#8216;7323605385336397404011&#8217;, \/\/ the code is received by  checking the transaction status<br \/>\n    &#8216;amount&#8217; =&gt; 50.00,<br \/>\n    &#8216;username&#8217; =&gt; &#8216;John Doe&#8217;,<br \/>\n    &#8216;remarks&#8217; =&gt; &#8216;Customer Requested Refund&#8217;<br \/>\n];<\/p>\n<p>try {<br \/>\n    \/\/ Request Refund<br \/>\n    $refundResponse = $clientApi-&gt;requestRefund($refundData);<\/p>\n<p>    if ($refundResponse[&#8216;status&#8217;] === 200 &amp;&amp; isset($refundResponse[&#8216;response&#8217;])) {<br \/>\n        $refundDataResponse = $refundResponse[&#8216;response&#8217;];<\/p>\n<p>        \/\/ Add refund response to the output<br \/>\n        $responseData[&#8216;refund_response&#8217;] = $refundDataResponse;<br \/>\n    } else {<br \/>\n        $errorMessage = $refundResponse[&#8216;response&#8217;][&#8216;error&#8217;][&#8216;message&#8217;] ?? &#8216;Unknown error occurred while requesting a refund.&#8217;;<br \/>\n        throw new PesapalException($errorMessage);<br \/>\n    }<br \/>\n} catch (PesapalException $e) {<br \/>\n    \/\/ Add the error to the response<br \/>\n    $responseData[&#8216;refund_error&#8217;] = [<br \/>\n        &#8216;error&#8217; =&gt; $e-&gt;getMessage(),<br \/>\n        &#8216;details&#8217; =&gt; $e-&gt;getErrorDetails(),<br \/>\n    ];<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \ud83e\uddea \u062a\u0633\u062a \u0648 \u062a\u0648\u0633\u0639\u0647<\/p>\n<p>\u0645\u0627 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 SDK \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627:<\/p>\n<p>vendor\/bin\/phpunit<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \ud83d\udcc4 \u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0642\u06cc\u0642 \u062f\u0631 \u0645\u0648\u0631\u062f \u062a\u0645\u0627\u0645 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u0645\u062e\u0632\u0646 GitHub \u0645\u0627 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  \ud83e\udd1d \u06a9\u0645\u06a9 \u06a9\u0631\u062f\u0646<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u0645\u0634\u0627\u0631\u06a9\u062a \u0647\u0627\u06cc \u062c\u0627\u0645\u0639\u0647 \u0627\u0633\u062a\u0642\u0628\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645! \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0633\u0627\u0626\u0644 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u06a9\u0634\u0634\u06cc \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f.<\/p>\n<p>  \ud83d\udce6 \u062a\u0648\u0632\u06cc\u0639 \u067e\u06a9\u06cc\u062c<\/p>\n<p>SDK \u062f\u0631 Packagist \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a\u060c \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 Composer \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p>  \ud83d\udee0\ufe0f \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u0633\u062a\u0645\u0631<\/p>\n<p>\u0645\u0627 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u062f\u0627\u0648\u0645 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 GitHub Actions \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u062a\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc \u06a9\u06cc\u0641\u06cc\u062a \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>  \ud83c\udf89 \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/p>\n<p>Pesapal PHP SDK \u0628\u0631\u0627\u06cc \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648 \u062a\u0644\u0627\u0634 \u0634\u0645\u0627 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u062f\u0648\u0646 \u0646\u06af\u0631\u0627\u0646\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0647\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u062f\u0627\u062e\u062a\u060c \u0631\u0648\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0639\u0627\u0644\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u062f. \u0645\u0627 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645 \u06a9\u0647 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0628\u0627 \u0622\u0646 \u0686\u0647 \u0645\u06cc \u0633\u0627\u0632\u06cc\u062f!<\/p>\n<p>  \ud83d\udceb \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627\u0634\u06cc\u062f<\/p>\n<div data-article-id=\"2118230\" id=\"article-body\">\n<p><\/p>\n<p>\u0627\u062f\u063a\u0627\u0645 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc PHP \u0634\u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u062a\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645 \u06a9\u0647 \u0627\u0646\u062a\u0634\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u06cc\u0645 <strong>Pesapal PHP SDK<\/strong>\u060c \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0642\u0648\u06cc \u0648 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0639\u0627\u0645\u0644 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0631\u06af\u0627\u0647 \u067e\u0631\u062f\u0627\u062e\u062a Pesapal \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%8C%9F_%DA%86%D8%B1%D8%A7_Pesapal_PHP_SDK%D8%9F\" >\ud83c\udf1f \u0686\u0631\u0627 Pesapal PHP SDK\u061f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\" >\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%9A%80_%D8%B4%D8%B1%D9%88%D8%B9_%D8%A8%D9%87_%DA%A9%D8%A7%D8%B1\" >\ud83d\ude80 \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%D9%86%D8%B5%D8%A8_%D9%88_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\" >\u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%D8%A7%D9%84%D8%B2%D8%A7%D9%85%D8%A7%D8%AA\" >\u0627\u0644\u0632\u0627\u0645\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C\" >\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%92%B3_%D8%B4%D8%B1%D9%88%D8%B9_%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA\" >\ud83d\udcb3 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u062e\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%94%8D_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%88%D8%B6%D8%B9%DB%8C%D8%AA_%D8%AA%D8%B1%D8%A7%DA%A9%D9%86%D8%B4\" >\ud83d\udd0d \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%92%B0_%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4_%D8%A8%D8%A7%D8%B2%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA\" >\ud83d\udcb0 \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%A7%AA_%D8%AA%D8%B3%D8%AA_%D9%88_%D8%AA%D9%88%D8%B3%D8%B9%D9%87\" >\ud83e\uddea \u062a\u0633\u062a \u0648 \u062a\u0648\u0633\u0639\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%93%84_%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA\" >\ud83d\udcc4 \u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%A4%9D_%DA%A9%D9%85%DA%A9_%DA%A9%D8%B1%D8%AF%D9%86\" >\ud83e\udd1d \u06a9\u0645\u06a9 \u06a9\u0631\u062f\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%93%A6_%D8%AA%D9%88%D8%B2%DB%8C%D8%B9_%D9%BE%DA%A9%DB%8C%D8%AC\" >\ud83d\udce6 \u062a\u0648\u0632\u06cc\u0639 \u067e\u06a9\u06cc\u062c<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%9B%A0%EF%B8%8F_%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%85%D8%B3%D8%AA%D9%85%D8%B1\" >\ud83d\udee0\ufe0f \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u0633\u062a\u0645\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%8E%89_%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\" >\ud83c\udf89 \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/introducing-the-pesapal-php-sdk-simplify-your-payment-integration-2da6\/#%F0%9F%93%AB_%D8%AF%D8%B1_%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7_%D8%A8%D8%A7%D8%B4%DB%8C%D8%AF\" >\ud83d\udceb \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627\u0634\u06cc\u062f<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%8C%9F_%DA%86%D8%B1%D8%A7_Pesapal_PHP_SDK%D8%9F\"><\/span>\n<p>  \ud83c\udf1f \u0686\u0631\u0627 Pesapal PHP SDK\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Pesapal \u06cc\u06a9 \u067e\u0644\u062a \u0641\u0631\u0645 \u067e\u0631\u062f\u0627\u062e\u062a \u067e\u06cc\u0634\u0631\u0648 \u062f\u0631 \u0622\u0641\u0631\u06cc\u0642\u0627 \u0627\u0633\u062a \u06a9\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u0631\u062f\u0627\u062e\u062a \u0627\u06cc\u0645\u0646 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u063a\u0644 \u062f\u0631 \u0647\u0631 \u0627\u0646\u062f\u0627\u0632\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u062f\u063a\u0627\u0645 \u0645\u0633\u062a\u0642\u06cc\u0645 API Pesapal \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0632\u0645\u0627\u0646 \u0628\u0631 \u0648 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0627\u0634\u062f. SDK \u0645\u0627 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0647\u0627\u06cc API \u0631\u0627 \u062e\u0644\u0627\u0635\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u06cc\u06a9 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u062a\u0645\u06cc\u0632 \u0648 \u0634\u0647\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%88%DB%8C%DA%98%DA%AF%DB%8C_%D9%87%D8%A7%DB%8C_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\"><\/span>\n<p>  \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06a9\u0644\u06cc\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0622\u0633\u0627\u0646<\/strong>: \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a OAuth \u0628\u0627 Pesapal \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u062f\u0648\u0646 \u062f\u0631\u0632<\/strong>: \u0628\u0647 \u0633\u0631\u0639\u062a \u067e\u0631\u062f\u0627\u062e\u062a \u0647\u0627 \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f \u0648 \u067e\u0627\u0633\u062e\u06af\u0648\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<strong>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634<\/strong>: \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627 \u067e\u0631\u062f\u0627\u0632\u0634 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\n<strong>\u0633\u0627\u0632\u06af\u0627\u0631 \u0628\u0627 PSR-4<\/strong>: \u0627\u0632 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc PHP-FIG \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u06af\u0633\u062a\u0631\u062f\u0647<\/strong>: \u0631\u0648\u0634\u200c\u0647\u0627 \u0648 \u0645\u062b\u0627\u0644\u200c\u0647\u0627\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u0645\u0633\u062a\u0646\u062f \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%9A%80_%D8%B4%D8%B1%D9%88%D8%B9_%D8%A8%D9%87_%DA%A9%D8%A7%D8%B1\"><\/span>\n<p>  \ud83d\ude80 \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D8%B5%D8%A8_%D9%88_%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  \u0646\u0635\u0628 \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>SDK \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 Composer \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>composer require katorymnd\/pesapal-php-sdk\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D9%84%D8%B2%D8%A7%D9%85%D8%A7%D8%AA\"><\/span>\n<p>  \u0627\u0644\u0632\u0627\u0645\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C\"><\/span>\n<p>  \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0627\u0639\u062a\u0628\u0627\u0631 Pesapal \u062e\u0648\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"k\">require<\/span> <span class=\"s1\">'vendor\/autoload.php'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kn\">use<\/span> <span class=\"nc\">Katorymnd\\PesapalPhpSdk\\Api\\PesapalClient<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">use<\/span> <span class=\"nc\">Katorymnd\\PesapalPhpSdk\\Config\\PesapalConfig<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nv\">$consumerKey<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'YOUR_CONSUMER_KEY'<\/span><span class=\"p\">;<\/span>\n<span class=\"nv\">$consumerSecret<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'YOUR_CONSUMER_SECRET'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ Initialize PesapalConfig and PesapalClient<\/span>\n<span class=\"nv\">$configPath<\/span> <span class=\"o\">=<\/span> <span class=\"k\">__DIR__<\/span> <span class=\"mf\">.<\/span> <span class=\"s1\">'\/..\/pesapal_dynamic.json'<\/span><span class=\"p\">;<\/span>\n<span class=\"nv\">$config<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PesapalConfig<\/span><span class=\"p\">(<\/span><span class=\"nv\">$consumerKey<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$consumerSecret<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$configPath<\/span><span class=\"p\">);<\/span>\n<span class=\"nv\">$environment<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'sandbox'<\/span><span class=\"p\">;<\/span>\n<span class=\"nv\">$sslVerify<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span> <span class=\"c1\">\/\/ Enable SSL verification for production<\/span>\n\n\n<span class=\"nv\">$pesapal<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PesapalClient<\/span><span class=\"p\">(<\/span><span class=\"nv\">$config<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$environment<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$sslVerify<\/span><span class=\"p\">);<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%92%B3_%D8%B4%D8%B1%D9%88%D8%B9_%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA\"><\/span>\n<p>  \ud83d\udcb3 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u062e\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u067e\u0631\u062f\u0627\u062e\u062a \u0628\u0627 \u062d\u062f\u0627\u0642\u0644 \u06a9\u062f \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">use<\/span> <span class=\"nc\">Katorymnd\\PesapalPhpSdk\\Utils\\PesapalHelpers<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nv\">$merchantReference<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">PesapalHelpers<\/span><span class=\"o\">::<\/span><span class=\"nf\">generateMerchantReference<\/span><span class=\"p\">();<\/span>\n<span class=\"nv\">$notificationId<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">'adbd39cc-a48e-4789-b42b-79ad8deb32df'<\/span><span class=\"p\">;<\/span>  <span class=\"c1\">\/\/ Replace with actual notification ID from IPN registration<\/span>\n\n<span class=\"c1\">\/\/ Define the order data as an associative array for the POST request<\/span>\n<span class=\"nv\">$paymentDetails<\/span><span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n    <span class=\"s2\">\"id\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$merchantReference<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"currency\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"USD\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"amount\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"mf\">100.00<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"description\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"Payment for invoice \"<\/span> <span class=\"mf\">.<\/span> <span class=\"nv\">$merchantReference<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"callback_url\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"https:\/\/www.example.com\/payment-callback\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"notification_id\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$notificationId<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"redirect_mode\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"PARENT_WINDOW\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"cancellation_url\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"https:\/\/www.example.com\/payment-cancel\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"s2\">\"billing_address\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">[<\/span>\n        <span class=\"s2\">\"phone_number\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"0700000000\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"email_address\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"john.doe@example.com\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"country_code\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"UG\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"first_name\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"John\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"middle_name\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"last_name\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"Doe\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"line_1\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"123 Example Street\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"line_2\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"city\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"Kampala\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"state\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">\"KMP\"<\/span><span class=\"p\">,<\/span>\n        <span class=\"s2\">\"postal_code\"<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"mi\">256<\/span>\n    <span class=\"p\">]<\/span>\n<span class=\"p\">];<\/span>\n\n<span class=\"c1\">\/\/ Obtain a valid access token<\/span>\n    <span class=\"nv\">$accessToken<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$clientApi<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getAccessToken<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$accessToken<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PesapalException<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Failed to obtain access token'<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ Submit order request to Pesapal<\/span>\n    <span class=\"nv\">$response<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$clientApi<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">submitOrderRequest<\/span><span class=\"p\">(<\/span><span class=\"nv\">$orderData<\/span><span class=\"p\">);<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'status'<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">200<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'redirect_url'<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nv\">$redirectUrl<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'redirect_url'<\/span><span class=\"p\">];<\/span>\n        <span class=\"nv\">$orderTrackingId<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'order_tracking_id'<\/span><span class=\"p\">];<\/span>\n\n<span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Handle errors<\/span>\n    <span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'error'<\/span><span class=\"p\">]<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%94%8D_%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C_%D9%88%D8%B6%D8%B9%DB%8C%D8%AA_%D8%AA%D8%B1%D8%A7%DA%A9%D9%86%D8%B4\"><\/span>\n<p>  \ud83d\udd0d \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u062a\u0631\u0627\u06a9\u0646\u0634:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code><span class=\"kn\">use<\/span> <span class=\"nc\">Katorymnd\\PesapalPhpSdk\\Exceptions\\PesapalException<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ Obtain a valid access token<\/span>\n    <span class=\"nv\">$accessToken<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$clientApi<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getAccessToken<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">$accessToken<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PesapalException<\/span><span class=\"p\">(<\/span><span class=\"s1\">'Failed to obtain access token'<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n <span class=\"c1\">\/\/ Get the transaction status<\/span>\n    <span class=\"nv\">$response<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$clientApi<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getTransactionStatus<\/span><span class=\"p\">(<\/span><span class=\"nv\">$orderTrackingId<\/span><span class=\"p\">);<\/span>\n\n<span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'status'<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">200<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nv\">$transactionStatusData<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$response<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">];<\/span>\n<span class=\"p\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%92%B0_%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4_%D8%A8%D8%A7%D8%B2%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA\"><\/span>\n<p>  \ud83d\udcb0 \u067e\u0631\u062f\u0627\u0632\u0634 \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0627\u0632\u067e\u0631\u062f\u0627\u062e\u062a \u0631\u0627 \u0635\u0627\u062f\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight php\"><code>\n<span class=\"c1\">\/\/ Prepare refund data with user-provided values<\/span>\n<span class=\"nv\">$refundData<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n    <span class=\"s1\">'confirmation_code'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'7323605385336397404011'<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ the code is received by  checking the transaction status<\/span>\n    <span class=\"s1\">'amount'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"mf\">50.00<\/span><span class=\"p\">,<\/span>\n    <span class=\"s1\">'username'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'John Doe'<\/span><span class=\"p\">,<\/span>\n    <span class=\"s1\">'remarks'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s1\">'Customer Requested Refund'<\/span>\n<span class=\"p\">];<\/span>\n\n<span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Request Refund<\/span>\n    <span class=\"nv\">$refundResponse<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$clientApi<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">requestRefund<\/span><span class=\"p\">(<\/span><span class=\"nv\">$refundData<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$refundResponse<\/span><span class=\"p\">[<\/span><span class=\"s1\">'status'<\/span><span class=\"p\">]<\/span> <span class=\"o\">===<\/span> <span class=\"mi\">200<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"k\">isset<\/span><span class=\"p\">(<\/span><span class=\"nv\">$refundResponse<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">]))<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nv\">$refundDataResponse<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$refundResponse<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">];<\/span>\n\n        <span class=\"c1\">\/\/ Add refund response to the output<\/span>\n        <span class=\"nv\">$responseData<\/span><span class=\"p\">[<\/span><span class=\"s1\">'refund_response'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$refundDataResponse<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nv\">$errorMessage<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$refundResponse<\/span><span class=\"p\">[<\/span><span class=\"s1\">'response'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'error'<\/span><span class=\"p\">][<\/span><span class=\"s1\">'message'<\/span><span class=\"p\">]<\/span> <span class=\"o\">??<\/span> <span class=\"s1\">'Unknown error occurred while requesting a refund.'<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">PesapalException<\/span><span class=\"p\">(<\/span><span class=\"nv\">$errorMessage<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nc\">PesapalException<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Add the error to the response<\/span>\n    <span class=\"nv\">$responseData<\/span><span class=\"p\">[<\/span><span class=\"s1\">'refund_error'<\/span><span class=\"p\">]<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\n        <span class=\"s1\">'error'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getMessage<\/span><span class=\"p\">(),<\/span>\n        <span class=\"s1\">'details'<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"nf\">getErrorDetails<\/span><span class=\"p\">(),<\/span>\n    <span class=\"p\">];<\/span>\n<span class=\"p\">}<\/span>\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%A7%AA_%D8%AA%D8%B3%D8%AA_%D9%88_%D8%AA%D9%88%D8%B3%D8%B9%D9%87\"><\/span>\n<p>  \ud83e\uddea \u062a\u0633\u062a \u0648 \u062a\u0648\u0633\u0639\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 SDK \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc\u0645. \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062a\u0633\u062a \u0647\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>vendor\/bin\/phpunit\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%84_%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA\"><\/span>\n<p>  \ud83d\udcc4 \u0645\u0633\u062a\u0646\u062f\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0642\u06cc\u0642 \u062f\u0631 \u0645\u0648\u0631\u062f \u062a\u0645\u0627\u0645 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u0645\u062e\u0632\u0646 GitHub \u0645\u0627 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%A4%9D_%DA%A9%D9%85%DA%A9_%DA%A9%D8%B1%D8%AF%D9%86\"><\/span>\n<p>  \ud83e\udd1d \u06a9\u0645\u06a9 \u06a9\u0631\u062f\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0627\u0632 \u0645\u0634\u0627\u0631\u06a9\u062a \u0647\u0627\u06cc \u062c\u0627\u0645\u0639\u0647 \u0627\u0633\u062a\u0642\u0628\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645! \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0633\u0627\u0626\u0644 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f\u060c \u0645\u062e\u0632\u0646 \u0631\u0627 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u06a9\u0634\u0634\u06cc \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u06cc\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%A6_%D8%AA%D9%88%D8%B2%DB%8C%D8%B9_%D9%BE%DA%A9%DB%8C%D8%AC\"><\/span>\n<p>  \ud83d\udce6 \u062a\u0648\u0632\u06cc\u0639 \u067e\u06a9\u06cc\u062c<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>SDK \u062f\u0631 Packagist \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a\u060c \u0648 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 Composer \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062e\u0648\u062f \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%9B%A0%EF%B8%8F_%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%85%D8%B3%D8%AA%D9%85%D8%B1\"><\/span>\n<p>  \ud83d\udee0\ufe0f \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u0633\u062a\u0645\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u062f\u0627\u0648\u0645 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 GitHub Actions \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u062a\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0647\u0631 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0628\u0627\u0644\u0627\u062a\u0631\u06cc\u0646 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc \u06a9\u06cc\u0641\u06cc\u062a \u0631\u0627 \u062d\u0641\u0638 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%8E%89_%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\"><\/span>\n<p>  \ud83c\udf89 \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Pesapal PHP SDK \u0628\u0631\u0627\u06cc \u0635\u0631\u0641\u0647 \u062c\u0648\u06cc\u06cc \u062f\u0631 \u0632\u0645\u0627\u0646 \u0648 \u062a\u0644\u0627\u0634 \u0634\u0645\u0627 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u062f\u0648\u0646 \u0646\u06af\u0631\u0627\u0646\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0647\u0627\u06cc \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u067e\u0631\u062f\u0627\u062e\u062a\u060c \u0631\u0648\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0639\u0627\u0644\u06cc \u062a\u0645\u0631\u06a9\u0632 \u06a9\u0646\u06cc\u062f. \u0645\u0627 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645 \u06a9\u0647 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0628\u0627 \u0622\u0646 \u0686\u0647 \u0645\u06cc \u0633\u0627\u0632\u06cc\u062f!<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%F0%9F%93%AB_%D8%AF%D8%B1_%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7_%D8%A8%D8%A7%D8%B4%DB%8C%D8%AF\"><\/span>\n<p>  \ud83d\udceb \u062f\u0631 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627\u0634\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<hr\/><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0627\u062f\u063a\u0627\u0645 \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc PHP \u0634\u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u062a\u0631 \u0634\u062f\u0647 \u0627\u0633\u062a. \u0645\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u06cc\u0645 \u06a9\u0647 \u0627\u0646\u062a\u0634\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0627\u0639\u0644\u0627\u0645 \u06a9\u0646\u06cc\u0645 Pesapal PHP SDK\u060c \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0642\u0648\u06cc \u0648 \u06a9\u0627\u0631\u0628\u0631 \u067e\u0633\u0646\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0639\u0627\u0645\u0644 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0631\u06af\u0627\u0647 \u067e\u0631\u062f\u0627\u062e\u062a Pesapal \u0637\u0631\u0627\u062d\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":85101,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-85100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/85100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=85100"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/85100\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/85101"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=85100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=85100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=85100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}