larabook / gateway

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

تراکنش Sale یافت نشد #42 #176

Open saber13812002 opened 5 years ago

saber13812002 commented 5 years ago

تراکنش ساخته میشه کاربر میره بانک برمیگرده سپس این خطا رو میده

توی
gateway_transactions که یکی از جداول بانک ماست مقادیر اینهاست

id, port, price, ref_id, tracking_code, card_number, status, ip, description, payment_date, created_at, updated_at, deleted_at

'1559924521', 'MELLAT', '1000.00', '1E83CA054214AFD7', NULL, NULL, 'FAILED', '5.123.x.119', NULL, NULL, '2019-06-07 20:52:01', '2019-06-07 20:52:35', NULL

اینا مقادیره وقتی برمیگرده این رکورد ثبت میشه و اررور 42 میده

در جدول دیگر trasaction logs

id, transaction_id, result_code, result_message, log_date

'35', '1559924521', '42', 'تراکنش Sale یافت نشد', '2019-06-07 20:52:35'

اینجا نوشته این مشکل برمیگرده به مقدار برگشتی SaleReferenceId که طولش زیاده و وقتی بعد از برگشت از خرید میخواهید bpVerifyRequest رو فراخوانی کنید اون مقدار واقعی که تو متغییر هست ارسال نمیشه و تبدیل میشه به int که مسلما نباید اینجوری بشه.

توجه کنید مقدار برگشتی از بانک بصورت string هست و مقداری که متد bpVerifyRequest میگیره long هست. پس باید تبدیل بشه. (float) رو قبل از مقدار SaleReferenceId قرار بدید مشکلتون حل میشه.

.saleOrderId يا شماره درخواست خريد: پس از انجام روند Sale سمت دروازه پرداخت و دريافت پاسخ موفقيت آميز بودن آن، كه متعاقب آن سايت پذيرنده درخواست تاييد يا Verify صادر مي نمايد، طي انجام اين روند سمت دروازه پرداخت، اين تراكنش تبديل به يك تراكنش خريد موفق مي شود و به تبع آن درخواست خريد ارسالي براي اين مورد تبديل به درخواست خريد موفق مي شود، يعني orderId مرحله Sale تبديل به saleOrderId مي شود و در طي مراحل بعد از Sale از اين شماره بعنوان شناسه تراكنش خريد استفاده مي شود. orderId و saleOrderId توسط پذيرنده توليد و براي دروازه پرداخت ارسال مي شود.

که من حدس میزنم بخاطر این تغییر من باشه

    function getTimeId()
    {
        $genuid = function () {
            return time();
        };
        $uid = $genuid();
        while ($this->getTable()->whereId($uid)->exists()) {
            sleep(0.5);
            $uid = $genuid();
        }
        return $uid;
    }

در فایل portabstract.php

همین تابع رو مجبور شدم تغییر بدم چون پیام خطا داشتم

شاید مشکل از همین تغییر باشه

اما وقتی تغییر رو برمیگردونم به حالت اولش

id, transaction_id, result_code, result_message, log_date

'36', '155992906551', '41', 'شماره درخواست تکراری است', '2019-06-07 22:07:45'

شماره درخواست تکراری است رو ایجاد میکنه