Android端 支付宝&微信H5支付调用

匿名 (未验证) 提交于 2019-12-02 23:32:01

一、支付宝H5支付调用

支付宝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支付调用

微信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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!