一、支付宝H5支付调用
代码示例:
step1: //传入支付宝支付所需url,跳转到webview页面 ali_pay.setOnClickListener { val aliUrl = "https://secure.xxxx.xxxxxxx.net/pay/pay/prepayAlipay" startActivity(Intent(this, TestPayActivity::class.java) .putExtra("url", aliUrl)) }
step2:【Webview页面】 @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_test_pay) btn_back.setOnClickListener { finish() } webview.settings.apply { javaScriptEnabled = true layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN allowFileAccess = true domStorageEnabled = true loadsImagesAutomatically = true } webview.webChromeClient = WebChromeClient() var platformapiUrl = "" //记录支付宝startApp的url信息,用以点击“继续支付”时再次唤起 //在webview的webViewClient中做如下配置 webview.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, reloadUrl: String?): Boolean { Log.e(TAG, "reloadUrl======$reloadUrl") //*******************test ali pay************************************************************ /*此处应添加支付宝是否安装的验证,不然跳转会引发崩溃*/ //唤起支付宝app if (reloadUrl.startsWith("alipays://platformapi/startApp")) { platformapiUrl = reloadUrl val intent = Intent(Intent.ACTION_VIEW, Uri.parse(reloadUrl)) startActivity(intent) } //网页上点击了"继续支付" if (reloadUrl.startsWith("https://mclient.alipay.com/h5Continue.htm?")) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(platformapiUrl)) startActivity(intent) } //*******************test ali pay************************************************************ return false } override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) { //处理数字证书,为方便调试设置为全部允许 handler!!.proceed() } } //first load val url = intent.getStringExtra("url") Log.e(TAG, "url======$url") webview.loadUrl(url) }
二、微信H5支付调用
代码示例:
step1: //传入微信支付所需url,跳转到webview页面 wx_pay.setOnClickListener { val wxUrl = "https://secure.xxxx.xxxxxxx.net/pay/pay/prepayWx" startActivity(Intent(this, TestPayActivity::class.java) .putExtra("url", wxUrl)) }
step2:【Webview页面】 @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_test_pay) btn_back.setOnClickListener { finish() } webview.settings.apply { javaScriptEnabled = true layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN allowFileAccess = true domStorageEnabled = true loadsImagesAutomatically = true } webview.webChromeClient = WebChromeClient() var num = 0 //控制wxUrl加载的次数 webview.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, reloadUrl: String?): Boolean { Log.e(TAG, "reloadUrl======$reloadUrl") //*******************test wx pay************************************************************* /*此处应添加微信是否安装的验证*/ //唤起微信app if (reloadUrl!!.startsWith("weixin://wap/pay")) { val intent = Intent(Intent.ACTION_VIEW, Uri.parse(reloadUrl)) startActivity(intent) } //微信支付信息url加上Referer并重新加载获取唤起url if (reloadUrl.startsWith("https://wx.tenpay.com")) { if (("4.4.3" == android.os.Build.VERSION.RELEASE) || ("4.4.4" == android.os.Build.VERSION.RELEASE)) { //兼容这两个版本设置referer无效的问题 if (num < 1) { view!!.loadDataWithBaseURL("http://winsion.net", "<script>window.location.href=\"$reloadUrl\";</script>", "text/html", "utf-8", null) num++ } } else { val extraHeaders = HashMap<String, String>() extraHeaders["Referer"] = "http://winsion.net" if (num < 1) { //second reload view!!.loadUrl(reloadUrl, extraHeaders) Log.e(TAG, "extraHeaders======${extraHeaders.size}") num++ } } } //*******************test wx pay************************************************************* return false } override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) { handler!!.proceed() } } //first load val url = intent.getStringExtra("url") Log.e(TAG, "url======$url") webview.loadUrl(url) }
文章来源: https://blog.csdn.net/qq_32138419/article/details/90205287