بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

درگاه بانک ملت و اندروید آموزش کامل 29 تیر ماه

مدیریت گفتگو
احمد 10 سال پیش
آخرین تغییر: 8 سال پیش

سلام من داخل برنامه یه وب ویو دارم که وصل میشه به درگاه پرداخت هم انجام میشه اما نتونستم تابع اندروید را صدا بزنم که وب ویو بسته بشه یا Toast بده اینم کد: (درگاه پرداخت بانک ملت) 

قسمت html فایل را از پروژه استاد برداشتم

کد فایل php:

 <?php
require_once('nusoap.php');
require_once('config.php');
echo '<link href="style.css" rel="stylesheet">';
class bank_mellat
{
    private  $namespace    
    private  $terminalId   
private $userName private $userPassword public function pay($name,$email,$amount,$tozihat) { global $connect; $client = new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl'); $error = $client->getError(); if($error) { echo 'اتصال به درگاه بانک امکان پذیر نمی باشد لطفا دوباره تلاش کنید'; die(); } $orderId=time(); $parameters = array ( 'terminalId' =>$this->terminalId, 'userName' => $this->userName, 'userPassword' =>$this->userPassword, 'orderId' =>$orderId, 'amount' =>$amount, 'localDate' =>date("Ymd"), 'localTime' =>date("His"), 'additionalData' =>'خرید محصول', 'callBackUrl' =>'http://pay.site.ir/callback.php', 'payerId' => '0' ); $result =$client->call('bpPayRequest', $parameters,$this->namespace); $res = @explode (',',$result); if($res[0]=="0") { $query=$connect->prepare("INSERT INTO `pay` (`pay_amount`,`RefId`,`ResCode`,`OrderId`,`email`,`user_name`,`tozihat`) VALUES (?,?,?,?,?,?,?);"); $query->execute(array($amount,$res[1],'0',$orderId,$email,$name,$tozihat)); echo '<script type="text/javascript">postRefId("'.$res[1].'");</script>'; } else { echo 'اتصال به درگاه بانک امکان پذیر نمی باشد لطفا دوباره تلاش کنید'; die(); } } public function Verify($SaleOrderId,$SaleReferenceId) { global $connect; $client =new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl'); $error = $client->getError(); if($error) { echo '<p style="color:red;padding-top:95px;">اتصال به درگاه بانک امکان پذیر نمی باشد لطفا دوباره تلاش کنید</p>'; echo '<a href="index.php">بازگشت به صفحه اصلی</a>'; die(); } $parameters = array ( 'terminalId' =>$this->terminalId, 'userName' => $this->userName, 'userPassword' => $this->userPassword, 'orderId' => $SaleOrderId, 'saleOrderId' => $SaleOrderId, 'saleReferenceId' => $SaleReferenceId ); $VerifyAnswer = $client->call('bpVerifyRequest', $parameters, $this->namespace); if($VerifyAnswer == '0' || $VerifyAnswer=='43') { $SetlleAnswer= $client->call('bpSettleRequest', $parameters, $this->namespace); $query=$connect->prepare("UPDATE `pay` SET `ResCode` = ? ,`SaleReferenceId` = ? WHERE `pay`.`OrderId` = ?;"); $query->execute(array('1',$SaleReferenceId,$SaleOrderId)); $this->message($SaleOrderId); } else { $this->Inquiry($SaleOrderId,$SaleReferenceId); } } public function Inquiry($SaleOrderId,$SaleReferenceId) { global $connect; $client =new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl'); $parameters = array ( 'terminalId' =>$this->terminalId, 'userName' => $this->userName, 'userPassword' => $this->userPassword, 'orderId' => $SaleOrderId, 'saleOrderId' => $SaleOrderId, 'saleReferenceId' => $SaleReferenceId ); $InquiryAnswer=$client->call('bpInquiryRequest', $parameters,$this->namespace); if($InquiryAnswer=='0') { $SetlleAnswer= $client->call('bpSettleRequest', $parameters, $this->namespace); $query=$connect->prepare("UPDATE `pay` SET `ResCode` = ? ,`SaleReferenceId` = ? WHERE `pay`.`OrderId` = ?;"); $query->execute(array('1',$SaleReferenceId,$SaleOrderId)); $this->message($SaleOrderId); } else { $result=$client->call('bpReversalRequest', $parameters, $this->namespace); echo 'مبلغ واریز شده تا پایان روز جاری به حساب شما برگشت داده خواند شد'; } } public function message($SaleOrderId) { global $connect; $sql=$connect->prepare('SELECT * FROM pay where OrderId=?'); $sql->execute(array($SaleOrderId)); $fetch=$sql->fetch(); ?> <table style="margin:50px auto;"> <tr> <td>واریز کننده : </td> <td style="padding-right:10px;"> <?php echo $fetch['user_name'] ?></td> </tr> <tr style="padding-top:10px;"> <td>شماره تراکنش : </td> <td style="padding-right:10px;"> <?php echo $fetch['OrderId']; ?> </td> </tr> <tr style="padding-top:10px;"> <td>مبلغ واریز : </td> <td style="padding-right:10px;"> <?php echo $fetch['pay_amount'] ?> ریال</td> </tr> </table> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link href="style.css" rel="stylesheet"> <title>test</title> <script> function raiseAlert() { alert("Hello! I am an alert box!"); } </script> </head> <body> <br /> <br /> <span class="button-red" onclick="raiseAlert()">Click Me!</span> <br /> <br /> <span class="button-red" onclick="Helper.sampleMethod('hello from web')">Click Me To Toast!</span> <br /> <br /> <span class="button-red" onclick="Helper.finishCurrentActivity()">Click Me To Close!</span> </body> </html> <?php } }
 

بخش آندروید هم: 

public class ActivityPayment extends ActivityEnhanced {

	WebView webViewpay;

	@SuppressLint({ "NewApi", "JavascriptInterface", "SetJavaScriptEnabled" })
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_payment);

		try {
			HelperUI.persianizer((ViewGroup) getWindow().getDecorView());
			String amount = getIntent().getExtras().getString("amount");
			final String url = "http://pay.site.ir/?amount=1000";
			webViewpay = (WebView) findViewById(R.id.webViewpay);

			WebSettings settings = webViewpay.getSettings();
			settings.setAppCacheEnabled(true);
			settings.setBuiltInZoomControls(true);
			settings.setJavaScriptEnabled(true);
			settings.setDomStorageEnabled(true);
			if (Build.VERSION.SDK_INT >= 21) {
				settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
			}
			webViewpay.setWebViewClient(new MyWebViewClient());
			webViewpay.setWebChromeClient(new WebChromeClient());
			webViewpay.addJavascriptInterface(new SampleJavaScriptInjections(),
					"Helper");
			this.runOnUiThread(new Runnable() {
				@Override
				public void run() {
					webViewpay.loadUrl(url);
				}
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public class SampleJavaScriptInjections {

		public void sampleMethod(String message) {
			Toast.makeText(G.context, message, Toast.LENGTH_SHORT).show();
		}


		public void finishCurrentActivity() {
			finish();
		}
	}
	private class MyWebViewClient extends WebViewClient {

		@Override
		public void onReceivedSslError(WebView view, SslErrorHandler handler,
				SslError error) {
			handler.proceed();
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		try {
			HelperUI.persianizer((ViewGroup) getWindow().getDecorView());
		} catch (Exception e) {
			Log.i(G.APP_LOG, "Error in set font");
		}
	}

}
 

نظرات

احمد 10 سال پیش
کسی نمی دونه خیلی فوریه
کاشی زاده 10 سال پیش
سوالتون واضح نیست ، لطفا در رابطه با سوال بیشتر توضیح بدید .
احمد 10 سال پیش
من می خوام متغییر $code که حاوی کد رهگیری هست را به تابع اندروید پاس بدم من مسال استاد را انجام دادم اما اون با رشته ثابت هست و html اما فایل من php هستش . این تیکه کد را که در بالا نوشتم را داخلش قرار دادم اما مقدار کد به تابع اندروید ارسال نمیشه
احمد 10 سال پیش
می تونم فایل php را براتون ایمیل کنم ببینید من فقط می خوام کد رهگیری به برنامه اندروید برگرده از وب ویو کل پروژه تکمیل فقط نمی دونم چطوری اینو انجام بدم
کاشی زاده 10 سال پیش
اگر دستور PHP رو توی فایل PHP داخل برنامه قرار دادید به طور کلی کار ایراد فنی داره اما اگر فایل php رو سرور هست و کار نمیکنه ، باید خطایابی سمت سرور انجام بشه .
کاشی زاده 10 سال پیش
آیا بعد از فشردن دکمه متدی که در اندروید نوشتید صدا زده میشه ؟
احمد 10 سال پیش
نه تنها مشکل هم همینه فقط کافیه کد رهگیری از php گرفته بشه و toast بشه
کاشی زاده 10 سال پیش
دستور php را بردارید و یکبار با عددی که دستی وارد میکنید تست کنید .
نمیشه به شکل JSON کد رهگیری رو برای اندروید بفرستید؟
احمد 10 سال پیش
چطوری وب ویو را ببندم اون وقت مجبورم از دکمه back استفاده کنم که نمیشه
kamal_hajatmand 10 سال پیش
اگه تونستین حل کنین آموزش و در صورت امکان سورس کد مربوط به همین قسمت رو قرار بدین
mahdiFar77 10 سال پیش
اگه آموزش بزارین که بسیار عالی میشه
PandaStudio 10 سال پیش
نیکی و پرسش :-) ممنون میشیم بذارید
احمد 9 سال پیش
آموزش به زودی به روز میشه :)

پاسخ‌ها 2


این لینک شاید کمکت کنه.

نظرات

احمد 10 سال پیش
حل شد به زودی آموزشش را میزارم
مهدی 10 سال پیش
اگه آموزش بذاری ک خدا خیرت بده
ChookD1 10 سال پیش
آموزش 0 تا 100 ـش رو بزار برامون . دستت درد نکنه
JOBS 10 سال پیش
من خیلی بهش نیاز دارم اگه لطف کنی اموزشش رو بزاری خیلی اقایی کردی
Mohammad Babaei 10 سال پیش
اگه آموزش بزارین واقعا عالی میشه چون تو خیلی پروژه ها لازم میشه برای بسیاری از دوستان
احمد 10 سال پیش

من روی فایل های خودم توضیح میدم شما می تونید تغییر بدین فقط چون من بخش امنیت php را کار نکردم هنوز این بخشش را خیلی دقت کنید و امنش کنید

قسمت php:  روی هاست پوشه ای با نام pay بسازید بعد از اون یک زیر دامنه (subdomain) درست کنید و به این پوشه وصل کنید. مثلا اگر زدیم  pay.mysite.ir فایل index موجود در فولدر pay نمایش داده بشه

اما لیست فایل های این پوشه style.css و nusoap.php و location.php و index.php و config.php و callback.php و bank_mellat.php

فایل index.php: این فایل برای دریافت اطلاعات مشتری هستش که من مبلغ را توسط برنامه اندروید براش میفرستم

 <html>
<head>
    <meta charset="UTF-8">
    <title>درگاه بانک ملت</title>
    <link href="style.css" rel="stylesheet">
</head>
<body>

<div  style="height:400px;width:550px;margin:200px auto;font-size:16px;color:black;background:white;border-radius:5px;">

    <div style="font-family:BYekan;">
        <p style="color:red;padding-top:15px;padding-right:25px;">فرم پرداخت</p>
        <form method="post" action="location.php">
            <table>
                <tr>
                    <td style="font-family:MITRA;padding-right:30px;padding-top:10px;">نام و نام خانوادگی : </td>
                    <td><input type="text"  name="name"  style="width:300px;margin-left:10px;"></td>
                </tr>
                <tr>
                    <td style="font-family:MITRA;padding-right:30px;padding-top:10px;">ایمیل : </td>
                    <td><input type="text"  name="email"  style="width:300px;margin-left:10px;"></td>
                </tr>

                <tr>
                    <td style="font-family:MITRA;padding-right:30px;padding-top:10px;">مبلغ : </td>
                    <td><input type="text"  name="amount" id="amount"  value="<?php echo $_REQUEST['amount']; ?>"style="width:300px;margin-left:10px;"> <span style="font-family:MITRA;">ریال</span></td>
                    
                </tr>

                <tr>
                    <td style="font-family:MITRA;padding-right:30px;padding-top:10px;">توضیحات : </td>
                    <td><textarea name="tozihat" id="tozihat" style="width:370px;resize:none;"></textarea></td>
                </tr>

                <tr>
                    <td colspan="2"><input type="submit" value="پرداخت" style="margin-right:25px;margin-top:18px;"><span id="message"></span></td>
                </tr>
            </table>
        </form>

    </div>

</body>
</html>

پس از کلیک روی دکمه پرداخت به صفحه location.php منتقل میشین که فایل بانک ملت را فراخوانی می کنه برای دریافت یک شناسه منحصر به فرد بانکی برای عملیات پرداخت

 <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Please wait...</title>
<style>
    *
    {
        margin:0px;
        padding:0px;
    }
    body
    {
        direction:rtl;
        background-color:#289edb;
        font-family:MITRA;
    }
    @font-face
    {
        font-family:'MITRA';
        src:url('font/MITRA.ttf') format('truetype');
    }
    .msg
    {
        width: 500px;
        height:200px;
        text-align:center;
        background-color:white;
        margin:150px auto;
        border-radius:5px;
    }
</style>
    <script>
        function postRefId(refIdValue)
        {
            var form = document.createElement("form");
            form.setAttribute("method", "POST");
            form.setAttribute("action", "https://bpm.shaparak.ir/pgwchannel/startpay.mellat");
            form.setAttribute("target", "_self");
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("name", "RefId");
            hiddenField.setAttribute("value", refIdValue);
            form.appendChild(hiddenField);
            document.body.appendChild(form);
            form.submit();
            document.body.removeChild(form);
        }
    </script>
</head>
<body>


<div class="msg">

    <p style="padding-top:80px;font-size:18px;padding-bottom:15px;">در حال انتقال به صفحه پرداخت بانکی ...کمی صبر کنید</p>

    <?php
    require_once('bank_mellat.php');

    $bank_mellat=new bank_mellat();
    $bank_mellat->pay($_POST['name'],$_POST['email'],$_POST['amount'],$_POST['tozihat']);
    ?>

</div>

</body>
</html>

 

ادامه دارد  دانلود فایل ها و دیتابیس

نظرات

AGeNiS1 9 سال پیش
ادامه ندارد؟
احمد 9 سال پیش
تمامی مراحل شما میگریم درست باشند ایا ی بار برای api بالای 17 کامپایل کردید؟ نتیجه چی شد ؟ ممنون
احمد 9 سال پیش
بله تمام نسخه ها جواب میده
hamed 8 سال پیش
لینک دریافت فایل ها متاسفانه کار نمی کنه. لطفا به روزش کنید

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .