درگاه بانک ملت و اندروید آموزش کامل 29 تیر ماه
سلام من داخل برنامه یه وب ویو دارم که وصل میشه به درگاه پرداخت هم انجام میشه اما نتونستم تابع اندروید را صدا بزنم که وب ویو بسته بشه یا 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"); } } }
من روی فایل های خودم توضیح میدم شما می تونید تغییر بدین فقط چون من بخش امنیت 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>
ادامه دارد دانلود فایل ها و دیتابیس
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .