一、支付宝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)
}
网友评论