راکت
حل شده

کار نکردن ZarinPal

7 پاسخ

سلام ، من طبق آموزش های خود زرین پال کد زیرو زدم و پرداخت هم با موفقیت انجام میشه ، ولی 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)
        })
}
ثبت پرسش جدید

پاسخ‌ها

7
شهریار شریعتی
شهریار شریعتی
@shahriarshariati

تخصص: برنامه‌نویس، هوش مصنوعی

بهترین پاسخ

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

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

Pouya Farahany
Pouya Farahany
@m.p.farahany

تخصص: برنامه‌نویس Backend

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

شاید پاسخ شما همین‌جا باشد

حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

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

Pouya Farahany
Pouya Farahany
@m.p.farahany

تخصص: برنامه‌نویس Backend

@hesammousavi

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

شهریار شریعتی
شهریار شریعتی
@shahriarshariati

تخصص: برنامه‌نویس، هوش مصنوعی

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

محمد
محمد
@man

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

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

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