larabook / gateway

A Laravel package for connecting to all Iranian Banks
MIT License
244 stars 188 forks source link

هنگام برگشت از درگاه پارسیان ارور"تراکنشی یافت نشد" میدهد #245

Closed shamekhkala closed 3 years ago

shamekhkala commented 3 years ago

برای حل این مشکل کافیست در آدرس vendor/larabook/gateway/src/parsan.php فانکشن وری فای پیمنت را به صورت زیر تغییر دهید

protected function verifyPayment() { if (!Request::has('Token') && !Request::has('status')) throw new ParsianErrorException('درخواست غیر معتبر', -1);

    $authority = Request::input('Token');
    $authority2 = Request::input('transaction_id');
    $status = Request::input('status');

    if ($status != 0) {
        $errorMessage = ParsianResult::errorMessage($status);
        $this->newLog($status, $errorMessage);
        throw new ParsianErrorException($errorMessage, $status);
    }

    if ($this->transactionId != $authority2)
        throw new ParsianErrorException('تراکنشی یافت نشد', -1);

    $params = array(
        'LoginAccount' => $this->config->get('gateway.parsian.pin'),
        'Token'        => $authority,
    );
    try {
        $soap   = new SoapClient($this->serverUrlConfirm);
        $result = $soap->ConfirmPayment([
            "requestData" => $params
        ]);

    } catch (\SoapFault $e) {
        throw new ParsianErrorException($e->getMessage(), -1);
    }

    if ($result === false || !isset($result->ConfirmPaymentResult->Status))
        throw new ParsianErrorException('پاسخ دریافتی از بانک نامعتبر است.', -1);

    if ($result->ConfirmPaymentResult->Status != 0) {
        $errorMessage = ParsianResult::errorMessage($result->ConfirmPaymentResult->Status);
        $this->transactionFailed();
        $this->newLog($result->ConfirmPaymentResult->Status, $errorMessage);
        throw new ParsianErrorException($errorMessage, $result->ConfirmPaymentResult->Status);
    }

    $this->trackingCode = $result->ConfirmPaymentResult->RRN;
    $this->cardNumber = $result->ConfirmPaymentResult->CardNumberMasked;
    $this->transactionSucceed();
    $this->newLog($result->ConfirmPaymentResult->Status, ParsianResult::errorMessage($result->ConfirmPaymentResult->Status));
}