Pouya Farahany
5 سال پیش توسط Pouya Farahany مطرح شد
7 پاسخ

کار نکردن ZarinPal

سلام ، من طبق آموزش های خود زرین پال کد زیرو زدم و پرداخت هم با موفقیت انجام میشه ، ولی callBackUrl اجرا نمیشه

این کد قسمت اول هستش که میفرسته به درگاه و پس از عملیات برنمیگردونه به url که بهش دادم !!

function payment(req, res, next) {
    let params = {
        MerchantID: 'bfedbd26-ccc0-11e9-b69d-000c295eb8fc',
        Amount: req.body.amount,
        CallbackURL: 'http://localhost:3000/api/user/wallet/checker',
        Description: 'شارژ کیف پول',
    }

    let options = {
        method: 'POST',
        uri: 'https://www.zarinpal.com/pg/rest/WebGate/PaymentRequest.json',
        headers: {
            'cache-control': 'no-cache',
            'content-type': 'application/json'
        },
        body: params,
        json: true
    }

    RE(options)
        .then(data => {

            let PaymentInfo = new Payment({
                userId: req.user.id,
                price: req.body.amount,
                resNumber: data.Authority,
                userId: req.user.id,
            })

            PaymentInfo.save()
            res.json(`https://www.zarinpal.com/pg/StartPay/${data.Authority}`)
        }, (e) => {
            logger.error(`payment error:`, e)
        })
}

مشکلش چیه ؟؟؟

اینم کنترلر api هستش که برای callBackUrl دارم ، که اصلا واردش هم نمیشه و log هم نمیندازه

/**Response After Payment */
function checker(req, res, next) {

    console.log(req.query.Status)

    if (req.query.Status !== 'OK') {
        return next(new httpError(ERROR_http.PAYMENT_WAS_NOT_SUCCESSFUL))
    }

    let payment = Payment.findOne({
        resNumber: req.query.Authority
    }).exec();

    let params = {
        MerchantID: 'bfedbd26-ccc0-11e9-b69d-000c295eb8fc',
        Amount: payment.price,
        Authority: req.query.Authority
    }

    let options = {
        uri: 'https: //www.zarinpal.com/pg/rest/WebGate/PaymentVerification.json',
        method: 'POST',
        uri: url,
        headers: {
            'cache-control': 'no-cache',
            'content-type': 'application/json'
        },
        body: params,
        json: true
    }

    RE(options)
        .then(data => {
            console.log(data.Status)
            if (data.Status == 100) {
                payment.set({
                    payment: true
                });

                payment.save();

                Wallet.findOneAndUpdate({
                    userId: req.user.id
                }, {
                    $inc: {
                        coins: req.pay.price
                    }
                }).then((FW) => {
                    res.json('Done!')
                })

            } else {
                next(new httpError(ERROR_http.PAYMENT_WAS_NOT_SUCCESSFUL))
            }
        }, (e) => {
            logger.error(`checker error:`, e)
        })
}

ثبت پرسش جدید
شهریار شریعتی
تخصص : برنامه‌نویس، هوش مصنوعی
@shahriarshariati 5 سال پیش مطرح شد
1

@m.p.farahany
درود
callback url که شما بهش دادید مربوط به localhost هستش. چون درخواست شما در سرور های زرین‌پال اجرا می‌شه و نتیجه بازگشت داده می‌شه، پس نمی‌تونه به آدرس localhost دسترسی داشته باشه و جواب رو ارسال کنه. درواقع وقتی شما داخل callback url آدرس localhost وارد می‌کنی، میاد در سرور‌های خود زرین‌پال به دنبال این آدرس می‌گرده.
برای حل مشکل باید این کد رو داخل یک سرور واقعی اجرا کنی و آی‌پی یا دامنه مربوط به سرور رو در callback url قرار بدی.


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

سلام اجرا نمیشه یعنی چی ؟ یعنی به بانک میره و بر میگرده اما url مربوط به callback اجرا نمیشه یا کلا اصلا نمیشناسه ؟ یا ارور خاصی دارید ؟


Pouya Farahany
تخصص : برنامه‌نویس Backend
@m.p.farahany 5 سال پیش مطرح شد
0

@hesammousavi
میره صفحه پرداخت ، مبلغ هم واریز میشه ، اما url مربوط به callback اجرا نمیشه ، ارور خاصی هم نداره


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

آیا به url شما میاد یا نه اصلا به url ای که مشخص کردید هم نمیاد ؟


شهریار شریعتی
تخصص : برنامه‌نویس، هوش مصنوعی
@shahriarshariati 5 سال پیش مطرح شد
1

@m.p.farahany
درود
callback url که شما بهش دادید مربوط به localhost هستش. چون درخواست شما در سرور های زرین‌پال اجرا می‌شه و نتیجه بازگشت داده می‌شه، پس نمی‌تونه به آدرس localhost دسترسی داشته باشه و جواب رو ارسال کنه. درواقع وقتی شما داخل callback url آدرس localhost وارد می‌کنی، میاد در سرور‌های خود زرین‌پال به دنبال این آدرس می‌گرده.
برای حل مشکل باید این کد رو داخل یک سرور واقعی اجرا کنی و آی‌پی یا دامنه مربوط به سرور رو در callback url قرار بدی.


Pouya Farahany
تخصص : برنامه‌نویس Backend
@m.p.farahany 5 سال پیش مطرح شد
1

@hesammousavi

نمیاد ، url که به callBack دادم(http://localhost:3000/api/user/wallet/checker) رو با postman چک کردم و کار میکنه یعنی مشکل از این نیست ، تو صفحه پرداخت هم که میره و پول واریز میشه ، مشکل فقط اینه که بعد پرداخت انگار هیچ request برا callback نمیره و نمیدونم چرا !!! کد رو هم گذاشتم ، اگه مشکلی داره بگین


شهریار شریعتی
تخصص : برنامه‌نویس، هوش مصنوعی
@shahriarshariati 5 سال پیش آپدیت شد
1

@m.p.farahany
آدرسی که شما به زرین‌پال میدید یک آدرس مرتبط با سرور لوکال هست که فقط در کامپیوتر خود شما قابل استفاده هستش. ولی نتیجه پرداخت از سرور های زرین‌پال ارسال می‌شه. خب این واضحه که سرور‌های زرین‌پال به کامپیوتر شما دسترسی ندارند.


محمد
@man 4 سال پیش مطرح شد
0

@shahriarshariati
@hesammousavi
من یک مشکلی که دارم همه چیز اوکی هست ولی سمت ریکت که کال میکنم ریدایرکت نمیشه به آدرسی که در بک اند رکویست میدم تا ۲۰۰ میشه ریدارکت میشه روی زرین پال اما این فقط در network browser هست خود بروزر انجام نمیشه چطور میتونم بدستش بیارم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام