接入微信支付

This commit is contained in:
fengjignqi
2026-08-09 08:37:09 +08:00
parent 39dbe5f1e4
commit 579e9427c8
23 changed files with 350 additions and 2323 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -67,6 +67,12 @@
android:launchMode="singleTask" android:launchMode="singleTask"
android:taskAffinity="com.ck.ckcollar.app" android:taskAffinity="com.ck.ckcollar.app"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity> android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity="com.ck.ckcollar.app"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity <activity
android:name=".ui.act.petmanager.PetManagerActivity" android:name=".ui.act.petmanager.PetManagerActivity"
android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity> android:theme="@style/Theme.CkCollar_app.NoActionBar"></activity>

View File

@@ -10,6 +10,14 @@ class MemberModel {
var amount: Double = 0.0 // 金额 var amount: Double = 0.0 // 金额
var payType: String? = "" // 支付方式 var payType: String? = "" // 支付方式
var orderNo: 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 // 订单信息 var order: MemberOrder? = null // 订单信息
class MemberOrder { class MemberOrder {
@@ -33,4 +41,4 @@ class MemberModel {
var updateTime: String? = "" // 更新时间 var updateTime: String? = "" // 更新时间
var userId: Int = 0 // 用户ID var userId: Int = 0 // 用户ID
} }
} }

View File

@@ -4,5 +4,13 @@ class PayOrderModel : CkBaseModel(){
var orderStr: String? = "" // 订单字符串 var orderStr: String? = "" // 订单字符串
var amount: String? = "" // 金额 var amount: String? = "" // 金额
var orderNo: 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? = "" var info : String? = ""
} }

View File

@@ -1,7 +1,22 @@
package com.ck.ckcollar.app.model package com.ck.ckcollar.app.model
class RechargeModel { class RechargeModel {
var orderStr :String? = null // Alipay
var amount : Double? = null 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 var RC1782974779440000002 : String? = null
} }

View File

@@ -6,6 +6,7 @@ import android.text.TextUtils
import com.alipay.sdk.app.EnvUtils import com.alipay.sdk.app.EnvUtils
import com.alipay.sdk.app.PayTask import com.alipay.sdk.app.PayTask
import com.ck.ckcollar.app.R 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.databinding.ActivityRechargeBinding
import com.ck.ckcollar.app.model.PayResult import com.ck.ckcollar.app.model.PayResult
import com.ck.ckcollar.app.model.RechargeModel 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.utils.networkone.model.TTRequestParam
import com.ck.ckcollar.app.widget.CKEditView import com.ck.ckcollar.app.widget.CKEditView
import com.google.gson.Gson 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.model.DataCollection
import com.tt.kit.utils.LiveDataBus
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -37,6 +41,17 @@ class RechargeActivity : CKBaseActivity() {
override fun initView() { 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.btnAli.setOnClickListener {
binding.image1.setImageResource(R.mipmap.image_address_check_select) binding.image1.setImageResource(R.mipmap.image_address_check_select)
binding.image2.setImageResource(R.mipmap.image_address_check_narmal) binding.image2.setImageResource(R.mipmap.image_address_check_narmal)
@@ -71,6 +86,8 @@ class RechargeActivity : CKBaseActivity() {
if ("1".equals(payType)){ if ("1".equals(payType)){
aliPay() aliPay()
}else if("0".equals(payType)){
wxPay()
} }
} }
@@ -112,4 +129,54 @@ class RechargeActivity : CKBaseActivity() {
} }
} }
} 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"
}
}

View File

@@ -66,6 +66,7 @@ class MineCustomerActivity : CKBaseActivity() {
var path = "" var path = ""
var url = "" var url = ""
private var imageSendDraft = ""
var lock = true var lock = true
var webSocket: WebSocket? = null var webSocket: WebSocket? = null
@@ -100,6 +101,13 @@ class MineCustomerActivity : CKBaseActivity() {
binding.editMessage.setHorizontallyScrolling(false); 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 { binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction( override fun onEditorAction(
p0: TextView?, p0: TextView?,
@@ -122,6 +130,7 @@ class MineCustomerActivity : CKBaseActivity() {
sendMessage(text) sendMessage(text)
} }
} }
return true
} }
return false return false
} }
@@ -159,7 +168,9 @@ class MineCustomerActivity : CKBaseActivity() {
}) })
binding.btnMore.setOnClickListener { binding.btnMore.setOnClickListener {
if (binding.contentBottom.visibility == View.GONE) { 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 binding.contentBottom.visibility = View.VISIBLE
} else { } else {
binding.contentBottom.visibility = View.GONE binding.contentBottom.visibility = View.GONE
@@ -169,6 +180,7 @@ class MineCustomerActivity : CKBaseActivity() {
} }
binding.btnSmile.setOnClickListener { binding.btnSmile.setOnClickListener {
binding.contentBottom.visibility = View.GONE
binding.editMessage.requestFocus() binding.editMessage.requestFocus()
KeyboardUtils.showKeyboard(binding.editMessage) KeyboardUtils.showKeyboard(binding.editMessage)
} }
@@ -302,7 +314,9 @@ class MineCustomerActivity : CKBaseActivity() {
fun sendMessage(content: String) { fun sendMessage(content: String) {
showProgeassDialog(getString(R.string.send)) if (!TextUtils.isEmpty(url)) {
showProgeassDialog(getString(R.string.send))
}
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
add(TTRequestData("content", content)) add(TTRequestData("content", content))
add(TTRequestData("chatType", 2)) 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 = "" path = ""
url = "" url = ""
customerMessageAdapter.data = this@MineCustomerActivity.data customerMessageAdapter.data = this@MineCustomerActivity.data
@@ -363,7 +378,7 @@ class MineCustomerActivity : CKBaseActivity() {
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java) var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
url = model.urls url = model.urls
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
sendMessage(url) sendMessage(url)
} }

View File

@@ -78,6 +78,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
var path = "" var path = ""
var url = "" var url = ""
private var imageSendDraft = ""
var lock = true var lock = true
var webSocket: WebSocket? = null var webSocket: WebSocket? = null
@@ -156,6 +157,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
sendMessage(text) sendMessage(text)
} }
} }
return true
} }
return false return false
} }
@@ -193,7 +195,9 @@ class PeopleCustomerActivity : CKBaseActivity() {
}) })
binding.btnMore.setOnClickListener { binding.btnMore.setOnClickListener {
if (binding.contentBottom.visibility == View.GONE) { 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 binding.contentBottom.visibility = View.VISIBLE
} else { } else {
binding.contentBottom.visibility = View.GONE binding.contentBottom.visibility = View.GONE
@@ -205,6 +209,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
} }
binding.btnSmile.setOnClickListener { binding.btnSmile.setOnClickListener {
binding.contentBottom.visibility = View.GONE
binding.editMessage.requestFocus() binding.editMessage.requestFocus()
KeyboardUtils.showKeyboard(binding.editMessage) KeyboardUtils.showKeyboard(binding.editMessage)
handler2.sendEmptyMessageDelayed(0,300) handler2.sendEmptyMessageDelayed(0,300)
@@ -407,7 +412,9 @@ class PeopleCustomerActivity : CKBaseActivity() {
"<img src=\"$content\"/>" "<img src=\"$content\"/>"
} }
showProgeassDialog(getString(R.string.send)) if (!TextUtils.isEmpty(url)) {
showProgeassDialog(getString(R.string.send))
}
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
add(TTRequestData("content", sendContent)) add(TTRequestData("content", sendContent))
add(TTRequestData("chatType", chatType)) 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 = "" path = ""
url = "" url = ""
customerMessageAdapter.data = this@PeopleCustomerActivity.data customerMessageAdapter.data = this@PeopleCustomerActivity.data
@@ -467,7 +475,7 @@ class PeopleCustomerActivity : CKBaseActivity() {
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java) var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
url = model.urls url = model.urls
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
sendMessage(url) sendMessage(url)
} }

View File

@@ -68,6 +68,7 @@ class ShopCustomerActivity : CKBaseActivity() {
var path = "" var path = ""
var url = "" var url = ""
private var imageSendDraft = ""
var lock = true var lock = true
var webSocket: WebSocket? = null var webSocket: WebSocket? = null
@@ -101,6 +102,13 @@ class ShopCustomerActivity : CKBaseActivity() {
binding.editMessage.setHorizontallyScrolling(false); 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 { binding.editMessage.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction( override fun onEditorAction(
p0: TextView?, p0: TextView?,
@@ -123,6 +131,7 @@ class ShopCustomerActivity : CKBaseActivity() {
sendMessage(text) sendMessage(text)
} }
} }
return true
} }
return false return false
} }
@@ -160,7 +169,9 @@ class ShopCustomerActivity : CKBaseActivity() {
}) })
binding.btnMore.setOnClickListener { binding.btnMore.setOnClickListener {
if (binding.contentBottom.visibility == View.GONE) { 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 binding.contentBottom.visibility = View.VISIBLE
} else { } else {
binding.contentBottom.visibility = View.GONE binding.contentBottom.visibility = View.GONE
@@ -170,6 +181,7 @@ class ShopCustomerActivity : CKBaseActivity() {
} }
binding.btnSmile.setOnClickListener { binding.btnSmile.setOnClickListener {
binding.contentBottom.visibility = View.GONE
binding.editMessage.requestFocus() binding.editMessage.requestFocus()
KeyboardUtils.showKeyboard(binding.editMessage) KeyboardUtils.showKeyboard(binding.editMessage)
} }
@@ -316,7 +328,9 @@ class ShopCustomerActivity : CKBaseActivity() {
// e.printStackTrace() // e.printStackTrace()
// } // }
showProgeassDialog(getString(R.string.send)) if (!TextUtils.isEmpty(url)) {
showProgeassDialog(getString(R.string.send))
}
TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply { TTHttpClient.postJson(this, "发送人工会话消息", TTRequestParam().apply {
add(TTRequestData("content", content)) add(TTRequestData("content", content))
add(TTRequestData("chatType", 1)) 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 = "" path = ""
url = "" url = ""
customerMessageAdapter.data = this@ShopCustomerActivity.data customerMessageAdapter.data = this@ShopCustomerActivity.data
@@ -376,6 +391,7 @@ class ShopCustomerActivity : CKBaseActivity() {
var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java) var model = Gson().fromJson<UploadModel>(data, UploadModel::class.java)
url = model.urls url = model.urls
imageSendDraft = binding.editMessage.text.toString().replace("$$$$$", "")
sendMessage(url) sendMessage(url)
} }

View File

@@ -69,6 +69,9 @@ class LoginActivity : CKBaseActivity() {
binding.btnLogin.setOnClickListener { binding.btnLogin.setOnClickListener {
login() login()
} }
binding.btnQuickLogin.setOnClickListener {
quickLogin()
}
binding.btnCodeLogin.setOnClickListener { binding.btnCodeLogin.setOnClickListener {
binding.btnCodeLogin.setTextColor(getColor2(R.attr.appTextColor)) 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<LoginModel>(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(){ fun getUserInfo(){
TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{ TTHttpClient.get(this,"个人资料", TTRequestParam(),object : ICallback{
override fun onSuccess(data: String) { override fun onSuccess(data: String) {

View File

@@ -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.act.shop.PayPasswordBottomFragment
import com.ck.ckcollar.app.ui.base.CKBaseActivity import com.ck.ckcollar.app.ui.base.CKBaseActivity
import com.ck.ckcollar.app.ui.base.CKLHBaseActionBarActivity 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.ICallback
import com.ck.ckcollar.app.utils.networkone.TTHttpClient 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.TTRequestData
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken 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.gyf.immersionbar.ImmersionBar
import com.tt.kit.utils.TTUtils import com.tt.kit.utils.TTUtils
import com.tt.kit.utils.LiveDataBus
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -55,6 +60,17 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
override fun initView() { 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() //setPriceUI()
binding.btnAli.setOnClickListener { binding.btnAli.setOnClickListener {
@@ -136,6 +152,8 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
var model = Gson().fromJson<MemberModel>(data, MemberModel::class.java) var model = Gson().fromJson<MemberModel>(data, MemberModel::class.java)
if ("1".equals(payType)){ if ("1".equals(payType)){
aliPay(model.orderStr!!) aliPay(model.orderStr!!)
}else if ("0".equals(payType)) {
wxPay(model)
}else{ }else{
toast(getString(R.string.payment_success)) toast(getString(R.string.payment_success))
finish() finish()
@@ -244,4 +262,49 @@ class OpenMemberActivity : CKLHBaseActionBarActivity() {
} }
} }
} }
}
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("微信支付拉起失败")
}
}
}

View File

@@ -77,7 +77,10 @@ class ViewPetFileActivity: CKBaseActivity() {
} }
binding.btnViewPostion.setOnClickListener { binding.btnViewPostion.setOnClickListener {
if(homeModel?.collNum == null){
toast("请为您的爱宠绑定项圈")
return@setOnClickListener
}
getData2(model?.id.toString()) getData2(model?.id.toString())
} }
binding.btnAdreessDetails.setOnClickListener { binding.btnAdreessDetails.setOnClickListener {

View File

@@ -30,20 +30,25 @@ import com.ck.ckcollar.app.model.ShopCarModel
import com.ck.ckcollar.app.model.ShopProductModel import com.ck.ckcollar.app.model.ShopProductModel
import com.ck.ckcollar.app.model.UserInfoModel import com.ck.ckcollar.app.model.UserInfoModel
import com.ck.ckcollar.app.ui.act.order.MyOrderActivity 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.AddAddressActivity
import com.ck.ckcollar.app.ui.act.setting.AddressActivity 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.setting.PayPsswordActivity
import com.ck.ckcollar.app.ui.act.shop.ShopCarActivity.ShopCarAdapter import com.ck.ckcollar.app.ui.act.shop.ShopCarActivity.ShopCarAdapter
import com.ck.ckcollar.app.ui.base.CKBaseActivity 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.ICallback
import com.ck.ckcollar.app.utils.networkone.TTHttpClient 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.TTRequestData
import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam import com.ck.ckcollar.app.utils.networkone.model.TTRequestParam
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.reflect.TypeToken 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.base.TTBaseActivity
import com.tt.kit.model.Data import com.tt.kit.model.Data
import com.tt.kit.model.DataCollection import com.tt.kit.model.DataCollection
import com.tt.kit.utils.LiveDataBus
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -82,6 +87,14 @@ class OrderActivity : CKBaseActivity() {
} }
override fun initView() { 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 =
ProductAdapter(this@OrderActivity, productDatas, object : OnItemClickListenner { ProductAdapter(this@OrderActivity, productDatas, object : OnItemClickListenner {
override fun onClick(pos: Int, model: Any) { override fun onClick(pos: Int, model: Any) {
@@ -301,7 +314,7 @@ class OrderActivity : CKBaseActivity() {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {
var model = Gson().fromJson<PayOrderModel>(data, PayOrderModel::class.java) var model = Gson().fromJson<PayOrderModel>(data, PayOrderModel::class.java)
if ("0".equals(this@OrderActivity.payType)) { if ("0".equals(this@OrderActivity.payType)) {
//微信 wxPay(model)
}else if ("1".equals(this@OrderActivity.payType)) { }else if ("1".equals(this@OrderActivity.payType)) {
if (TextUtils.isEmpty(model.orderStr)){ if (TextUtils.isEmpty(model.orderStr)){
toActivity(OrderSuccessActivity::class.java, DataCollection()) toActivity(OrderSuccessActivity::class.java, DataCollection())
@@ -322,7 +335,8 @@ class OrderActivity : CKBaseActivity() {
override fun onFailed(code: String, msg: String) { override fun onFailed(code: String, msg: String) {
toast(msg) toast(msg)
if (msg.indexOf("不足")>=0){ //原有【不足】的字符串判断条件
if (code.equals("502")){
toActivity( toActivity(
MyOrderActivity::class.java, MyOrderActivity::class.java,
DataCollection().apply { add(Data("pos", "1")) }) DataCollection().apply { add(Data("pos", "1")) })
@@ -349,20 +363,74 @@ class OrderActivity : CKBaseActivity() {
// 判断resultStatus 为9000则代表支付成功 // 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) { if (TextUtils.equals(resultStatus, "9000")) {
// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。 // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。
toast(getString(R.string.payment_success)) handlePaymentSuccess()
toActivity(OrderSuccessActivity::class.java, DataCollection())
finish()
} else { } else {
toast(getString(R.string.payment_faild)) handlePaymentFailed(false)
toActivity(
MyOrderActivity::class.java,
DataCollection().apply { add(Data("pos", "1")) })
finish()
} }
} }
} }
} }
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() { fun getMemberInfo() {
TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback { TTHttpClient.get(this, "个人资料", TTRequestParam(), object : ICallback {
override fun onSuccess(data: String) { override fun onSuccess(data: String) {

View File

@@ -14,6 +14,7 @@ object Const {
const val TOKEN = "token" const val TOKEN = "token"
const val MEMBER_PRICE = "member_price" const val MEMBER_PRICE = "member_price"
const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time" const val MEMBER_PRICE_CACHE_TIME = "member_price_cache_time"
//微信app-id
const val WX_APP_ID = "wx7681e74df7d88ddc" const val WX_APP_ID = "wx7681e74df7d88ddc"
} }

View File

@@ -165,6 +165,15 @@
android:background="@drawable/bg_login_button" android:background="@drawable/bg_login_button"
></com.ck.ckcollar.app.widget.CKButton> ></com.ck.ckcollar.app.widget.CKButton>
<com.ck.ckcollar.app.widget.CKButton
android:id="@+id/btnQuickLogin"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="10dp"
android:background="@drawable/bg_login_button"
android:text="临时快捷登录"
android:textColor="@color/buttonTextColor" />
<com.ck.ckcollar.app.widget.CKLinearLayout <com.ck.ckcollar.app.widget.CKLinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="30dp" android:layout_height="30dp"

View File

@@ -2,16 +2,16 @@
<com.ck.ckcollar.app.widget.CKRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.ck.ckcollar.app.widget.CKRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res-auto"
> android:orientation="vertical">
<com.ck.ckcollar.app.widget.CKImageView <com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/image" android:id="@+id/image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/color_F0F0F0" android:background="@color/color_F0F0F0"
android:scaleType="centerInside" android:scaleType="centerInside"
></com.ck.ckcollar.app.widget.CKImageView> app:riv_corner_radius="4dp"/>
<com.ck.ckcollar.app.widget.CKImageView <com.ck.ckcollar.app.widget.CKImageView
android:id="@+id/imageDelete" android:id="@+id/imageDelete"
@@ -21,5 +21,5 @@
android:layout_alignParentTop="true" android:layout_alignParentTop="true"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:visibility="gone" android:visibility="gone"
></com.ck.ckcollar.app.widget.CKImageView> />
</com.ck.ckcollar.app.widget.CKRelativeLayout> </com.ck.ckcollar.app.widget.CKRelativeLayout>