Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed normalization of return messages for new response code on zarinpal and Fixed spelling mistake in saman and sep driver #170

Merged
merged 2 commits into from
Dec 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/Drivers/SEP/SEP.php
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ protected function createReceipt($referenceId)
protected function purchaseFailed($status)
{
$translations = array(
1 => ' تراکنش توسط خریدار کنسل شده است.',
1 => ' تراکنش توسط خریدار لغو شده است.',
2 => 'پرداخت با موفقیت انجام شد.',
3 => 'پرداخت انجام نشد.',
4 => 'کاربر در بازه زمانی تعیین شده پاسخی ارسال نکرده است.',
4 => 'کاربر در بازه زمانی تعیین شده پاسخی ارسال نکرده است.',
5 => 'پارامترهای ارسالی نامعتبر است.',
8 => 'آدرس سرور پذیرنده نامعتبر است.',
9 => 'رمز کارت 3 مرتبه اشتباه وارد شده است در نتیجه کارت غیر فعال خواهد شد.',
Expand All @@ -225,8 +225,8 @@ private function notVerified($status)
{
$translations = array(
-2 => ' تراکنش یافت نشد.',
-6 => 'بیش از نیم ساعت از زمان اجرای تراکنش گذشته است.',
2 => 'کاربر در بازه زمانی تعیین شده پاسخی ارسال نکرده است.',
-6 => 'بیش از 30 دقیقه از زمان اجرای تراکنش گذشته است.',
2 => 'کاربر در بازه زمانی تعیین شده پاسخی ارسال نکرده است.',
-104 => 'پارامترهای ارسالی نامعتبر است.',
-105 => 'آدرس سرور پذیرنده نامعتبر است.',
-106 => 'رمز کارت 3 مرتبه اشتباه وارد شده است در نتیجه کارت غیر فعال خواهد شد.',
Expand Down
14 changes: 7 additions & 7 deletions src/Drivers/Saman/Saman.php
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ protected function purchaseFailed($status)
{
$translations = array(
-1 => ' تراکنش توسط خریدار کنسل شده است.',
-6 => 'سند قبال برگشت کامل یافته است. یا خارج از زمان 30 دقیقه ارسال شده است.',
-6 => 'سند قابل برگشت کامل یافته است. یا خارج از زمان 30 دقیقه ارسال شده است.',
-18 => 'IP Address فروشنده نا‌معتبر است.',
79 => 'مبلغ سند برگشتی، از مبلغ تراکنش اصلی بیشتر است.',
12 => 'درخواست برگشت یک تراکنش رسیده است، در حالی که تراکنش اصلی پیدا نمی شود.',
Expand All @@ -190,7 +190,7 @@ protected function purchaseFailed($status)
61 => 'مبلغ بیش از سقف برداشت می باشد.',
93 => 'تراکنش Authorize شده است (شماره PIN و PAN درست هستند) ولی امکان سند خوردن وجود ندارد.',
68 => 'تراکنش در شبکه بانکی Timeout خورده است.',
34 => 'خریدار یا فیلد CVV2 و یا فیلد ExpDate را اشتباه وارد کرده است (یا اصال وارد نکرده است).',
34 => 'خریدار یا فیلد CVV2 و یا فیلد ExpDate را اشتباه وارد کرده است (یا اصلا وارد نکرده است).',
51 => 'موجودی حساب خریدار، کافی نیست.',
84 => 'سیستم بانک صادر کننده کارت خریدار، در وضعیت عملیاتی نیست.',
96 => 'کلیه خطاهای دیگر بانکی باعث ایجاد چنین خطایی می گردد.',
Expand All @@ -214,16 +214,16 @@ private function notVerified($status)
{
$translations = array(
-1 => 'خطا در پردازش اطلاعات ارسالی (مشکل در یکی از ورودی ها و ناموفق بودن فراخوانی متد برگشت تراکنش)',
-3 => 'ورودیها حاوی کارکترهای غیرمجاز میباشند.',
-3 => 'ورودی ها حاوی کارکترهای غیرمجاز میباشند.',
-4 => 'کلمه عبور یا کد فروشنده اشتباه است (Merchant Authentication Failed)',
-6 => 'سند قبال برگشت کامل یافته است. یا خارج از زمان 30 دقیقه ارسال شده است.',
-6 => 'سند قابل برگشت کامل یافته است. یا خارج از زمان 30 دقیقه ارسال شده است.',
-7 => 'رسید دیجیتالی تهی است.',
-8 => 'طول ورودیها بیشتر از حد مجاز است.',
-8 => 'طول ورودی ها بیشتر از حد مجاز است.',
-9 => 'وجود کارکترهای غیرمجاز در مبلغ برگشتی.',
-10 => 'رسید دیجیتالی به صورت Base64 نیست (حاوی کاراکترهای غیرمجاز است)',
-11 => 'طول ورودیها ک تر از حد مجاز است.',
-11 => 'طول ورودی ها کمتر از حد مجاز است.',
-12 => 'مبلغ برگشتی منفی است.',
-13 => 'مبلغ برگشتی برای برگشت جزئی بیش از مبلغ برگشت نخوردهی رسید دیجیتالی است.',
-13 => 'مبلغ برگشتی برای برگشت جزئی بیش از مبلغ برگشت نخورده ی رسید دیجیتالی است.',
-14 => 'چنین تراکنشی تعریف نشده است.',
-15 => 'مبلغ برگشتی به صورت اعشاری داده شده است.',
-16 => 'خطای داخلی سیستم',
Expand Down
59 changes: 45 additions & 14 deletions src/Drivers/Zarinpal/Strategies/Normal.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ public function purchase()

$result = json_decode($response->getBody()->getContents(), true);

// some error has happened
if (!empty($result['errors']) || empty($result['data']) || $result['data']['code'] != 100) {
throw new PurchaseFailedException($result['errors']['message'], $result['errors']['code']);
$bodyResponse = $result['errors']['code'];
throw new PurchaseFailedException($this->translateStatus($bodyResponse), $bodyResponse);
}

$this->invoice->transactionId($result['data']["authority"]);
Expand Down Expand Up @@ -155,20 +155,14 @@ public function verify(): ReceiptInterface

$result = json_decode($response->getBody()->getContents(), true);

if (
empty($result['data'])
|| !isset($result['data']['ref_id'])
|| ($result['data']['code'] != 100 && $result['data']['code'] != 101)
) {
$message = $result['errors']['message'] ?? "";
$code = $result['errors']['code'];
throw new InvalidPaymentException($message, $code);
if (empty($result['data']) || !isset($result['data']['ref_id']) || ($result['data']['code'] != 100 && $result['data']['code'] != 101)) {
$bodyResponse = $result['errors']['code'];
throw new InvalidPaymentException($this->translateStatus($bodyResponse), $bodyResponse);
}

if ($result['data']['code'] == 101) {
$message = $result['data']['message'] ?? "";
$code = $result['data']['code'];
throw new InvalidPaymentException($message, $code);
$bodyResponse = $result['data']['code'];
if ($bodyResponse == 101) {
throw new InvalidPaymentException($this->translateStatus($bodyResponse), $bodyResponse);
}

return $this->createReceipt($result['data']['ref_id']);
Expand Down Expand Up @@ -215,4 +209,41 @@ protected function getVerificationUrl(): string
{
return $this->settings->apiVerificationUrl;
}

/**
* Convert status to a readable message.
*
* @param $status
*
* @return mixed|string
*/
private function translateStatus($status)
{
$translations = [
'100' => 'تراکنش با موفقیت انجام گردید',
'101' => 'عمليات پرداخت موفق بوده و قبلا عملیات وریفای تراكنش انجام شده است',
'-9' => 'خطای اعتبار سنجی',
'-10' => 'ای پی و يا مرچنت كد پذيرنده صحيح نمی باشد',
'-11' => 'مرچنت کد فعال نیست لطفا با تیم پشتیبانی ما تماس بگیرید',
'-12' => 'تلاش بیش از حد در یک بازه زمانی کوتاه',
'-15' => 'ترمینال شما به حالت تعلیق در آمده با تیم پشتیبانی تماس بگیرید',
'-16' => 'سطح تاييد پذيرنده پايين تر از سطح نقره ای می باشد',
'-30' => 'اجازه دسترسی به تسویه اشتراکی شناور ندارید',
'-31' => 'حساب بانکی تسویه را به پنل اضافه کنید مقادیر وارد شده برای تسهیم صحيح نمی باشد',
'-32' => 'مقادیر وارد شده برای تسهیم صحيح نمی باشد',
'-33' => 'درصد های وارد شده صحيح نمی باشد',
'-34' => 'مبلغ از کل تراکنش بیشتر است',
'-35' => 'تعداد افراد دریافت کننده تسهیم بیش از حد مجاز است',
'-40' => 'پارامترهای اضافی نامعتبر، expire_in معتبر نیست',
'-50' => 'مبلغ پرداخت شده با مقدار مبلغ در وریفای متفاوت است',
'-51' => 'پرداخت ناموفق',
'-52' => 'خطای غیر منتظره با پشتیبانی تماس بگیرید',
'-53' => 'اتوریتی برای این مرچنت کد نیست',
'-54' => 'اتوریتی نامعتبر است',
];

$unknownError = 'خطای ناشناخته رخ داده است. در صورت کسر مبلغ از حساب حداکثر پس از 72 ساعت به حسابتان برمیگردد';

return array_key_exists($status, $translations) ? $translations[$status] : $unknownError;
}
}
82 changes: 43 additions & 39 deletions src/Drivers/Zarinpal/Strategies/Sandbox.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,9 @@ public function purchase()
$client = new \SoapClient($this->getPurchaseUrl(), ['encoding' => 'UTF-8']);
$result = $client->PaymentRequest($data);

if ($result->Status != 100 || empty($result->Authority)) {
// some error has happened
$message = $this->translateStatus($result->Status);
throw new PurchaseFailedException($message, $result->Status);
$bodyResponse = $result->Status;
if ($bodyResponse != 100 || empty($result->Authority)) {
throw new PurchaseFailedException($this->translateStatus($bodyResponse), $bodyResponse);
}

$this->invoice->transactionId($result->Authority);
Expand Down Expand Up @@ -124,9 +123,9 @@ public function verify() : ReceiptInterface
$client = new \SoapClient($this->getVerificationUrl(), ['encoding' => 'UTF-8']);
$result = $client->PaymentVerification($data);

if ($result->Status != 100) {
$message = $this->translateStatus($result->Status);
throw new InvalidPaymentException($message, $result->Status);
$bodyResponse = $result->Status;
if ($bodyResponse != 100) {
throw new InvalidPaymentException($this->translateStatus($bodyResponse), $bodyResponse);
}

return $this->createReceipt($result->RefID);
Expand All @@ -144,38 +143,6 @@ public function createReceipt($referenceId)
return new Receipt('zarinpal', $referenceId);
}

/**
* Convert status to a readable message.
*
* @param $status
*
* @return mixed|string
*/
private function translateStatus($status)
{
$translations = array(
"-1" => "اطلاعات ارسال شده ناقص است.",
"-2" => "IP و يا مرچنت كد پذيرنده صحيح نيست",
"-3" => "با توجه به محدوديت هاي شاپرك امكان پرداخت با رقم درخواست شده ميسر نمي باشد",
"-4" => "سطح تاييد پذيرنده پايين تر از سطح نقره اي است.",
"-11" => "درخواست مورد نظر يافت نشد.",
"-12" => "امكان ويرايش درخواست ميسر نمي باشد.",
"-21" => "هيچ نوع عمليات مالي براي اين تراكنش يافت نشد",
"-22" => "تراكنش نا موفق ميباشد",
"-33" => "رقم تراكنش با رقم پرداخت شده مطابقت ندارد",
"-34" => "سقف تقسيم تراكنش از لحاظ تعداد يا رقم عبور نموده است",
"-40" => "اجازه دسترسي به متد مربوطه وجود ندارد.",
"-41" => "اطلاعات ارسال شده مربوط به AdditionalData غيرمعتبر ميباشد.",
"-42" => "مدت زمان معتبر طول عمر شناسه پرداخت بايد بين 30 دقيه تا 45 روز مي باشد.",
"-54" => "درخواست مورد نظر آرشيو شده است",
"101" => "عمليات پرداخت موفق بوده و قبلا PaymentVerification تراكنش انجام شده است.",
);

$unknownError = 'خطای ناشناخته رخ داده است.';

return array_key_exists($status, $translations) ? $translations[$status] : $unknownError;
}

/**
* Retrieve purchase url
*
Expand Down Expand Up @@ -205,4 +172,41 @@ protected function getVerificationUrl() : string
{
return $this->settings->sandboxApiVerificationUrl;
}

/**
* Convert status to a readable message.
*
* @param $status
*
* @return mixed|string
*/
private function translateStatus($status)
{
$translations = [
'100' => 'تراکنش با موفقیت انجام گردید',
'101' => 'عمليات پرداخت موفق بوده و قبلا عملیات وریفای تراكنش انجام شده است',
'-9' => 'خطای اعتبار سنجی',
'-10' => 'ای پی و يا مرچنت كد پذيرنده صحيح نمی باشد',
'-11' => 'مرچنت کد فعال نیست لطفا با تیم پشتیبانی ما تماس بگیرید',
'-12' => 'تلاش بیش از حد در یک بازه زمانی کوتاه',
'-15' => 'ترمینال شما به حالت تعلیق در آمده با تیم پشتیبانی تماس بگیرید',
'-16' => 'سطح تاييد پذيرنده پايين تر از سطح نقره ای می باشد',
'-30' => 'اجازه دسترسی به تسویه اشتراکی شناور ندارید',
'-31' => 'حساب بانکی تسویه را به پنل اضافه کنید مقادیر وارد شده برای تسهیم صحيح نمی باشد',
'-32' => 'مقادیر وارد شده برای تسهیم صحيح نمی باشد',
'-33' => 'درصد های وارد شده صحيح نمی باشد',
'-34' => 'مبلغ از کل تراکنش بیشتر است',
'-35' => 'تعداد افراد دریافت کننده تسهیم بیش از حد مجاز است',
'-40' => 'پارامترهای اضافی نامعتبر، expire_in معتبر نیست',
'-50' => 'مبلغ پرداخت شده با مقدار مبلغ در وریفای متفاوت است',
'-51' => 'پرداخت ناموفق',
'-52' => 'خطای غیر منتظره با پشتیبانی تماس بگیرید',
'-53' => 'اتوریتی برای این مرچنت کد نیست',
'-54' => 'اتوریتی نامعتبر است',
];

$unknownError = 'خطای ناشناخته رخ داده است. در صورت کسر مبلغ از حساب حداکثر پس از 72 ساعت به حسابتان برمیگردد';

return array_key_exists($status, $translations) ? $translations[$status] : $unknownError;
}
}
Loading