浏览代码

1.杉德支付走webview

shihuiyun 2 年之前
父节点
当前提交
88a29e35fb

+ 4 - 2
app/src/main/AndroidManifest.xml

@@ -181,8 +181,10 @@
                 <action android:name="android.intent.action.VIEW"/>
                 <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.intent.category.BROWSABLE"/>
-                <data android:scheme="tibetan"
-                    android:host="spay"/>
+                <data android:scheme="xl"
+                    android:host="goods"
+                    android:path="/goodsDetail"
+                    android:port="8888"/>
             </intent-filter>
 
         </activity>

+ 89 - 65
app/src/main/java/com/hdl/xl/activity/TibetanDetailsActivity.kt

@@ -1,5 +1,6 @@
 package com.hdl.xl.activity
 
+import android.content.Intent
 import android.os.Bundle
 import android.os.Handler
 import android.os.Message
@@ -16,9 +17,9 @@ import com.hdl.xl.adapter.ImagesAdapter
 import com.hdl.xl.base.MBActivity
 import com.hdl.xl.config.ConfigRx
 import com.hdl.xl.databinding.ActivityTibetanDetailsBinding
+import com.hdl.xl.model.PayOrder
 import com.hdl.xl.model.User
 import com.hdl.xl.model.bean.PayTypeBen
-import com.hdl.xl.utils.AppUtils
 import com.hdl.xl.utils.MD5Utils
 import com.hdl.xl.utils.PopuPaySuesstils
 import com.hdl.xl.utils.glide.GlideUtils
@@ -60,11 +61,29 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
         screenHeightPixels = UiUtils.getScreenHeightPixels()
         adapter = ImagesAdapter()
         binding.recyclerView.adapter = adapter
-
-
         vm.ll = binding.ll
-        vm.id= intent?.extras?.getString("id")
+
+//        val uri = intent.data
+//        if (uri != null) {
+//            // scheme 协
+//            val scheme = uri.scheme
+//            // 获取所有参数
+//            val query = uri.query
+//            Log.i("-shy-", "query: $query")
+//            //获取指定参数值
+//            val orderNo = uri.getQueryParameter("orderNo") // 支付宝支付完后返回app后 所传的code
+//             vm.id= uri.getQueryParameter("id")
+//            Log.e("-shy-", "orderNo:$orderNo")
+//
+//            vm.getInfoTo()
+//            //获取定单号
+//            vm.getMyOrder(orderNo)
+//
+//        }else {
+        vm.id = intent?.extras?.getString("id")
         vm.getInfoTo()
+
+//        }
         vm.getCertificate()
 
         vm.data.observe(this) {
@@ -73,38 +92,15 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
             adapter?.clearList()
             adapter?.addData(it.describe)
             //设置头 图片
-            GlideUtils.lImg(this, it.cover,  binding.imageView)
+            GlideUtils.lImg(this, it.cover, binding.imageView)
 
-
-        }
-
-        val uri = intent.data
-        if (uri != null) {
-            // scheme 协
-            val scheme = uri.scheme
-            // 获取所有参数
-            val query = uri.query
-            Log.i("-shy-", "query: $query")
-            //获取指定参数值
-            val payCode = uri.getQueryParameter("payCode") // 支付宝支付完后返回app后 所传的code
-            Log.e("-shy-", "payCode:$payCode") //  2为成功
         }
 
         vm.bean.observe(this) {
 
-            var amount = it.pay.body.totalAmount.toFloat() * 0.01
-            var name = User.get()?.true_name
-            var certNo = User.get()?.id_card
-            //创建用户支付订单信息
-            //amount:订单金额
-            //orderNumber:商户订单号
-            //createTime: 订单创建时间
-            //goodsName:商品名称
-            //name:真实姓名
-            //certNo:身份证号 //6888803045944  16938552
-            //"MD5","16938552", "06030001"
-            cashierPay("MD5", "16938552", "06030001", amount.toString(),
-                    it.pay.body.orderCode, it.pay.head.respTime, "象链数购买藏品", name!!, certNo!!)
+            UiSwitch.bundle(context(), WebViewActivity::class.java,
+                    B().putString("url", it.pay_url)
+                            .ok())
 
 
         }
@@ -121,8 +117,8 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
 //
 //        }
 
-        vm.myBean.observe(this){
-            PopuPaySuesstils.show(this,binding.ll,it)
+        vm.myBean.observe(this) {
+            PopuPaySuesstils.show(this, binding.ll, it)
         }
 
 
@@ -155,6 +151,7 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
 
         }
 
+
     }
 
 
@@ -260,12 +257,12 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
                 val it = vm.repository().lreq {
                     NetEngine.service.setCreateOrder(
                             "app", vm.data.value?.id, bean.num,
-                            "sd"
+                            "sd_rapid"
                     )
                 }
 
                 if (it.ok()) {
-                    vm.toPayOrder(it.data?.order_no, "sd")
+                    vm.toPayOrder(it.data?.order_no, "sd_rapid")
 
                 }
 
@@ -314,6 +311,16 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
         finish()
     }
 
+    @Subscribe(tags = [Tag(ConfigRx.PAY_SD_SUESS)])
+    fun setPaySdSuess(orderNo: String) {//杉德支付成功
+       //todo:
+        // vm.getMyOrder(orderNo)
+
+        UiSwitch.single(context(), MyOrderActivity::class.java)
+
+
+    }
+
     override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
         return if (keyCode == KeyEvent.KEYCODE_BACK) {
             if (null != disposable) {
@@ -335,6 +342,20 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
     }
 
 
+    fun toPay(parse_url: String) {
+
+        PayUtil.CashierPayMulti(this, parse_url)
+
+    }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+
+        Log.i("-log-", "requestCode:$requestCode")
+
+    }
+
+
     //"MD5","16938552", "06030001"
     //6888803045944   00000008
     //amount:订单金额
@@ -343,38 +364,43 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
     //goodsName:商品名称
     //name:真实姓名
     //certNo:身份证号
-    private fun cashierPay(
-            signType: String, merNo: String, productCode: String, amount: String,
-            orderNumber: String, createTime: String, goodsName: String, name: String,
-            certNo: String,
-    ) {
+    private fun cashierPay(bean: PayOrder.PayQuery) {
 
 
         val orderJson = JSONObject()
         try {
             orderJson.put("version", BuildConfig.VERSION_NAME)
-            orderJson.put("sign_type", signType)
-            orderJson.put("mer_no", merNo) // 商户编号
-            orderJson.put("mer_key", "Xx52CDtWRH1etGu4IfFEB4OeRrnbr+EUd5VO7cBQFCqxfDl5FJcJaUjKJbHapVsyxSODBEbssNk=") // 商户密钥
-            orderJson.put("mer_order_no", orderNumber) // 商户订单号
-            orderJson.put("create_time", createTime) // 订单创建时间
-            orderJson.put("expire_time", AppUtils.getOrderExpireTime()) // 订单失效时间
-            orderJson.put("order_amt", amount) // 订单金额
-            orderJson.put("notify_url", "http://sandcash/notify") // 回调地址
-            orderJson.put("return_url", "https://www.taobao.com") // 支付完成后跳转到商户页面  一键快捷不能传空
-            orderJson.put("create_ip", "172_12_12_12") // 客户端的真实IP
-            orderJson.put("goods_name", goodsName) // 商品名称
-            orderJson.put("store_id", "100001") // 门店号
-            orderJson.put("product_code", productCode) // 支付产品编码
-            orderJson.put("clear_cycle", "0") // 清算模式
+            orderJson.put("sign_type", bean.sign_type)
+            orderJson.put("mer_no", bean.mer_no) // 商户编号
+            orderJson.put("mer_key", bean.mer_key) // 商户密钥
+            orderJson.put("mer_order_no", bean.mer_order_no) // 商户订单号
+            orderJson.put("create_time", bean.create_time) // 订单创建时间
+            orderJson.put("expire_time", bean.expire_time) // 订单失效时间
+            orderJson.put("order_amt", bean.order_amt) // 订单金额
+            orderJson.put("notify_url", bean.notify_url) // 回调地址
+            orderJson.put("return_url", bean.return_url) // 支付完成后跳转到商户页面  一键快捷不能传空
+            //-
+            orderJson.put("create_ip", bean.create_ip) // 客户端的真实IP
+            //-
+            orderJson.put("goods_name", bean.goods_name) // 商品名称
+            //-
+            orderJson.put("store_id", bean.store_id) // 门店号
+            //-
+            orderJson.put("product_code", bean.product_code) // 支付产品编码
+            //-
+            orderJson.put("clear_cycle", bean.clear_cycle) // 清算模式
+            //-
             val payExtraJson = JSONObject()
 //            if (!TextUtils.isEmpty(cardNo)) {
 //                payExtraJson.put("cardNo", cardNo) //付款卡号
 //            }
             orderJson.put("pay_extra", payExtraJson.toString())
+            //-
 
-            orderJson.put("accsplit_flag", "NO") // 分账标识 NO无分账,YES有分账
-            orderJson.put("jump_scheme", "tibetan://spay") //参数值可以自定义,和android:scheme、android:host保持一致
+            orderJson.put("accsplit_flag", bean.accsplit_flag) // 分账标识 NO无分账,YES有分账
+            //-
+            orderJson.put("jump_scheme", "sandcash://scpay") //参数值可以自定义,和android:scheme、android:host保持一致
+            //-
             orderJson.put("activity_no", "") //营销活动编码
             orderJson.put("benefit_amount", "") //优惠金额
             orderJson.put("extend", "123") //扩展字段,非必传
@@ -383,23 +409,22 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
             val extendParamJson = JSONObject()
             val payerVerificationInfoJson = JSONObject()
             payerVerificationInfoJson.put("needCheckFlag", "0")
-            payerVerificationInfoJson.put("name", name) //姓名
-            payerVerificationInfoJson.put("certNo", certNo) //证件号
+            payerVerificationInfoJson.put("name", User.get()?.name) //姓名
+            //-
+            payerVerificationInfoJson.put("certNo", User.get()?.id_card) //证件号
+            //-
             payerVerificationInfoJson.put("certType", "01")
             extendParamJson.put("payerVerificationInfo", payerVerificationInfoJson.toString())
             orderJson.put("extend_params", extendParamJson.toString()) //支付宝实名信息字段,非必传,不参与签名
             val signKey: String
-            signKey = if ("6888800012098" == merNo) {
-                "PZdBctMl2c0ma9b9+25FBgH2twQBTmhzn/qNSS6xANEGMqBi/S9IhyhDi1aBb1H9gxmcvjxmMk305pcUaISEmjm6gacvTBPHj0zSgRk//7ZYF0Go/X03BZt5mTdcmslgH81l03NMtaRixuz+UKFTiw=="
-            } else {
-                "UZfTHiut04dIJSOqwT2KVn6Bf4OBGBrUvjaUibKc5UFinTz/EY8j/5P1nOAZxsgRJKC6qKPhB7NJAPxc7RyrM8BDgM+UhiKrzR/MvvQhFMgTDfQFoDZYEYW2z+pi4zany5c0bz6FNidixuz+UKFTiw=="
-            }
+            signKey = bean.mer_key
+            orderJson.put("sign", bean.sign)
 
             //计算签名
             val signMap: MutableMap<String, String> = HashMap()
             signMap["version"] = orderJson.getString("version")
             signMap["mer_no"] = orderJson.getString("mer_no")
-            if ("MD5" == signType) {
+            if ("MD5" == bean.sign_type) {
                 signMap["mer_key"] = orderJson.getString("mer_key")
             }
             signMap["mer_order_no"] = orderJson.getString("mer_order_no")
@@ -466,7 +491,6 @@ class TibetanDetailsActivity : MBActivity<TibetanDetailsVModel, ActivityTibetanD
 
         PayUtil.CashierPaySingle(this@TibetanDetailsActivity, orderJson.toString(), object : OnPayResultListener {
             override fun onSuccess(orderInfo: OrderInfo) {
-                //支付宝、H5快捷、一键快捷、快捷充值、云账户,支付完成不走这里!
                 Toast.makeText(this@TibetanDetailsActivity, "支付成功", Toast.LENGTH_LONG).show()
 
             }

+ 41 - 3
app/src/main/java/com/hdl/xl/activity/WebViewActivity.kt

@@ -1,10 +1,15 @@
 package com.hdl.xl.activity
 
 import android.os.Bundle
+import android.util.Log
 import android.webkit.WebView
 import com.qmuiteam.qmui.widget.webview.QMUIWebViewClient
 import com.hdl.xl.base.MBActivity
+import com.hdl.xl.config.ConfigRx
 import com.hdl.xl.databinding.ActivityWebviewBinding
+import com.hwangjr.rxbus.RxBus
+import com.hwangjr.rxbus.annotation.Subscribe
+import com.hwangjr.rxbus.annotation.Tag
 import com.ysnows.base.base.BRepository
 import com.ysnows.base.base.BViewModel
 
@@ -17,8 +22,16 @@ open class WebViewActivity : MBActivity<BViewModel<BRepository>, ActivityWebview
         val settings = binding.webView.settings
         settings.javaScriptEnabled = true
 
+        var url = intent.extras?.getString("url")
 
-        intent?.extras?.getString("url", "http://www.baidu.com")?.let { binding.webView.loadUrl(it) }
+        intent?.extras?.getString("url", url)?.let { binding.webView.loadUrl(it) }
+
+
+        // intent?.extras?.getString("url", "http://www.baidu.com")?.let { binding.webView.loadUrl(it) }
+    }
+
+    override fun listeners() {
+        super.listeners()
     }
 
     override fun binding(): ActivityWebviewBinding {
@@ -30,13 +43,38 @@ open class WebViewActivity : MBActivity<BViewModel<BRepository>, ActivityWebview
         super.onDestroy()
     }
 
+    override val isRxbus: Boolean
+        get() = true
+
+    @Subscribe(tags = [Tag(ConfigRx.PAY_SD_SUESS)])
+    fun setPaySdSuess(type: String) {
+
+        finish()
+
+    }
 
-    private class MyWebViewClient : QMUIWebViewClient(true, false) {
+
+    class MyWebViewClient : QMUIWebViewClient(true, false) {
 
         override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
+
+            Log.e("-shy-", "url=: " + url)
+
+            if (url!!.contains("xl://goods:8888/goodsDetail")) {
+                //发送消息--关闭
+                var ss = url!!.split("&")
+                var s1 = ss[1].split("=")
+
+                RxBus.get().post(ConfigRx.PAY_SD_SUESS, s1[1])
+
+
+                return false
+            }
+
+            return true
 //            if (Uri.parse(url).host == "www.example.com") {
             // This is my web site, so do not override; let my WebView load the page
-            return false
+            //           return false
 //            }
             // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
 //            Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {

+ 1 - 0
app/src/main/java/com/hdl/xl/config/ConfigRx.kt

@@ -49,6 +49,7 @@ object ConfigRx {
     const val REFRESH_ZHOU = "REFRESH_ZHOU" //转售
 
 
+    const val PAY_SD_SUESS = "PAY_SD_SUESS" //杉德支付成功
 
 
 

+ 16 - 13
app/src/main/java/com/hdl/xl/fragment/OrderListFragment.kt

@@ -5,12 +5,19 @@ import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.ViewGroup
+import com.hdl.xl.activity.MyOrderActivity
+import com.hdl.xl.activity.WebViewActivity
 import com.hdl.xl.adapter.OrderListFragmentAdapter
 import com.hdl.xl.base.MBRFragment
+import com.hdl.xl.config.ConfigRx
 import com.hdl.xl.config.MIntentAction
 import com.hdl.xl.databinding.FragmentOrderListBinding
 import com.hdl.xl.model.User
 import com.hdl.xl.vmodel.OrderListFragmentVModel
+import com.hwangjr.rxbus.annotation.Subscribe
+import com.hwangjr.rxbus.annotation.Tag
+import com.ysnows.base.utils.B
+import com.ysnows.base.utils.UiSwitch
 
 /**
  *
@@ -39,19 +46,9 @@ class OrderListFragment : MBRFragment<OrderListFragmentVModel, OrderListFragment
 
         vm.bean.observe(this) {
 
-            var amount = it.pay.body.totalAmount.toFloat() * 0.01
-            var name = User.get()?.true_name
-            var certNo = User.get()?.id_card
-            //创建用户支付订单信息
-            //amount:订单金额
-            //orderNumber:商户订单号
-            //createTime: 订单创建时间
-            //goodsName:商品名称
-            //name:真实姓名
-            //certNo:身份证号 //6888803045944  16938552
-//            cashierPay("MD5", "16938552", "06030001", amount.toString(),
-//                    it.pay.body.orderCode, it.pay.head.respTime, "象链数购买藏品", name!!, certNo!!)
-
+            UiSwitch.bundle(context(), WebViewActivity::class.java,
+                    B().putString("url", it.pay_url)
+                            .ok())
 
         }
     }
@@ -86,6 +83,12 @@ class OrderListFragment : MBRFragment<OrderListFragmentVModel, OrderListFragment
     override val isRxbus: Boolean
         get() = true
 
+    @Subscribe(tags = [Tag(ConfigRx.PAY_SD_SUESS)])
+    fun setPaySdSuess(orderNo: String) {//杉德支付成功
+        //todo:
+        onRefresh()
+    }
+
 
 //    @Subscribe(tags = [Tag(ConfigRx.ORDER_SEARCH)])
 //    fun setOrderSearch(k: String) {

+ 16 - 1
app/src/main/java/com/hdl/xl/model/PayOrder.kt

@@ -5,7 +5,22 @@ import com.ysnows.base.inter.IModel
 /**
  *on 2022/7/31
  */
-data class PayOrder(var order_no:String,var extend:String,var pay:Pay):IModel {
+data class PayOrder(var order_no:String,var extend:String,var pay:Pay,
+                    val parse_url:String,var pay_url:String,
+                    val pay_query:PayQuery,
+
+      ):IModel {
+
+    data class PayQuery(var version:String,var mer_no:String,var mer_key:String,
+                        var mer_order_no:String,var create_time:String,var order_amt:String,
+                        var create_ip:String, var notify_url:String, var return_url:String,
+                        var accsplit_flag:String,var sign_type:String,var store_id:String,
+                        var expire_time:String,var goods_name:String,var product_code:String,
+                        var clear_cycle:String,var jump_scheme:String,var meta_option:String,
+                        var sign:String,
+                        ):IModel{
+
+    }
     data class Pay(var head:Head,var body:Body):IModel{
         data class Head(var respTime:String,var respMsg:String,
                         var version:String,var respCode:String

+ 2 - 2
app/src/main/java/com/hdl/xl/vmodel/OrderListFragmentVModel.kt

@@ -120,10 +120,10 @@ class OrderListFragmentVModel(application: Application) : BRViewModel<BRReposito
             return
 
         }
-        if (pay_type.equals("sd")) {//快捷支付
+        if (pay_type.equals("sd")||pay_type.equals("sd_rapid")) {//快捷支付
 
             viewModelScope.launch {
-                var it = repository().lreq { NetEngine.service.payOrder(order_no, pay_type) }
+                var it = repository().lreq { NetEngine.service.payOrder(order_no, "sd_rapid") }
 
                 if (it.ok(true)) {
                     position_sd = position

+ 1 - 1
app/src/main/java/com/hdl/xl/vmodel/TibetanDetailsVModel.kt

@@ -150,7 +150,7 @@ class TibetanDetailsVModel(application: Application) : BViewModel<BRepository>(a
             }
             if(it.ok(true)){
                 popuBuyUtils?.setDisMiss()
-                if("sd" == from) {//杉德支付
+                if("sd_rapid" == from) {//杉德支付
                     bean.value = it.data
 
                 }else{

+ 1 - 2
app/src/main/res/layout/activity_webview.xml

@@ -14,9 +14,8 @@
             android:id="@+id/web_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginTop="@dimen/dp_50"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
     </androidx.constraintlayout.widget.ConstraintLayout >
-</layout >
+</layout >