diff --git a/.gradle/8.13/executionHistory/executionHistory.bin b/.gradle/8.13/executionHistory/executionHistory.bin index fddc89e..eb4f153 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 f172ccf..96791ab 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 dd35c72..3c9fc3d 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 cba1220..ffa1c49 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 e548c24..e0a32d9 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 9d70a37..ee47643 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 66076b4..3795851 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/java/com/ck/ckcollar/app/action/ActionCode.kt b/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt index 83e0bc2..b83aca7 100644 --- a/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt +++ b/app/src/main/java/com/ck/ckcollar/app/action/ActionCode.kt @@ -155,6 +155,7 @@ object ActionCode { "找回支付密码" -> url = "/app/setting/payPassword/reset" "查询支付密码状态" -> url = "/app/setting/payPassword/status" "订单支付" -> url = "/app/order/pay" + "取消待支付订单" -> url = "/app/order/cancelPending" "修改个人信息" -> url = "/app/profile/update" @@ -178,6 +179,7 @@ object ActionCode { "绑定微信" -> url = "/app/profile/wx/bind" + } TTLog.e(url) return url; diff --git a/app/src/main/java/com/ck/ckcollar/app/model/WithDrawModel.kt b/app/src/main/java/com/ck/ckcollar/app/model/WithDrawModel.kt index 5471368..8c82f44 100644 --- a/app/src/main/java/com/ck/ckcollar/app/model/WithDrawModel.kt +++ b/app/src/main/java/com/ck/ckcollar/app/model/WithDrawModel.kt @@ -4,4 +4,10 @@ class WithDrawModel { var amount :String? = "" var payMethod :String? = "" -} \ No newline at end of file + var authPackageInfo :String? = null + var thirdOrderNo :String? = null + var outBillNo :String? = null + var mchId :String? = null + var appId :String? = null + var needConfirm :Boolean = false +} 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 44c5291..93ad7e8 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 @@ -108,7 +108,7 @@ class RechargeActivity : CKBaseActivity() { GlobalScope.launch(Dispatchers.IO){ // [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。 if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { - EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) +// EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) } val alipay = PayTask(this@RechargeActivity) val result = alipay.payV2(model?.orderStr, true) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/WithDrawActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/WithDrawActivity.kt index e05e146..c12a4fb 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/WithDrawActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/balance/WithDrawActivity.kt @@ -20,11 +20,17 @@ import com.google.gson.Gson import com.gyf.immersionbar.ImmersionBar import com.tt.kit.model.Data import com.tt.kit.model.DataCollection +import com.tt.kit.utils.LiveDataBus +import com.tencent.mm.opensdk.modelbiz.WXOpenBusinessView +import com.tencent.mm.opensdk.openapi.WXAPIFactory +import com.ck.ckcollar.app.utils.Const +import java.net.URLEncoder import java.math.BigDecimal class WithDrawActivity : CKLHBaseActionBarActivity() { lateinit var binding: ActivityWithdrawBinding var model : BalanceModle? = null + private var pendingWithdraw: WithDrawModel? = null var payType = "0" override fun onCreate(savedInstanceState: Bundle?) { @@ -39,6 +45,14 @@ class WithDrawActivity : CKLHBaseActionBarActivity() { } override fun initView() { + LiveDataBus.get().with(WX_WITHDRAW_RESULT, Int::class.java).observe(this) { resultCode -> + val withdraw = pendingWithdraw ?: return@observe + if (resultCode == 0) { + showWithdrawSuccess(withdraw) + } else { + toast(if (resultCode == -2) "已取消微信收款确认" else "微信提现确认失败") + } + } binding.btnAli.setOnClickListener { binding.image1.setImageResource(R.mipmap.image_address_check_select) @@ -91,14 +105,13 @@ class WithDrawActivity : CKLHBaseActionBarActivity() { add(TTRequestData("payType", payType)) }, object : ICallback { override fun onSuccess(data: String) { - - var model = Gson().fromJson(data, WithDrawModel::class.java) - toActivity(WithDrawSuccessActivity::class.java, DataCollection().apply { - add(Data("data", Gson().toJson(model))) - - }) - - finish() + val withdraw = Gson().fromJson(data, WithDrawModel::class.java) + pendingWithdraw = withdraw + if (withdraw.needConfirm && "0" == payType) { + openWeChatTransferConfirm(withdraw) + } else { + showWithdrawSuccess(withdraw) + } } @@ -110,6 +123,52 @@ class WithDrawActivity : CKLHBaseActionBarActivity() { } + private fun openWeChatTransferConfirm(withdraw: WithDrawModel) { + val mchId = withdraw.mchId + val appId = withdraw.appId + val packageInfo = withdraw.authPackageInfo + if (mchId.isNullOrBlank() || appId.isNullOrBlank() || packageInfo.isNullOrBlank()) { + toast("微信收款确认参数不完整") + return + } + if (appId != Const.WX_APP_ID) { + toast("微信支付 AppID 不匹配") + return + } + + val api = WXAPIFactory.createWXAPI(this, Const.WX_APP_ID, true) + api.registerApp(Const.WX_APP_ID) + if (!api.isWXAppInstalled) { + toast("请先安装微信") + return + } + if (api.wxAppSupportAPI < 0x28002d33) { + toast("当前微信版本过低,请升级微信") + return + } + + val request = WXOpenBusinessView.Req().apply { + businessType = "requestMerchantTransfer" + query = "mchId=${URLEncoder.encode(mchId, "UTF-8")}" + + "&appId=${URLEncoder.encode(appId, "UTF-8")}" + + "&package=${URLEncoder.encode(packageInfo, "UTF-8")}" + } + if (!api.sendReq(request)) { + toast("微信收款确认页拉起失败") + } + } + + private fun showWithdrawSuccess(withdraw: WithDrawModel) { + toActivity(WithDrawSuccessActivity::class.java, DataCollection().apply { + add(Data("data", Gson().toJson(withdraw))) + }) + finish() + } + + companion object { + const val WX_WITHDRAW_RESULT = "wx_withdraw_result" + } + fun getBalanceInfo(){ TTHttpClient.get(this,"余额", TTRequestParam(),object : ICallback{ 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 f506378..62a22a2 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 @@ -242,7 +242,7 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() { GlobalScope.launch(Dispatchers.IO){ // [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。 if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { - EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) +// EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) } val alipay = PayTask(this@OpenMemberActivity) val result = alipay.payV2(orderStr, true) diff --git a/app/src/main/java/com/ck/ckcollar/app/ui/act/order/PayOrderActivity.kt b/app/src/main/java/com/ck/ckcollar/app/ui/act/order/PayOrderActivity.kt index 1f8c627..fe47b80 100644 --- a/app/src/main/java/com/ck/ckcollar/app/ui/act/order/PayOrderActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/ui/act/order/PayOrderActivity.kt @@ -411,7 +411,7 @@ class PayOrderActivity : CKBaseActivity() { GlobalScope.launch(Dispatchers.IO) { // [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。 if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { - EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) +// EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) } val alipay = PayTask(this@PayOrderActivity) val result = alipay.payV2(orderStr, true) 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 0729fe8..0b5904b 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 @@ -337,6 +337,7 @@ class OrderActivity : CKBaseActivity() { toActivity(OrderSuccessActivity::class.java, DataCollection()) finish() + } @@ -361,7 +362,7 @@ class OrderActivity : CKBaseActivity() { // [支付宝沙箱测试] 仅 Debug 包启用,Release 包继续使用正式环境。 if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) { - EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) +// EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) } val alipay = PayTask(this@OrderActivity) val result = alipay.payV2(orderStr, true) diff --git a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt index 19928fd..5c9aea7 100644 --- a/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt +++ b/app/src/main/java/com/ck/ckcollar/app/utils/networkone/TTHttpClient.kt @@ -78,7 +78,9 @@ object TTHttpClient { val string = response.body?.string() string?.let { TTLog.e("response", actionCode + "====" + it) } var model = JSONObject(string) - if (isSusscee(model)) { + // A withdrawal code of 201 means the transfer bill was created + // and the client must continue with WeChat confirmation. + if (isSusscee(model) || (actionCode == "提现" && getCode(model) == "201")) { activity.runOnUiThread { activity.hiddenProgeassDialog() iCallback.onSuccess(getData(model)) @@ -137,7 +139,10 @@ object TTHttpClient { val string = response.body?.string() string?.let { TTLog.e("response", actionCode + "====" + it) } var model = JSONObject(string) - if (isSusscee(model)) { + // code 201 means the withdrawal bill was created and the + // client must continue with WeChat confirmation. Keep the + // response data available to the withdrawal screen. + if (isSusscee(model) || (actionCode == "提现" && getCode(model) == "201")) { activity.runOnUiThread { activity.hiddenProgeassDialog() iCallback.onSuccess(getData(model)) diff --git a/app/src/main/java/com/ck/ckcollar/app/wxapi/WXEntryActivity.kt b/app/src/main/java/com/ck/ckcollar/app/wxapi/WXEntryActivity.kt index 92f5272..9bfac87 100644 --- a/app/src/main/java/com/ck/ckcollar/app/wxapi/WXEntryActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/wxapi/WXEntryActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import com.ck.ckcollar.app.CKApp +import com.ck.ckcollar.app.ui.act.balance.WithDrawActivity import com.ck.ckcollar.app.ui.act.login.LoginActivity import com.ck.ckcollar.app.ui.act.user.UserInfoActivity import com.ck.ckcollar.app.utils.Const @@ -15,6 +16,7 @@ import com.tencent.mm.opensdk.openapi.IWXAPI import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler import com.tencent.mm.opensdk.openapi.WXAPIFactory import com.tt.kit.utils.TTLog +import com.tt.kit.utils.LiveDataBus class WXEntryActivity : Activity(), IWXAPIEventHandler { @@ -43,6 +45,13 @@ class WXEntryActivity : Activity(), IWXAPIEventHandler { } override fun onResp(resp: BaseResp?) { + if (resp?.type == ConstantsAPI.COMMAND_OPEN_BUSINESS_VIEW) { + LiveDataBus.get() + .with(WithDrawActivity.WX_WITHDRAW_RESULT) + .value = resp.errCode + finish() + return + } if (resp!!.getType() === ConstantsAPI.COMMAND_SENDAUTH) { val authResp = resp as SendAuth.Resp val code = authResp.code @@ -59,4 +68,4 @@ class WXEntryActivity : Activity(), IWXAPIEventHandler { } finish() } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/ck/ckcollar/app/wxapi/WXPayEntryActivity.kt b/app/src/main/java/com/ck/ckcollar/app/wxapi/WXPayEntryActivity.kt index 83fc80b..10e8e54 100644 --- a/app/src/main/java/com/ck/ckcollar/app/wxapi/WXPayEntryActivity.kt +++ b/app/src/main/java/com/ck/ckcollar/app/wxapi/WXPayEntryActivity.kt @@ -8,6 +8,8 @@ import com.ck.ckcollar.app.ui.act.balance.RechargeActivity import com.ck.ckcollar.app.utils.Const import com.tencent.mm.opensdk.modelbase.BaseReq import com.tencent.mm.opensdk.modelbase.BaseResp +import com.tencent.mm.opensdk.constants.ConstantsAPI +import com.ck.ckcollar.app.ui.act.balance.WithDrawActivity import com.tencent.mm.opensdk.openapi.IWXAPI import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler import com.tencent.mm.opensdk.openapi.WXAPIFactory @@ -32,6 +34,11 @@ class WXPayEntryActivity : Activity(), IWXAPIEventHandler { override fun onResp(resp: BaseResp?) { val resultCode = resp?.errCode ?: -1 + if (resp?.type == ConstantsAPI.COMMAND_OPEN_BUSINESS_VIEW) { + LiveDataBus.get().with(WithDrawActivity.WX_WITHDRAW_RESULT).value = resultCode + finish() + return + } val message = when (resultCode) { BaseResp.ErrCode.ERR_OK -> "微信支付成功" BaseResp.ErrCode.ERR_USER_CANCEL -> "已取消微信支付" diff --git a/app/src/main/res/layout/activity_withdraw.xml b/app/src/main/res/layout/activity_withdraw.xml index 385fcc7..a6e0c4f 100644 --- a/app/src/main/res/layout/activity_withdraw.xml +++ b/app/src/main/res/layout/activity_withdraw.xml @@ -183,7 +183,7 @@ android:layout_marginTop="50dp" android:background="@drawable/bg_login_button" android:text="@string/apply_withdraw" - android:textColor="@color/buttonTextColor"> + android:textColor="@color/buttonTextColor"/> diff --git a/app/src/main/res/layout/include_no_result_layout.xml b/app/src/main/res/layout/include_no_result_layout.xml index 3e54bc1..95a5665 100644 --- a/app/src/main/res/layout/include_no_result_layout.xml +++ b/app/src/main/res/layout/include_no_result_layout.xml @@ -9,19 +9,19 @@ android:layout_marginTop="200dp"> \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/icon_no_result.png b/app/src/main/res/mipmap-hdpi/icon_no_result.png deleted file mode 100644 index d48c042..0000000 Binary files a/app/src/main/res/mipmap-hdpi/icon_no_result.png and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/icon_no_result.png b/app/src/main/res/mipmap-xxhdpi/icon_no_result.png new file mode 100644 index 0000000..78afa8f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/icon_no_result.png differ