From e3760ebbd17705080478f6410bbd37133a78f6a5 Mon Sep 17 00:00:00 2001 From: Ariful Date: Tue, 28 Jun 2022 01:06:30 +0600 Subject: [PATCH] New method added for getting payment url --- .github/changelog.yml | 18 ++++++++++++++++++ readme.md | 10 ++++++++-- src/Base.php | 24 +++++++++++++++--------- src/RequestHandler.php | 12 +++++++----- 4 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 .github/changelog.yml diff --git a/.github/changelog.yml b/.github/changelog.yml new file mode 100644 index 0000000..3dad02b --- /dev/null +++ b/.github/changelog.yml @@ -0,0 +1,18 @@ +name: Generate changelog +on: + release: + types: [created, edited] +jobs: + generate-changelog: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: BobAnkh/auto-generate-changelog@master + with: + REPO_NAME: 'arif98741/nagadApi' + ACCESS_TOKEN: ${{secrets.ACCESS_TOKEN}} + PATH: 'CHANGELOG.md' + COMMIT_MESSAGE: 'docs(CHANGELOG): update release notes' + TYPE: 'feat:Feature,fix:Bug Fixes,docs:Documentation,refactor:Refactor,perf:Performance Improvements' diff --git a/readme.md b/readme.md index bff7add..525b60d 100644 --- a/readme.md +++ b/readme.md @@ -27,8 +27,8 @@ $config = [ 'NAGAD_APP_LOG' => '1', 'NAGAD_APP_ACCOUNT' => '016XXXXXXXX', //demo 'NAGAD_APP_MERCHANTID' => '6800000025', //demo - 'NAGAD_APP_MERCHANT_PRIVATE_KEY' => 'MIIEvFAASCBKYwgRF45v1GfXiqEB5c5REJ8Toy83gzGE3ApmLipoegnwMkewsTNDbe5xZdxN1qfKiRiCL720FtQfIwPDp9ZqbG2OQbdyZUB8I08irKJ0x/psM4SjXasglHBK5G1DX7BmwcB/PRbC0cHYy3pXDmLI8pZl1NehLzbav0Y4fP4MdnpQnfzZJdpaGVE0oI15lq+KZ0tbllNcS+/4MSwW+afvOw9bazAgMBAAECggEAIkenUsw3GKam9BqWh9I1p0Xmbeo+kYftznqai1pK4McVWW9//+wOJsU4edTR5KXK1KVOQKzDpnf/CU9SchYGPd9YScI3n/HR1HHZW2wHqM6O7na0hYA0UhDXLqhjDWuM3WEOOxdE67/bozbtujo4V4+PM8fjVaTsVDhQ60vfv9CnJJ7dLnhqcoovidOwZTHwG+pQtAwbX0ICgKSrc0elv8ZtfwlEvgIrtSiLAO1/CAf+uReUXyBCZhS4Xl7LroKZGiZ80/JE5mc67V/yImVKHBe0aZwgDHgtHh63/50/cAyuUfKyreAH0VLEwy54UCGramPQqYlIReMEbi6U4GC5AQKBgQDfDnHCH1rBvBWfkxPivl/yNKmENBkVikGWBwHNA3wVQ+xZ1Oqmjw3zuHY0xOH0GtK8l3Jy5dRL4DYlwB1qgd/Cxh0mmOv7/C3SviRk7W6FKqdpJLyaE/bqI9AmRCZBpX2PMje6Mm8QHp6+1QpPnN/SenOvoQg/WWYM1DNXUJsfMwKBgQCdtddE7A5IBvgZX2o9vTLZY/3KVuHgJm9dQNbfvtXw+IQfwssPqjrvoU6hPBWHbCZl6FCl2tRh/QfYR/N7H2PvRFfbbeWHw9+xwFP1pdgMug4cTAt4rkRJRLjEnZCNvSMVHrri+fAgpv296nOhwmY/qw5Smi9rMkRY6BoNCiEKgQKBgAaRnFQFLF0MNu7OHAXPaW/ukRdtmVeDDM9oQWtSMPNHXsx+crKY/+YvhnujWKwhphcbtqkfj5L0dWPDNpqOXJKV1wHt+vUexhKwus2mGF0flnKIPG2lLN5UU6rs0tuYDgyLhAyds5ub6zzfdUBG9Gh0ZrfDXETRUyoJjcGChC71AoGAfmSciL0SWQFU1qjUcXRvCzCK1h25WrYS7E6pppm/xia1ZOrtaLmKEEBbzvZjXqv7PhLoh3OQYJO0NM69QMCQi9JfAxnZKWx+m2tDHozyUIjQBDehve8UBRBRcCnDDwU015lQN9YNb23Fz+3VDB/LaF1D1kmBlUys3//r2OV0Q4ECgYBnpo6ZFmrHvV9IMIGjP7XIlVa1uiMCt41FVyINB9SJnamGGauW/pyENvEVh+ueuthSg37e/l0Xu0nm/XGqyKCqkAfBbL2Uj/j5FyDFrpF27PkANDo99CdqL5A4NQzZ69QRlCQ4wnNCq6GsYy2WEJyU2D+K8EBSQcwLsrI7QL7fvQ==', - 'NAGAD_APP_MERCHANT_PG_PUBLIC_KEY' => 'MIIBIjANBc54jjMJoP2toR9fGmQV7y9fz31UVxSk97AqWZZLJBT2lmv76AgpVV0k0xtb/0VIv8pd/j6TIz9SFfsTQOugHkhyRzzhvZisiKzOAAWNX8RMpG+iqQi4p9W9VrmmiCfFDmLFnMrwhncnMsvlXB8QSJCq2irrx3HG0SJJCbS5+atz+E1iqO8QaPJ05snxv82Mf4NlZ4gZK0Pq/VvJ20lSkR+0nk+s/v3BgIyle78wjZP1vWLU4wIDAQAB', + 'NAGAD_APP_MERCHANT_PRIVATE_KEY' => 'MIIEvFAAxN1qfKiRiCL720FtQfIwPDp9ZqbG2OQbdyZUB8I08irKJ0x/psM4SjXasglHBK5G1DX7BmwcB/PRbC0cHYy3pXDmLI8pZl1NehLzbav0Y4fP4MdnpQnfzZJdpaGVE0oI15lq+KZ0tbllNcS+/4MSwW+afvOw9bazAgMBAAECggEAIkenUsw3GKam9BqWh9I1p0Xmbeo+kYftznqai1pK4McVWW9//+wOJsU4edTR5KXK1KVOQKzDpnf/CU9SchYGPd9YScI3n/HR1HHZW2wHqM6O7na0hYA0UhDXLqhjDWuM3WEOOxdE67/bozbtujo4V4+PM8fjVaTsVDhQ60vfv9CnJJ7dLnhqcoovidOwZTHwG+pQtAwbX0ICgKSrc0elv8ZtfwlEvgIrtSiLAO1/CAf+uReUXyBCZhS4Xl7LroKZGiZ80/JE5mc67V/yImVKHBe0aZwgDHgtHh63/50/cAyuUfKyreAH0VLEwy54UCGramPQqYlIReMEbi6U4GC5AQKBgQDfDnHCH1rBvBWfkxPivl/yNKmENBkVikGWBwHNA3wVQ+xZ1Oqmjw3zuHY0xOH0GtK8l3Jy5dRL4DYlwB1qgd/Cxh0mmOv7/C3SviRk7W6FKqdpJLyaE/bqI9AmRCZBpX2PMje6Mm8QHp6+1QpPnN/SenOvoQg/WWYM1DNXUJsfMwKBgQCdtddE7A5IBvgZX2o9vTLZY/3KVuHgJm9dQNbfvtXw+IQfwssPqjrvoU6hPBWHbCZl6FCl2tRh/QfYR/N7H2PvRFfbbeWHw9+xwFP1pdgMug4cTAt4rkRJRLjEnZCNvSMVHrri+fAgpv296nOhwmY/qw5Smi9rMkRY6BoNCiEKgQKBgAaRnFQFLF0MNu7OHAXPaW/ukRdtmVeDDM9oQWtSMPNHXsx+crKY/+YvhnujWKwhphcbtqkfj5L0dWPDNpqOXJKV1wHt+vUexhKwus2mGF0flnKIPG2lLN5UU6rs0tuYDgyLhAyds5ub6zzfdUBG9Gh0ZrfDXETRUyoJjcGChC71AoGAfmSciL0SWQFU1qjUcXRvCzCK1h25WrYS7E6pppm/xia1ZOrtaLmKEEBbzvZjXqv7PhLoh3OQYJO0NM69QMCQi9JfAxnZKWx+m2tDHozyUIjQBDehve8UBRBRcCnDDwU015lQN9YNb23Fz+3VDB/LaF1D1kmBlUys3//r2OV0Q4ECgYBnpo6ZFmrHvV9IMIGjP7XIlVa1uiMCt41FVyINB9SJnamGGauW/pyENvEVh+ueuthSg37e/l0Xu0nm/XGqyKCqkAfBbL2Uj/j5FyDFrpF27PkANDo99CdqL5A4NQzZ69QRlCQ4wnNCq6GsYy2WEJyU2D+K8EBSQcwLsrI7QL7fvQ==', + 'NAGAD_APP_MERCHANT_PG_PUBLIC_KEY' => 'MIIBIjANBc54jjMJoP2toR9fGmQV7y9fzj6TIz9SFfsTQOugHkhyRzzhvZisiKzOAAWNX8RMpG+iqQi4p9W9VrmmiCfFDmLFnMrwhncnMsvlXB8QSJCq2irrx3HG0SJJCbS5+atz+E1iqO8QaPJ05snxv82Mf4NlZ4gZK0Pq/VvJ20lSkR+0nk+s/v3BgIyle78wjZP1vWLU4wIDAQAB', 'NAGAD_APP_TIMEZONE' => 'Asia/Dhaka', ]; @@ -37,8 +37,14 @@ $nagad = new Base($config, [ 'invoice' => Helper::generateFakeInvoice(15, true), 'merchantCallback' => 'https://example.com/payment/success/id=4', ]); +//way 1 - use for website $status = $nagad->payNow($nagad); //will redirect to payment url of Nagad +//way 2 - useful for rest api or graphQL +$paymentUrl = $nagad->payNowWithoutRedirection($nagad); //will return payment url like below. You can use that url and do whatever u want to get payment from clients. +// +`http://sandbox.mynagad.com:10060/check-out/MDYyODAwNTcyNTYxNi42ODMwMDIwMDcxMDQyMjUuOU5PTEFVNkVaWkdUWVRBLmJiZGMyNTE3MTVmZTNiNjIzN2Zk` + //after that use below method for extracting payment response that will return an array $response = Helper::successResponse('https://example.com/payment/success/id=4/?merchant=683XXXX225&order_id=CKH060JXXXXXFRA2&payment_ref_id=MXXXXXXXXtIMDYwSjFRSlBRMUZSQTIuMTg0NTE2Yzc3ZmEzNmEwZTJlZjk=&status=Success&status_code=00_0000_000&message=Successful%20Transaction&payment_dt=20211123235008&issuer_payment_ref=MTEyMzIzNDg1NzUwOS42ODMwMDIwMDcxMDQyMjUuQ0tIMDYwSjFRSlBRMUZSQTIuMTg0NTE2Yzc3ZmEzNmEwZTJlZjk='); Array diff --git a/src/Base.php b/src/Base.php index b7bbe9b..b2b160e 100644 --- a/src/Base.php +++ b/src/Base.php @@ -13,6 +13,7 @@ namespace Xenon\NagadApi; +use Exception; use Xenon\NagadApi\lib\Key; /** @@ -92,7 +93,7 @@ public function __construct($config, $params) * Final Send Request to Nagad * @param Base $base * @return array - * @throws \Exception + * @throws Exception * @since v1.6.0 */ public function payNow(Base $base) @@ -102,6 +103,19 @@ public function payNow(Base $base) return $request->sendRequest(); } + /** + * Final Send Request to Nagad and Get Redirection Url + * @param Base $base + * @return string + * @throws Exception + * @since v1.6.0 + */ + public function payNowWithoutRedirection(Base $base): string + { + $request = new RequestHandler($base); + return $request->sendRequest(false); + } + /** * @return string * @since v1.3.1 @@ -161,14 +175,6 @@ public function getBaseUrl() return $this->base_url; } - /** - * @return $this - * @since v1.3.1 - */ - public function getVariables() - { - return $this; - } /** * Verify Payment diff --git a/src/RequestHandler.php b/src/RequestHandler.php index eff9651..18207f1 100644 --- a/src/RequestHandler.php +++ b/src/RequestHandler.php @@ -60,11 +60,11 @@ public function __construct(Base $base) /** * Fire request to nagad api - * @return array + * @return mixed * @throws Exception * @since v1.6.0 */ - public function sendRequest() + public function sendRequest(bool $redirection = true) { $postUrl = $this->base->getBaseUrl() . $this->apiUrl . $this->base->getMerchantID() . @@ -81,7 +81,7 @@ public function sendRequest() try { $publicSignature = $this->helper->EncryptDataWithPublicKey(json_encode($sensitiveData)); } catch (Exception $e) { - // return $this->showResponse($e->getMessage(), $sensitiveData, []); + throw new ExceptionHandler($e->getMessage()); } @@ -146,10 +146,13 @@ public function sendRequest() if (array_key_exists('status', $resultDataOrder)) { - if ($resultDataOrder['status'] == "Success") { + if ($resultDataOrder['status'] == "Success" && $redirection) { $url = json_encode($resultDataOrder['callBackUrl']); echo ""; exit; + } elseif ($resultDataOrder['status'] == "Success" && !$redirection) { + + return $resultDataOrder['callBackUrl']; } else { echo json_encode($resultDataOrder); } @@ -163,7 +166,6 @@ public function sendRequest() } else { $this->showResponse($resultData['message'], [], []); } - } /**