سلام ، من طبق آموزش های خود زرین پال کد زیرو زدم و پرداخت هم با موفقیت انجام میشه ، ولی 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)
})
}
@m.p.farahany
درود
callback url که شما بهش دادید مربوط به localhost هستش. چون درخواست شما در سرور های زرینپال اجرا میشه و نتیجه بازگشت داده میشه، پس نمیتونه به آدرس localhost دسترسی داشته باشه و جواب رو ارسال کنه. درواقع وقتی شما داخل callback url آدرس localhost وارد میکنی، میاد در سرورهای خود زرینپال به دنبال این آدرس میگرده.
برای حل مشکل باید این کد رو داخل یک سرور واقعی اجرا کنی و آیپی یا دامنه مربوط به سرور رو در callback url قرار بدی.
سلام اجرا نمیشه یعنی چی ؟ یعنی به بانک میره و بر میگرده اما url مربوط به callback اجرا نمیشه یا کلا اصلا نمیشناسه ؟ یا ارور خاصی دارید ؟
@hesammousavi
میره صفحه پرداخت ، مبلغ هم واریز میشه ، اما url مربوط به callback اجرا نمیشه ، ارور خاصی هم نداره
@m.p.farahany
درود
callback url که شما بهش دادید مربوط به localhost هستش. چون درخواست شما در سرور های زرینپال اجرا میشه و نتیجه بازگشت داده میشه، پس نمیتونه به آدرس localhost دسترسی داشته باشه و جواب رو ارسال کنه. درواقع وقتی شما داخل callback url آدرس localhost وارد میکنی، میاد در سرورهای خود زرینپال به دنبال این آدرس میگرده.
برای حل مشکل باید این کد رو داخل یک سرور واقعی اجرا کنی و آیپی یا دامنه مربوط به سرور رو در callback url قرار بدی.
نمیاد ، url که به callBack دادم(http://localhost:3000/api/user/wallet/checker) رو با postman چک کردم و کار میکنه یعنی مشکل از این نیست ، تو صفحه پرداخت هم که میره و پول واریز میشه ، مشکل فقط اینه که بعد پرداخت انگار هیچ request برا callback نمیره و نمیدونم چرا !!! کد رو هم گذاشتم ، اگه مشکلی داره بگین
@m.p.farahany
آدرسی که شما به زرینپال میدید یک آدرس مرتبط با سرور لوکال هست که فقط در کامپیوتر خود شما قابل استفاده هستش. ولی نتیجه پرداخت از سرور های زرینپال ارسال میشه. خب این واضحه که سرورهای زرینپال به کامپیوتر شما دسترسی ندارند.
@shahriarshariati
@hesammousavi
من یک مشکلی که دارم همه چیز اوکی هست ولی سمت ریکت که کال میکنم ریدایرکت نمیشه به آدرسی که در بک اند رکویست میدم تا ۲۰۰ میشه ریدارکت میشه روی زرین پال اما این فقط در network browser هست خود بروزر انجام نمیشه چطور میتونم بدستش بیارم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟