مریم مقبولی 66 ارسال شده در تیر 94 گزارش بازنشر ارسال شده در تیر 94 (ویرایش شده) با سلاممن دارم درگاه پرداخت افزونه ای رو که پی پال هستش رو به پی لاین تبدیل میکنم و چند تا مشکل دارم (افزونه وردپرس نیست)تمامی موارد ارسال به درگاه و انجام تراکنش رو تونستم پیاده کنم مشکل من بعد انجام تراکنش که به سایت مبدا برمیگیرده هستشدو مشکل دارم1. پی لاین دو متغیر رو به با متد پست برگشت میزنه حالا نمیدونم این دو متغیر رو کجای این فایل قرار بدم$trans_id = $_POST['trans_id'];$id_get = $_POST['id_get'];2. متغیر های برگشتی پی پال چیه که با اونا جایگزین کنم؟class Payment_gateway_ext_paypalController extends Controller{ // the extension instance public $extension; /** * Process the IPN */ public function actionIpn() { if (!Yii::app()->request->isPostRequest) { $this->redirect(array('price_plans/index')); } $postData = Yii::app()->params['POST']; if (!$postData->itemAt('custom')) { Yii::app()->end(); } $transaction = PricePlanOrderTransaction::model()->findByAttributes(array( 'payment_gateway_transaction_id' => $postData->itemAt('custom'), 'status' => PricePlanOrderTransaction::STATUS_PENDING_RETRY, )); if (empty($transaction)) { Yii::app()->end(); } $newTransaction = clone $transaction; $newTransaction->transaction_id = null; $newTransaction->transaction_uid = null; $newTransaction->isNewRecord = true; $newTransaction->date_added = new CDbExpression('NOW()'); $newTransaction->status = PricePlanOrderTransaction::STATUS_FAILED; $newTransaction->payment_gateway_response = print_r($postData->toArray(), true); $newTransaction->payment_gateway_transaction_id = $postData->itemAt('txn_id'); $model = $this->extension->getExtModel(); $postData->add('cmd', '_notify-validate'); $request = AppInitHelper::simpleCurlPost($model->getModeUrl(), $postData->toArray()); if ($request['status'] != 'success') { $newTransaction->save(false); Yii::app()->end(); } $paymentStatus = strtolower(trim($postData->itemAt('payment_status'))); $paymentPending = strpos($paymentStatus, 'pending') === 0; $paymentFailed = strpos($paymentStatus, 'failed') === 0; $paymentSuccess = strpos($paymentStatus, 'completed') === 0; $verified = strpos(strtolower(trim($request['message'])), 'verified') === 0; $sameEmail = $postData->itemAt('receiver_email') == $model->email; $order = $transaction->order; if ($order->status == PricePlanOrder::STATUS_COMPLETE) { $newTransaction->save(false); Yii::app()->end(); } if (!$verified || !$sameEmail || $paymentFailed) { $order->status = PricePlanOrder::STATUS_FAILED; $order->save(false); $transaction->status = PricePlanOrderTransaction::STATUS_FAILED; $transaction->save(false); $newTransaction->save(false); Yii::app()->end(); } if ($paymentPending) { $newTransaction->status = PricePlanOrderTransaction::STATUS_PENDING_RETRY; $newTransaction->save(false); Yii::app()->end(); } $order->status = PricePlanOrder::STATUS_COMPLETE; $order->save(false); $transaction->status = PricePlanOrderTransaction::STATUS_SUCCESS; $transaction->save(false); $newTransaction->status = PricePlanOrderTransaction::STATUS_SUCCESS; $newTransaction->save(false); Yii::app()->end(); }} ویرایش شده تیر 94 توسط مریم مقبولی 1 نقل قول لینک به ارسال
HANNANStd 395 ارسال شده در تیر 94 گزارش بازنشر ارسال شده در تیر 94 دوست عزیز شما کوئری custom پی پال رو با چه متغیری جایگزین کردید و به بانک فرستادید ؟چون یکی از قسمت های اصلی کد برگشت شما مربوط به کد زیره : $transaction = PricePlanOrderTransaction::model()->findByAttributes(array( 'payment_gateway_transaction_id' => $postData->itemAt('custom'), 'status' => PricePlanOrderTransaction::STATUS_PENDING_RETRY, ));یعنی وقتی از بانک بر میگرده میخواد اول تراکنش مربوطه که وضعیتش pending هست رو از روی $_POST['custom'] پیدا کنه و بعدش بیاد از روی وضعیت پی لاین تراکنش رو یا رد کنه یا تایید کنه ... فایل ارسال به بانک رو هم بذارید . 2 نقل قول لینک به ارسال
مریم مقبولی 66 ارسال شده در تیر 94 مالک گزارش بازنشر ارسال شده در تیر 94 ببخشید من اصلا از php سر در نمیارمفایل ارسال به بانک<?php defined('MW_PATH') || exit('No direct script access allowed');// PAYLINE SENDERfunction send($url,$api,$amount,$redirect){$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_POSTFIELDS,"api=$api&amount=$amount&redirect=$redirect");curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$res = curl_exec($ch);curl_close($ch);return $res;}function get($url,$api,$trans_id,$id_get){$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_POSTFIELDS,"api=$api&id_get=$id_get&trans_id=$trans_id");curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$res = curl_exec($ch);curl_close($ch);return $res;}//PAYLINE SEND$url = 'http://payline.ir/payment/gateway-send';$api = 'adxcv-zzadq-polkjsad-opp13opoz-1sdf455aadzmck1244567';$amount = round($order->total, 2);$redirect = $notifyUrl;$result = send($url,$api,$amount,$notifyUrl);switch($result){case '-1':echo 'ERROR';break;case '-2':echo 'ERROR';break;case '-3':echo 'ERROR';break;case '-4':echo 'ERROR';break;}?><form id="paypal-hidden-form" action="http://payline.ir/payment/gateway-<?php echo $result; ?>" data-order="/script/panel/customer/index.php/price-plans/order" method="post"><?phpecho CHtml::hiddenField('payline-api', 'adxcv');echo CHtml::hiddenField('cmd', '_xclick');echo CHtml::hiddenField('item_name', Yii::t('price_plans', 'Price plan').': '. $order->plan->name);echo CHtml::hiddenField('item_number', $order->plan->uid);echo CHtml::hiddenField('amount', round($order->total, 2));echo CHtml::hiddenField('currency_code', $order->currency->code);echo CHtml::hiddenField('no_shipping', 1);echo CHtml::hiddenField('cancel_return', $cancelUrl);echo CHtml::hiddenField('return', $returnUrl);echo CHtml::hiddenField('notify_url', $notifyUrl);echo CHtml::hiddenField('custom', $customVars);?><p class="text-muted well well-sm no-shadow" style="margin-top: 10px;"> Paypal - www.paypal.com <br /> <?php echo Yii::t('ext_payment_gateway_paypal', 'You will be redirected to pay securely on paypal.com official website!');?></p><p><button class="btn btn-success pull-right"><i class="fa fa-credit-card"></i> <?php echo Yii::t('price_plans', 'Submit payment')?></button></p><?php echo CHtml::endForm(); ?>فایل کامل افزونه 1 نقل قول لینک به ارسال
HANNANStd 395 ارسال شده در تیر 94 گزارش بازنشر ارسال شده در تیر 94 فایل کامل افزونهکل اسکریپت همینه ؟ 2 نقل قول لینک به ارسال
مریم مقبولی 66 ارسال شده در تیر 94 مالک گزارش بازنشر ارسال شده در تیر 94 کل اسکریپت همینه ؟نه این افزونه اون اسکریپته 1 نقل قول لینک به ارسال
HANNANStd 395 ارسال شده در تیر 94 گزارش بازنشر ارسال شده در تیر 94 (ویرایش شده) ببینید اینکه php بلد نیستید یکم لقمه بزرگی برداشتید چون برای کار با این اسکریپت با فریمورک یی نوشته شده باید با معماری MVC هم آشنایی داشته باشید .... خب منم که فرصت نمیکنم از شما اسکریپتشو بگیرم و نصبش کنم ولی راهنماییتون میکنم یکم تلاش کنید راحت به نتیجه میرسید ....اول از همه شما باید متغیر هایی که تو برگشت از بانک لازم دارید رو به سمت بانک بفرستید و در برگشت از بانک ازش پس بگیرید ... پس به صورت زیر کوئری میکنیم . ( باید جایگزین متغیر redirect تو فایل ارسال به بانک کنید)//باید متغیر های مورد نظر در برگشت رو به صورت کوئری بفرستید و بعدش هم پس بگیرید .$redirect = $notifyUrl.'?custom='.$customVars.'&price='.$amount;//یا میتونید سشن کنید که کوئری بهتره به نظرمالان ما 2 متغیر custom و قیمت رو میفرستیم برای بازگشت از بانک ...خب کد زیر هم با فرض اینکه اون کدی که گذاشته بودید توی پست اول واقعا کد های بررسی برگشت باشه و اشتباه نکرده باشید باید به صورت زیر استفاده کنید :<?phpclass Payment_gateway_ext_paypalController extends Controller{ // the extension instance public $extension; /** * Process the IPN */ public function actionIpn() { if (!Yii::app()->request->isPostRequest) { $this->redirect(array('price_plans/index')); } $postData = Yii::app()->params['POST']; /*if (!$postData->itemAt('custom')) { Yii::app()->end(); }*/// بررسی وضعیت تراکنش توسط پی لاین$apiID = ''; //api پی لاین$Amount = $_GET['price'];$url = 'http://payline.ir/payment/gateway-result-second';$id_get = isset($_POST['id_get']) ? $_POST['id_get'] : $postData->itemAt('id_get');$trans_id = isset($_POST['trans_id']) ? $_POST['trans_id'] : $postData->itemAt('trans_id');$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POSTFIELDS, "api=$apiID&id_get=$id_get&trans_id=$trans_id");curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);$res = curl_exec($ch);curl_close($ch);if ($res == 1) { // تراکنش موفق است $stat = 'completed'; $transaction_id = $trans_id; $fault = 0;}else if ( $res == -1 || $res == -2 || $res == -3 ) { // تراکنش ناموفق است $stat = 'failed'; $transaction_id = $trans_id; $fault = $res;}else { // تراکنش انصرافی کاربر است $stat = 'cancelled'; $transaction_id = $trans_id; $fault = 0;}// اتمام بررسی وضعیت پی لاین// فراخونی کوئری custom$custom = $_GET['custom'];//پیدا کردن تراکنش از روی custom $transaction = PricePlanOrderTransaction::model()->findByAttributes(array( 'payment_gateway_transaction_id' => $custom, 'status' => PricePlanOrderTransaction::STATUS_PENDING_RETRY, )); if (empty($transaction)) { Yii::app()->end(); } $newTransaction = clone $transaction; $newTransaction->transaction_id = null; $newTransaction->transaction_uid = null; $newTransaction->isNewRecord = true; $newTransaction->date_added = new CDbExpression('NOW()'); $newTransaction->status = PricePlanOrderTransaction::STATUS_FAILED; $newTransaction->payment_gateway_response = print_r($postData->toArray(), true); // $newTransaction->payment_gateway_transaction_id = $postData->itemAt('txn_id'); $newTransaction->payment_gateway_transaction_id = $transaction_id; $model = $this->extension->getExtModel(); $postData->add('cmd', '_notify-validate'); $request = AppInitHelper::simpleCurlPost($model->getModeUrl(), $postData->toArray());/* if ($request['status'] != 'success') { $newTransaction->save(false); Yii::app()->end(); }*/ // $paymentStatus = strtolower(trim($postData->itemAt('payment_status'))); // $paymentPending = strpos($paymentStatus, 'pending') === 0; // $paymentFailed = strpos($paymentStatus, 'failed') === 0; // $paymentSuccess = strpos($paymentStatus, 'completed') === 0; // $verified = strpos(strtolower(trim($request['message'])), 'verified') === 0; // $sameEmail = $postData->itemAt('receiver_email') == $model->email; $order = $transaction->order; // اگر تراکنش از قبل تکمیل شده بود که هیچی بیخیال ولی ..... if ($order->status == PricePlanOrder::STATUS_COMPLETE) { $newTransaction->save(false); Yii::app()->end(); } // if (!$verified || !$sameEmail || $paymentFailed) { // اگر وضعیت پی لاین ناموفق بود ... وضعیت ناموفق رو ثبت کن if ( $stat == 'failed') { $order->status = PricePlanOrder::STATUS_FAILED; $order->save(false); $transaction->status = PricePlanOrderTransaction::STATUS_FAILED; $transaction->save(false); $newTransaction->save(false); Yii::app()->end(); } // if ($paymentPending) { // اگر وضعیت پی لاین کنسل شده بود همونطوری تو وضعیت پندینگ بمونه if ( $stat == 'cancelled') { $newTransaction->status = PricePlanOrderTransaction::STATUS_PENDING_RETRY; $newTransaction->save(false); Yii::app()->end(); }/// اگر هیچ کدوم از وضعیت های بالا نبود پس موفق بوده ... موفق بودنش رو ثبت کن .. $order->status = PricePlanOrder::STATUS_COMPLETE; $order->save(false); $transaction->status = PricePlanOrderTransaction::STATUS_SUCCESS; $transaction->save(false); $newTransaction->status = PricePlanOrderTransaction::STATUS_SUCCESS; $newTransaction->save(false); Yii::app()->end(); }}سعی کردم قسمت های مختلفشو توضیح بدم روی کد که راحت تر به نتیجه برسید ..موفق باشید . ویرایش شده تیر 94 توسط HANNANStd 2 نقل قول لینک به ارسال
مریم مقبولی 66 ارسال شده در تیر 94 مالک گزارش بازنشر ارسال شده در تیر 94 (ویرایش شده) سعی کردم قسمت های مختلفشو توضیح بدم روی کد که راحت تر به نتیجه برسید ..موفق باشید .ممنون دوست عزیزخیلی کمکم کرد بالاخره یه چیزی پیاده میکنم.فرم هنگام ارسال به بانک input هیدن هایی نیز فراخوانی میکند فک کنم باید از طریق آنان کوئری رو ست کنم<form id="paypal-hidden-form" action="http://payline.ir/payment/gateway--4" data-order="/script/panel/customer/index.php/price-plans/order" method="post"><input type="hidden" value="adxcv" name="payline-api" id="payline-api"><input type="hidden" value="_xclick" name="cmd" id="cmd"><input type="hidden" value="Price plan: نام" name="item_name" id="item_name"><input type="hidden" value="yh75689k414df" name="item_number" id="item_number"><input type="hidden" value="1000" name="amount" id="amount"><input type="hidden" value="IRT" name="currency_code" id="currency_code"><input type="hidden" value="1" name="no_shipping" id="no_shipping"><input type="hidden" value="customer/index.php/price-plans/index" name="cancel_return" id="cancel_return"><input type="hidden" value="customer/index.php/price-plans/index" name="return" id="return"><input type="hidden" value="customer/index.php/payment-gateways/paypal/ipn" name="notify_url" id="notify_url"><input type="hidden" value="3a4a1dc0387912e08df0b0d86d2b4e2374179ee4" name="custom" id="custom"><p class="text-muted well well-sm no-shadow" style="margin-top: 10px;">Paypal - www.paypal.com <br>You will be redirected to pay securely on paypal.com official website!</p><p><button class="btn btn-success pull-right"><i class="fa fa-credit-card"></i> Submit payment</button></p></form> ویرایش شده تیر 94 توسط مریم مقبولی 1 نقل قول لینک به ارسال
مریم مقبولی 66 ارسال شده در تیر 94 مالک گزارش بازنشر ارسال شده در تیر 94 سعی کردم قسمت های مختلفشو توضیح بدم روی کد که راحت تر به نتیجه برسید ..موفق باشید .ببخشید باز یه مشکل پیش اومدبعد از اینکه بانک به سایت مبدا برگشت میزنه لینک اینجوری میشهcustomer/index.php/payment-gateways/paypal/ipn?custom=557b5434f287b641858bf21ac0c578bd10b501ebprice نمیدونم چرا نیومد تو آدرس. درحالی که متغییر rediect رو اینجوری تنظیم کرده بودم.//PAYLINE SEND$url = 'http://payline.ir/payment/gateway-send';$api = 'f707e-1f2a4-f3ba5-6102d-bc302c72af8f3e52a87c31e83336';$amount = round($order->total, 2);$redirect = $notifyUrl.'?custom='.$customVars.'&price='.$amount;echo $redirect;$result = send($url,$api,$amount,$redirect);حالا price رو بیخیال من تو فایل برگشت که برام ست کردید به طور دستی price رو تنظیم کردمولی صفحه سفید میادخواستم ببینم تو اطلاعات مشکلی هست یا نه متغییر های زیر رو echo کردمecho $res;$custom = $_GET['custom'];echo $custom;echo $stat;و اینا چاپ میشه1557b5434f287b641858bf21ac0c578bd10b501ebcompletedپس میشه نتیجه گرفت مشکل از ثبت توی سیستم هستبسیاری از کد هارو خودتون تو // قرار دادید؟ کاربردی ندارن اونا؟ 1 نقل قول لینک به ارسال
مریم مقبولی 66 ارسال شده در تیر 94 مالک گزارش بازنشر ارسال شده در تیر 94 فک کنم این فایل هم نسبت در ثبت بی ربط نیستممنون میشم بهش یه نگاه بندازید.class PaypalPaymentHandler extends PaymentHandlerAbstract{ // render the payment form public function renderPaymentView() { $order = $this->controller->getData('order'); $model = $this->extension->getExtModel(); $cancelUrl = Yii::app()->createAbsoluteUrl('price_plans/index'); $returnUrl = Yii::app()->createAbsoluteUrl('price_plans/index'); $notifyUrl = Yii::app()->createAbsoluteUrl('payment_gateway_ext_paypal/ipn'); $assetsUrl = Yii::app()->assetManager->publish(Yii::getPathOfAlias($this->extension->getPathAlias()) . '/assets/customer', false, -1, MW_DEBUG); Yii::app()->clientScript->registerScriptFile($assetsUrl . '/js/payment-form.js'); $customVars = sha1(StringHelper::uniqid()); $view = $this->extension->getPathAlias() . '.customer.views.payment-form'; $this->controller->renderPartial($view, compact('model', 'order', 'cancelUrl', 'returnUrl', 'notifyUrl', 'customVars')); } // mark the order as pending retry public function processOrder() { $request = Yii::app()->request; if (strlen($request->getPost('custom')) != 40) { return false; } $transaction = $this->controller->getData('transaction'); $order = $this->controller->getData('order'); $order->status = PricePlanOrder::STATUS_PENDING; $order->save(false); $transaction->payment_gateway_name = 'Paypal - www.paypal.com'; $transaction->payment_gateway_transaction_id = $request->getPost('custom'); $transaction->status = PricePlanOrderTransaction::STATUS_PENDING_RETRY; $transaction->save(false); $message = Yii::t('payment_gateway_ext_paypal', 'Your order is in "{status}" status, it usually takes a few minutes to be processed and if everything is fine, your pricing plan will become active!', array( '{status}' => Yii::t('orders', $order->status), )); if ($request->isAjaxRequest) { return $this->controller->renderJson(array( 'result' => 'success', 'message' => $message, )); } Yii::app()->notify->addInfo($message); $this->controller->redirect(array('price_plans/index')); }} 1 نقل قول لینک به ارسال
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .