diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin index 1d05c8a..d906c06 100644 Binary files a/.gradle/8.13/executionHistory/executionHistory.bin and b/.gradle/8.13/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.13/executionHistory/executionHistory.lock b/.gradle/8.13/executionHistory/executionHistory.lock index a7ed870..075663f 100644 Binary files a/.gradle/8.13/executionHistory/executionHistory.lock and b/.gradle/8.13/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.13/fileHashes/fileHashes.bin b/.gradle/8.13/fileHashes/fileHashes.bin index 6c98b6e..ed70413 100644 Binary files a/.gradle/8.13/fileHashes/fileHashes.bin and b/.gradle/8.13/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.13/fileHashes/fileHashes.lock b/.gradle/8.13/fileHashes/fileHashes.lock index b970a1d..33114e1 100644 Binary files a/.gradle/8.13/fileHashes/fileHashes.lock and b/.gradle/8.13/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.13/fileHashes/resourceHashesCache.bin b/.gradle/8.13/fileHashes/resourceHashesCache.bin index e951736..791c0c0 100644 Binary files a/.gradle/8.13/fileHashes/resourceHashesCache.bin and b/.gradle/8.13/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 1a76699..4bb5f6d 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 484309e..5ce365f 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/.idea/caches/deviceStreaming.xml b/.idea/caches/deviceStreaming.xml deleted file mode 100644 index 4d3d6d9..0000000 --- a/.idea/caches/deviceStreaming.xml +++ /dev/null @@ -1,2289 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 09ff73e..0ae6b8b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -67,6 +67,12 @@ android:launchMode="singleTask" android:taskAffinity="com.ck.ckcollar.app" android:theme="@android:style/Theme.Translucent.NoTitleBar"> + diff --git a/app/src/main/java/com/ck/ckcollar/app/model/MemberModel.kt b/app/src/main/java/com/ck/ckcollar/app/model/MemberModel.kt index 87d06dc..dbf99a9 100644 --- a/app/src/main/java/com/ck/ckcollar/app/model/MemberModel.kt +++ b/app/src/main/java/com/ck/ckcollar/app/model/MemberModel.kt @@ -10,6 +10,14 @@ class MemberModel { var amount: Double = 0.0 // 金额 var payType: String? = "" // 支付方式 var orderNo: String? = "" // 订单编号 + var timeStamp: String? = null // 微信支付时间戳 + var packageVal: String? = null // 微信支付扩展字段 + var paySign: String? = null // 微信支付签名 + var appId: String? = null // 微信 AppID + var partnerId: String? = null // 微信支付商户号 + var prepayId: String? = null // 微信预支付订单号 + var signType: String? = null // 签名类型 + var nonceStr: String? = null // 随机字符串 var order: MemberOrder? = null // 订单信息 class MemberOrder { @@ -33,4 +41,4 @@ class MemberModel { var updateTime: String? = "" // 更新时间 var userId: Int = 0 // 用户ID } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/model/PayOrderModel.kt b/app/src/main/java/com/ck/ckcollar/app/model/PayOrderModel.kt index 5f40db5..c296cc6 100644 --- a/app/src/main/java/com/ck/ckcollar/app/model/PayOrderModel.kt +++ b/app/src/main/java/com/ck/ckcollar/app/model/PayOrderModel.kt @@ -4,5 +4,13 @@ class PayOrderModel : CkBaseModel(){ var orderStr: String? = "" // 订单字符串 var amount: String? = "" // 金额 var orderNo: String? = "" // 订单编号 + var timeStamp: String? = null // 微信支付时间戳 + var packageVal: String? = null // 微信支付扩展字段 + var paySign: String? = null // 微信支付签名 + var appId: String? = null // 微信 AppID + var partnerId: String? = null // 微信支付商户号 + var prepayId: String? = null // 微信预支付订单号 + var signType: String? = null // 签名类型 + var nonceStr: String? = null // 随机字符串 var info : String? = "" -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/model/RechargeModel.kt b/app/src/main/java/com/ck/ckcollar/app/model/RechargeModel.kt index 5ef16e9..d6575b4 100644 --- a/app/src/main/java/com/ck/ckcollar/app/model/RechargeModel.kt +++ b/app/src/main/java/com/ck/ckcollar/app/model/RechargeModel.kt @@ -1,7 +1,22 @@ package com.ck.ckcollar.app.model class RechargeModel { - var orderStr :String? = null - var amount : Double? = null + // Alipay + var orderStr: String? = null + + // Common + var amount: Double? = null + var orderNo: String? = null + + // WeChat Pay + var timeStamp: String? = null + var packageVal: String? = null + var paySign: String? = null + var appId: String? = null + var partnerId: String? = null + var prepayId: String? = null + var signType: String? = null + var nonceStr: String? = null + var RC1782974779440000002 : String? = null -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/RechargeActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/RechargeActivity.kt index f18651a..44c5291 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/RechargeActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/RechargeActivity.kt @@ -6,6 +6,7 @@ import android.text.TextUtils import com.alipay.sdk.app.EnvUtils import com.alipay.sdk.app.PayTask import com.ck.ckcollar.app.R +import com.ck.ckcollar.app.utils.Const import com.ck.ckcollar.app.databinding.ActivityRechargeBinding import com.ck.ckcollar.app.model.PayResult import com.ck.ckcollar.app.model.RechargeModel @@ -16,7 +17,10 @@ import com.ck.ckcollar.app.utils.networkone.model.TTRequestData import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam import com.ck.ckcollar.app.widget.CKEditView import com.google.gson.Gson +import com.tencent.mm.opensdk.modelpay.PayReq +import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.tt.kit.model.DataCollection +import com.tt.kit.utils.LiveDataBus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -37,6 +41,17 @@ class RechargeActivity : CKBaseActivity() { override fun initView() { + LiveDataBus.get().with(WX_PAY_RESULT, Int::class.java).observe(this) { result -> + when (result) { + 0 -> { + toast(getString(R.string.recharge_success)) + finish(DataCollection(), 1001) + } + -2 -> toast("已取消微信支付") + else -> toast(getString(R.string.recharge_faild)) + } + } + binding.btnAli.setOnClickListener { binding.image1.setImageResource(R.mipmap.image_address_check_select) binding.image2.setImageResource(R.mipmap.image_address_check_narmal) @@ -71,6 +86,8 @@ class RechargeActivity : CKBaseActivity() { if ("1".equals(payType)){ aliPay() + }else if("0".equals(payType)){ + wxPay() } } @@ -112,4 +129,54 @@ class RechargeActivity : CKBaseActivity() { } } -} \ No newline at end of file + private fun wxPay() { + val payModel = model ?: return + val requiredValues = listOf( + payModel.appId, + payModel.partnerId, + payModel.prepayId, + payModel.packageVal, + payModel.nonceStr, + payModel.timeStamp, + payModel.paySign + ) + if (requiredValues.any { it.isNullOrBlank() }) { + hiddenProgeassDialog() + toast("微信支付参数不完整,请检查商户号等支付参数") + return + } + if (payModel.appId != Const.WX_APP_ID) { + hiddenProgeassDialog() + toast("微信支付 AppID 不匹配") + return + } + + val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true) + api.registerApp(Const.WX_APP_ID) + if (!api.isWXAppInstalled) { + hiddenProgeassDialog() + toast("请先安装微信") + return + } + + val request = PayReq().apply { + appId = payModel.appId + partnerId = payModel.partnerId + prepayId = payModel.prepayId + packageValue = payModel.packageVal + nonceStr = payModel.nonceStr + timeStamp = payModel.timeStamp + sign = payModel.paySign + extData = payModel.orderNo + } + hiddenProgeassDialog() + if (!api.sendReq(request)) { + toast("微信支付拉起失败") + } + } + + companion object { + const val WX_PAY_RESULT = "wx_pay_result" + } + +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt index d529aa4..2bff4a2 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/MineCustomerActivity.kt @@ -66,6 +66,7 @@ class MineCustomerActivity : CKBaseActivity() { var path = "" var url = "" + private var imageSendDraft = "" var lock = true var webSocket: WebSocket? = null @@ -100,6 +101,13 @@ class MineCustomerActivity : CKBaseActivity() { binding.editMessage.setHorizontallyScrolling(false); + binding.editMessage.setOnClickListener { + binding.contentBottom.visibility = View.GONE + } + binding.editMessage.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> + if (hasFocus) binding.contentBottom.visibility = View.GONE + } + binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener { override fun onEditorAction( p0: TextView?, @@ -122,6 +130,7 @@ class MineCustomerActivity : CKBaseActivity() { sendMessage(text) } } + return true } return false } @@ -159,7 +168,9 @@ class MineCustomerActivity : CKBaseActivity() { }) binding.btnMore.setOnClickListener { if (binding.contentBottom.visibility == View.GONE) { - KeyboardUtils.hideKeyboard(this@MineCustomerActivity) + val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager + inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0) + binding.editMessage.clearFocus() binding.contentBottom.visibility = View.VISIBLE } else { binding.contentBottom.visibility = View.GONE @@ -169,6 +180,7 @@ class MineCustomerActivity : CKBaseActivity() { } binding.btnSmile.setOnClickListener { + binding.contentBottom.visibility = View.GONE binding.editMessage.requestFocus() KeyboardUtils.showKeyboard(binding.editMessage) } @@ -302,7 +314,9 @@ class MineCustomerActivity : CKBaseActivity() { fun sendMessage(content: String) { - showProgeassDialog(getString(R.string.send)) + if (!TextUtils.isEmpty(url)) { + showProgeassDialog(getString(R.string.send)) + } TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { add(TTRequestData("content", content)) add(TTRequestData("chatType", 2)) @@ -331,7 +345,8 @@ class MineCustomerActivity : CKBaseActivity() { - binding.editMessage.setText("") + binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "") + imageSendDraft = "" path = "" url = "" customerMessageAdapter.data = this@MineCustomerActivity.data @@ -363,7 +378,7 @@ class MineCustomerActivity : CKBaseActivity() { var model = Gson().fromJson(data, UploadModel::class.java) url = model.urls - + imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "") sendMessage(url) } diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt index c7730e2..d4b1ac9 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/PeopleCustomerActivity.kt @@ -78,6 +78,7 @@ class PeopleCustomerActivity : CKBaseActivity() { var path = "" var url = "" + private var imageSendDraft = "" var lock = true var webSocket: WebSocket? = null @@ -156,6 +157,7 @@ class PeopleCustomerActivity : CKBaseActivity() { sendMessage(text) } } + return true } return false } @@ -193,7 +195,9 @@ class PeopleCustomerActivity : CKBaseActivity() { }) binding.btnMore.setOnClickListener { if (binding.contentBottom.visibility == View.GONE) { - KeyboardUtils.hideKeyboard(this@PeopleCustomerActivity) + val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager + inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0) + binding.editMessage.clearFocus() binding.contentBottom.visibility = View.VISIBLE } else { binding.contentBottom.visibility = View.GONE @@ -205,6 +209,7 @@ class PeopleCustomerActivity : CKBaseActivity() { } binding.btnSmile.setOnClickListener { + binding.contentBottom.visibility = View.GONE binding.editMessage.requestFocus() KeyboardUtils.showKeyboard(binding.editMessage) handler2.sendEmptyMessageDelayed(0,300) @@ -407,7 +412,9 @@ class PeopleCustomerActivity : CKBaseActivity() { "" } - showProgeassDialog(getString(R.string.send)) + if (!TextUtils.isEmpty(url)) { + showProgeassDialog(getString(R.string.send)) + } TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { add(TTRequestData("content", sendContent)) add(TTRequestData("chatType", chatType)) @@ -435,7 +442,8 @@ class PeopleCustomerActivity : CKBaseActivity() { - binding.editMessage.setText("") + binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "") + imageSendDraft = "" path = "" url = "" customerMessageAdapter.data = this@PeopleCustomerActivity.data @@ -467,7 +475,7 @@ class PeopleCustomerActivity : CKBaseActivity() { var model = Gson().fromJson(data, UploadModel::class.java) url = model.urls - + imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "") sendMessage(url) } diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt index 9e0144a..d268a86 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/customer/ShopCustomerActivity.kt @@ -68,6 +68,7 @@ class ShopCustomerActivity : CKBaseActivity() { var path = "" var url = "" + private var imageSendDraft = "" var lock = true var webSocket: WebSocket? = null @@ -101,6 +102,13 @@ class ShopCustomerActivity : CKBaseActivity() { binding.editMessage.setHorizontallyScrolling(false); + binding.editMessage.setOnClickListener { + binding.contentBottom.visibility = View.GONE + } + binding.editMessage.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus -> + if (hasFocus) binding.contentBottom.visibility = View.GONE + } + binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener { override fun onEditorAction( p0: TextView?, @@ -123,6 +131,7 @@ class ShopCustomerActivity : CKBaseActivity() { sendMessage(text) } } + return true } return false } @@ -160,7 +169,9 @@ class ShopCustomerActivity : CKBaseActivity() { }) binding.btnMore.setOnClickListener { if (binding.contentBottom.visibility == View.GONE) { - KeyboardUtils.hideKeyboard(this@ShopCustomerActivity) + val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as android.view.inputmethod.InputMethodManager + inputMethodManager.hideSoftInputFromWindow(binding.editMessage.windowToken, 0) + binding.editMessage.clearFocus() binding.contentBottom.visibility = View.VISIBLE } else { binding.contentBottom.visibility = View.GONE @@ -170,6 +181,7 @@ class ShopCustomerActivity : CKBaseActivity() { } binding.btnSmile.setOnClickListener { + binding.contentBottom.visibility = View.GONE binding.editMessage.requestFocus() KeyboardUtils.showKeyboard(binding.editMessage) } @@ -316,7 +328,9 @@ class ShopCustomerActivity : CKBaseActivity() { // e.printStackTrace() // } - showProgeassDialog(getString(R.string.send)) + if (!TextUtils.isEmpty(url)) { + showProgeassDialog(getString(R.string.send)) + } TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { add(TTRequestData("content", content)) add(TTRequestData("chatType", 1)) @@ -344,7 +358,8 @@ class ShopCustomerActivity : CKBaseActivity() { - binding.editMessage.setText("") + binding.editMessage.setText(if (!TextUtils.isEmpty(url)) imageSendDraft else "") + imageSendDraft = "" path = "" url = "" customerMessageAdapter.data = this@ShopCustomerActivity.data @@ -376,6 +391,7 @@ class ShopCustomerActivity : CKBaseActivity() { var model = Gson().fromJson(data, UploadModel::class.java) url = model.urls + imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "") sendMessage(url) } diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/login/LoginActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/login/LoginActivity.kt index e06c452..7ab6b92 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/login/LoginActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/login/LoginActivity.kt @@ -69,6 +69,9 @@ class LoginActivity : CKBaseActivity() { binding.btnLogin.setOnClickListener { login() } + binding.btnQuickLogin.setOnClickListener { + quickLogin() + } binding.btnCodeLogin.setOnClickListener { binding.btnCodeLogin.setTextColor(getColor2(R.attr.appTextColor)) @@ -285,6 +288,32 @@ class LoginActivity : CKBaseActivity() { } + private fun quickLogin() { + showProgeassDialog(getString(R.string.login)) + TTHttpClient.postJson(this, "登录", TTRequestParam().apply { + add(TTRequestData("username", "13305376054")) + add(TTRequestData("password", "000000")) + add(TTRequestData("code", "")) + add(TTRequestData("uuid", TTUtils.getDeviceId(this@LoginActivity).toString())) + }, object : ICallback { + override fun onSuccess(data: String) { + try { + val model = Gson().fromJson(data, LoginModel::class.java) + CKApp.app.setLoginToken(model.token.orEmpty()) + getUserInfo() + } catch (e: Exception) { + hiddenProgeassDialog() + toast(e.message.orEmpty()) + } + } + + override fun onFailed(code: String, msg: String) { + hiddenProgeassDialog() + toast(msg) + } + }) + } + fun getUserInfo(){ TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{ override fun onSuccess(data: String) { diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/member/OpenMemberActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/member/OpenMemberActivity.kt index 14b6638..f506378 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/member/OpenMemberActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/member/OpenMemberActivity.kt @@ -21,14 +21,19 @@ import com.ck.ckcollar.app.model.PayResult import com.ck.ckcollar.app.ui.act.shop.PayPasswordBottomFragment import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.ui.base.CKLHBaseActionBarActivity +import com.ck.ckcollar.app.ui.act.balance.RechargeActivity +import com.ck.ckcollar.app.utils.Const import com.ck.ckcollar.app.utils.networkone.ICallback import com.ck.ckcollar.app.utils.networkone.TTHttpClient import com.ck.ckcollar.app.utils.networkone.model.TTRequestData import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.tencent.mm.opensdk.modelpay.PayReq +import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.gyf.immersionbar.ImmersionBar import com.tt.kit.utils.TTUtils +import com.tt.kit.utils.LiveDataBus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -55,6 +60,17 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() { override fun initView() { + LiveDataBus.get().with(RechargeActivity.WX_PAY_RESULT, Int::class.java).observe(this) { result -> + when (result) { + 0 -> { + toast(getString(R.string.payment_success)) + finish() + } + -2 -> toast("已取消微信支付") + else -> toast(getString(R.string.payment_faild)) + } + } + //setPriceUI() binding.btnAli.setOnClickListener { @@ -136,6 +152,8 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() { var model = Gson().fromJson(data, MemberModel::class.java) if ("1".equals(payType)){ aliPay(model.orderStr!!) + }else if ("0".equals(payType)) { + wxPay(model) }else{ toast(getString(R.string.payment_success)) finish() @@ -244,4 +262,49 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() { } } } -} \ No newline at end of file + + private fun wxPay(model: MemberModel) { + val requiredValues = listOf( + model.appId, + model.partnerId, + model.prepayId, + model.packageVal, + model.nonceStr, + model.timeStamp, + model.paySign + ) + if (requiredValues.any { it.isNullOrBlank() }) { + hiddenProgeassDialog() + toast("微信支付参数不完整,请检查商户号等支付参数") + return + } + if (model.appId != Const.WX_APP_ID) { + hiddenProgeassDialog() + toast("微信支付 AppID 不匹配") + return + } + + val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true) + api.registerApp(Const.WX_APP_ID) + if (!api.isWXAppInstalled) { + hiddenProgeassDialog() + toast("请先安装微信") + return + } + + val request = PayReq().apply { + appId = model.appId + partnerId = model.partnerId + prepayId = model.prepayId + packageValue = model.packageVal + nonceStr = model.nonceStr + timeStamp = model.timeStamp + sign = model.paySign + extData = model.orderNo + } + hiddenProgeassDialog() + if (!api.sendReq(request)) { + toast("微信支付拉起失败") + } + } +} diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/ViewPetFileActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/ViewPetFileActivity.kt index da14cbb..e743f68 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/ViewPetFileActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/petmanager/ViewPetFileActivity.kt @@ -77,7 +77,10 @@ class ViewPetFileActivity: CKBaseActivity() { } binding.btnViewPostion.setOnClickListener { - + if(homeModel?.collNum == null){ + toast("请为您的爱宠绑定项圈") + return@setOnClickListener + } getData2(model?.id.toString()) } binding.btnAdreessDetails.setOnClickListener { diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/OrderActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/OrderActivity.kt index 6818710..48ddf6f 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/OrderActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/shop/OrderActivity.kt @@ -30,20 +30,25 @@ import com.ck.ckcollar.app.model.ShopCarModel import com.ck.ckcollar.app.model.ShopProductModel import com.ck.ckcollar.app.model.UserInfoModel import com.ck.ckcollar.app.ui.act.order.MyOrderActivity +import com.ck.ckcollar.app.ui.act.balance.RechargeActivity import com.ck.ckcollar.app.ui.act.setting.AddAddressActivity import com.ck.ckcollar.app.ui.act.setting.AddressActivity import com.ck.ckcollar.app.ui.act.setting.PayPsswordActivity import com.ck.ckcollar.app.ui.act.shop.ShopCarActivity.ShopCarAdapter import com.ck.ckcollar.app.ui.base.CKBaseActivity +import com.ck.ckcollar.app.utils.Const import com.ck.ckcollar.app.utils.networkone.ICallback import com.ck.ckcollar.app.utils.networkone.TTHttpClient import com.ck.ckcollar.app.utils.networkone.model.TTRequestData import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.tencent.mm.opensdk.modelpay.PayReq +import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.tt.kit.base.TTBaseActivity import com.tt.kit.model.Data import com.tt.kit.model.DataCollection +import com.tt.kit.utils.LiveDataBus import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -82,6 +87,14 @@ class OrderActivity : CKBaseActivity() { } override fun initView() { + LiveDataBus.get().with(RechargeActivity.WX_PAY_RESULT, Int::class.java).observe(this) { result -> + if (result == 0) { + handlePaymentSuccess() + } else { + handlePaymentFailed(result == -2) + } + } + productAdapter = ProductAdapter(this@OrderActivity, productDatas, object : OnItemClickListenner { override fun onClick(pos: Int, model: Any) { @@ -301,7 +314,7 @@ class OrderActivity : CKBaseActivity() { override fun onSuccess(data: String) { var model = Gson().fromJson(data, PayOrderModel::class.java) if ("0".equals(this@OrderActivity.payType)) { - //微信 + wxPay(model) }else if ("1".equals(this@OrderActivity.payType)) { if (TextUtils.isEmpty(model.orderStr)){ toActivity(OrderSuccessActivity::class.java, DataCollection()) @@ -322,7 +335,8 @@ class OrderActivity : CKBaseActivity() { override fun onFailed(code: String, msg: String) { toast(msg) - if (msg.indexOf("不足")>=0){ + //原有【不足】的字符串判断条件 + if (code.equals("502")){ toActivity( MyOrderActivity::class.java, DataCollection().apply { add(Data("pos", "1")) }) @@ -349,20 +363,74 @@ class OrderActivity : CKBaseActivity() { // 判断resultStatus 为9000则代表支付成功 if (TextUtils.equals(resultStatus, "9000")) { // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。 - toast(getString(R.string.payment_success)) - toActivity(OrderSuccessActivity::class.java, DataCollection()) - finish() + handlePaymentSuccess() } else { - toast(getString(R.string.payment_faild)) - toActivity( - MyOrderActivity::class.java, - DataCollection().apply { add(Data("pos", "1")) }) - finish() + handlePaymentFailed(false) } } } } + private fun wxPay(model: PayOrderModel) { + val requiredValues = listOf( + model.appId, + model.partnerId, + model.prepayId, + model.packageVal, + model.nonceStr, + model.timeStamp, + model.paySign + ) + if (requiredValues.any { it.isNullOrBlank() }) { + hiddenProgeassDialog() + toast("微信支付参数不完整,请检查商户号等支付参数") + return + } + if (model.appId != Const.WX_APP_ID) { + hiddenProgeassDialog() + toast("微信支付 AppID 不匹配") + return + } + + val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true) + api.registerApp(Const.WX_APP_ID) + if (!api.isWXAppInstalled) { + hiddenProgeassDialog() + toast("请先安装微信") + return + } + + val request = PayReq().apply { + appId = model.appId + partnerId = model.partnerId + prepayId = model.prepayId + packageValue = model.packageVal + nonceStr = model.nonceStr + timeStamp = model.timeStamp + sign = model.paySign + extData = model.orderNo + } + hiddenProgeassDialog() + if (!api.sendReq(request)) { + toast("微信支付拉起失败") + } + } + + private fun handlePaymentSuccess() { + toast(getString(R.string.payment_success)) + toActivity(OrderSuccessActivity::class.java, DataCollection()) + finish() + } + + private fun handlePaymentFailed(cancelled: Boolean) { + toast(if (cancelled) "已取消微信支付" else getString(R.string.payment_faild)) + toActivity( + MyOrderActivity::class.java, + DataCollection().apply { add(Data("pos", "1")) } + ) + finish() + } + fun getMemberInfo() { TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback { override fun onSuccess(data: String) { diff --git a/app/src/main/java/com/ck/ckcollar/app/utils/Const.kt b/app/src/main/java/com/ck/ckcollar/app/utils/Const.kt index 4f9e379..09ab8f4 100644 --- a/app/src/main/java/com/ck/ckcollar/app/utils/Const.kt +++ b/app/src/main/java/com/ck/ckcollar/app/utils/Const.kt @@ -14,6 +14,7 @@ object Const { const val TOKEN = "token" const val MEMBER_PRICE = "member_price" const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time" + //微信app-id const val WX_APP_ID = "wx7681e74df7d88ddc" } diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 6f313f4..28ce210 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -165,6 +165,15 @@ android:background="@drawable/bg_login_button" > + + + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical"> - + app:riv_corner_radius="4dp"/> + /> \ No newline at end of file