微信支付,支付宝支付和余额支付,这或许是app 支付里必须要做的一套完整支付方式吧。就拿我自己做的app来说,app里有三处地方需要使用到微信支付
- 充值 ,对于充值这块,支付完成后是需要回到钱包,重新刷新钱包页面数据
- 支付订单 ,对于这块的逻辑,支付完成就要返回订单列表,并且刷新数据
- 支付尾款 ,这里则是要求,支付完成后直接跳到订单详情页,并且打开评价的弹窗
需求很清晰,逻辑也是很清晰的,可是我却一时迷茫起来。
对于这几种跳转逻辑是非常好做的,唯一棘手的是,在微信支付成功的回调里我要怎么判断是哪个Activity 发来的请求呢?
我们先来看下调起微信支付的代码
val appid = data.appid
val nonce_str = data.nonce_str
val partnerid = data.partnerid
val sign = data.sign
val timestamp = data.timestamp.toString()
val prepay_id = data.prepay_id
//将该app注册到微信
msgApi.registerApp(appid)
//微信
val request = PayReq()
request.appId = appid
request.partnerId = partnerid
request.prepayId = prepay_id
request.packageValue = "Sign=WXPay"
request.nonceStr = nonce_str
request.timeStamp = timestamp
request.sign = sign
request.extData = "app data"
Log.i("微信请求", "onClick: " + request.toString())
msgApi.sendReq(request)
然后我们再来看看微信支付的回调
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) { //付款成功
} else { //付款失败
Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
}
WXPayEntryActivity.this.finish();
}
}
image.png
emmmm 有点小无助
然后就是百度呗,看文档呗。后来参考资料和看文档,发现调起微信支付的时候,有个字段 request.extData = "app data",难到这个是的??那就试试吧,果然黄天不负有心人,真的是这个,但是在微信支付的回调里又出幺蛾子了。
image.png
WHT ????resp 实体类里是无法拿到那个extData的,这个,我要去哪里接收呢?又是一番百度和尝试,最后终于发现,原来是需要转换下的
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) { //付款成功
PayResp resps = (PayResp) resp;
String payType = resps.extData;
Toast.makeText(WXPayEntryActivity.this, "付款成功", Toast.LENGTH_SHORT).show();
switch (payType) {
case "lastMoney": //支付尾款的
break;
case "charge": //充值的
break;
case "orderRefresh": //订单里支付
break;
}
} else { //付款失败
Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
}
WXPayEntryActivity.this.finish();
}
}
嗯,这样就可以了,哈哈。果然,最聪明的还是我们IT 程序员
网友评论