درود و سلام یک سوال داشتم این کدی که می فرستم مربوط به درگاه پرداخت زرین پال هست 2 تا سوال داشتم اول اینکه کدوم خط کد مربوط به موفقیت پرداخت هست چون می خوام ایمیل و نوتیفیکیشن برای کاربر ارسال کنم ؟
دوم اینکه برای متد verify چیکار باید کنم دقیقا میشه راهنماییم کنید. باید یک روت بسازم و به کنترلر وصل کنم؟ و داخل کنترلر چه کار کنم؟
class Zarinpal implements GatewayInterface
{
public function pay(Order $order)
{
$data = array(
"merchant_id" => env('MERCHENT_ID'),
"amount" => $order->price * 10,
"callback_url" => env('ZARINPAL_CALLBACK'),
"description" => "",
"metadata" => ["email" => ""],
);
$client = Http::post('https://api.zarinpal.com/pg/v4/payment/request.json', $data);
if ($client->successful()) {
$response = json_decode($client->body());
if (!empty($response->errors))
return redirect('/');
if ($response->data->code == 100)
{
$order->authority = $response->data->authority;
// $order->gateway = $this->getName();
$order->save();
return redirect("https://www.zarinpal.com/pg/StartPay/{$response->data->authority}");
}
}
return redirect('/');
}
public function verify(Request $request): bool
{
$Authority = $_GET['Authority'];
$order = Order::where('authority', $Authority)->firstOrFail();
$data = array(
"merchant_id" => env('MERCHENT_ID'),
"authority" => $Authority,
"amount" => $order->price * 10
);
$client = Http::post('https://api.zarinpal.com/pg/v4/payment/verify.json', $data);
if ($client->successful()) {
$response = json_decode($client->body());
if (!empty($response->errors)) {
$order->statusFailed();
return false;
}
if ($response->data->code == 100) {
$order->refid = $response->data->ref_id;
$order->statusSuccess();
$order->save();
return true;
}
$order->statusFailed();
return false;
}
$order->statusFailed();
return false;
}
public function getName(): string
{
return 'zarinpal';
}
}
سلام به شما
من زرین پال کار نکردم اما منطق رو بهتوت توضیح میدم. همه درگاه های پرداخت یک لینک برگشت از شما میگیرن برای تایید پرداخت و یا ثبت اطلاعات در دیتابیس و یا برگشت کاربر به صفحه دانلود محصول و یا ... بستگی به کار سایت شما داره. و اینکه بله، شما باید یک مسیر (Route) جدید بسازید و اون رو داخل فایل env قرار بدید :
"callback_url" => env('ZARINPAL_CALLBACK'),
حالا وقتی که کاربر پرداخت رو انجام میده، یکسری اطلاعات از سایت زرین پال برای این مسیر ارسال میشه و کاربر رو به این مسیر هدایت میکنه، حالا شما اطلاعات رو دریافت میکنید و اونارو داخل دیتابیس ثبت میکنید و به کاربر پیغام مناسبی رو نمایش میدید. داخل مستندات زرین پال نوشته که چه اطلاعاتی به مسیر بازگشتی (CallBack URL) ارسال میشه اما اگه متوجه نشدید میتونید یکبار تست کنید، مثلا یه بار پرداخت رو انجام بدید و داخل تابع verify بگید تمام اطلاعات رو echo یا print کن و یا در جایی ذخیره کن، با اینکارو کامل میتونید بررسی کنید که چه چیز هایی بر میگرده ...
امیدوارم خوب توضیح داده باشم.
اگر باز سوالی داشتید بنده رو مخاطب (@ehsndvr) قرار بدید.
@ehsndvr اقا احساس میشه لطف کنید و بگید دقیق چ کار کنم باید یه روت تعریف کنم و به یک کنترلر متصل کنم و داخل کنترلر چی باشه؟؟
و اینجا داخل callback url که env هست چه چیزی رو باید قرار بدم؟؟
class Zarinpal implements GatewayInterface
{
public function pay(Order $order)
{
$data = array(
"merchant_id" => env('MERCHENT_ID'),
"amount" => $order->price * 10,
"callback_url" => env('ZARINPAL_CALLBACK'),
"description" => "",
"metadata" => ["email" => ""],
);
$client = Http::post('https://api.zarinpal.com/pg/v4/payment/request.json', $data);
if ($client->successful()) {
$response = json_decode($client->body());
if (!empty($response->errors))
return redirect('/');
if ($response->data->code == 100)
{
$order->authority = $response->data->authority;
// $order->gateway = $this->getName();
$order->save();
return redirect("https://www.zarinpal.com/pg/StartPay/{$response->data->authority}");
}
}
return redirect('/');
}
public function verify(Request $request): bool
{
$Authority = $_GET['Authority'];
$order = Order::where('authority', $Authority)->firstOrFail();
$data = array(
"merchant_id" => env('MERCHENT_ID'),
"authority" => $Authority,
"amount" => $order->price * 10
);
$client = Http::post('https://api.zarinpal.com/pg/v4/payment/verify.json', $data);
if ($client->successful()) {
$response = json_decode($client->body());
if (!empty($response->errors)) {
$order->statusFailed();
return false;
}
if ($response->data->code == 100) {
$order->refid = $response->data->ref_id;
$order->statusSuccess();
$order->save();
return true;
}
$order->statusFailed();
return false;
}
$order->statusFailed();
return false;
}
public function getName(): string
{
return 'zarinpal';
}
}
سلام داخل callback اون روتی که سفارش رو تایید می کنه رو باید بذاری
بعدشم برای درگاه زرین پال میتونی از شتابیت استفاده کنی کار خودتو سخت کردی
https://www.zarinpal.com/lab/%D9%BE%DA%A9%DB%8C%D8%AC-%D8%AF%D8%B1%DA%AF%D8%A7%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D8%B2%D8%B1%DB%8C%D9%86-%D9%BE%D8%A7%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84/
https://github.com/shetabit/payment/blob/master/README-FA.md
اصلا نیاز نیست کدش رو خودتون بنویسید، قبلا کدش رو نوشتن ... شما فقط باید از پکیج Zarinpal برای لاراول استفاده کنید.
سلام ، اول اینکه شما کد اضافه ای قرار نیست بنویسی همه چیاز قبل نوشته شده شما فقط جای گذاری میکنی...
داخل فایل کانفیگ لاراول یه فایل اضافه شده به اسمshetabit شما داخل این فایل بگرد دنبال زرین پال و ادرس کال بک رو مشخص کن ، باید یه روت بسازی و ادرسش رو وارد کنی
بعد ک کاربر پرداخت انجام داد از خط ۳۳ تا ۶۶ عملیات verify هست که نوشته شده
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟