android 微信支付成功回调参数_Android微信支付回调区分

本文介绍了在Android中如何区分微信支付回调,特别是在同一回调类WXPayEntryActivity中处理订单支付和充值支付的情况。通过在调用微信支付SDK时设置PayReq的extData字段,然后在回调中通过PayResp的extData来判断支付类型,实现不同操作。
摘要由CSDN通过智能技术生成

在集成微信支付时才发现微信的开发文档果然有些坑,本文主要是记录我在区分微信支付回调问题的处理。也让遇到同样问题的小伙伴们找到处理方法。若您知道此问题的解决办法,请不要喷我,您可以选择点击关闭此浏览器标签,谢谢。

问题

我所遇到的需求是APP里有两处涉及到微信支付,订单支付和充值支付,且支付完成后需要通知后台做其他操作(后台收到的支付结果通知是异步的,服务器是被动的),而微信支付的结果回调都在一个WXPayEntryActivity里面,而且此类微信官方规定的。我想要区分我的支付结果是属于订单支付还是充值支付,以便做出相应的操作,该怎么办呢?

思路

刚开始有些懵逼,毕竟不熟悉微信支付。所以最开始选择了用一个全局变量来保存当前的操作类型值,收到支付回调后判断此类型值,做出不同的操作。但总觉得这样做有些不妥。又想想微信这样的设计肯定不是没有考虑到这方面啊,所以就在调用微信支付SDK的地方来找方法。果不其然在PayReq里找到了这样一个方法:

9784a0ade8da?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

调起微信支付SDK的地方

光找到传入数据的地方还不行,所有又去了回调页面WXPayEntryActivity里找接收数据的地方:

9784a0ade8da?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

WXPayEntryActivity

阿西吧!居然没有关于接收数据的方法...

又把PayResp拿来试试,果然功夫不负有心人:

PayResp resp = (PayResp) baseResp;

String payType = resp.extData;

那这样一来就好办了呀,我就说嘛,微信这样设计肯定是考虑了这个问题的。

代码

还是把具体代码贴一下吧

1.生成加密串。

加密操作放在后台的,所以只需要传入相应的标题、本地订单号、价格给后台,后台会返给我调用微信支付SDK的相应参数,这里要注意一下,传给后台的价格必须是乘以100,比如支付价格为1元,那就得传100给后台,当然后台做处理也是可以的,还有价格不能为0,包括支付宝也是一样的。收到后台的数据如下:

{

"msg": 1,

"data": {

"appid": "wxf6a28d9fa0e4a5e7",

"partnerid": "1482680562",

"prepayid": "wx201711161536297ca36c8ab20902031739",

"package": "Sign=WXPay",

"noncestr": "cd98f00b204e9800998ecf8427e",

"timestamp": 1510817789,

"sign": "D1262473FD0AFD56E24E59248756666D"

},

}

2.调起微信支付。

这里是将后台返回的数据都装在了一个JavaBean里面

public void wxPay(WxPayStringBean.DataBean bean) {

PayReq request = new PayReq();

IWXAPI api = mModel.wxPay();

api.registerApp(Constants.KEY.WeChat.APP_ID);

request.appId = bean.getAppid();

request.partnerId = bean.getPartnerid();

request.prepayId = bean.getPrepayid();

request.packageValue = bean.getPackageX();

request.nonceStr = bean.getNoncestr();

request.timeStamp = bean.getTimestamp() + "";

//传入一个标识,以便区分回调

request.extData = "RechargePay";

request.sign = bean.getSign();

api.sendReq(request);

}

@Data

public class WxPayStringBean {

private int msg;

private String error;

private DataBean data;

private int hc;

@Data

public static class DataBean {

private String appid;

private String partnerid;

private String prepayid;

@SerializedName("package")

private String packageX;

private String noncestr;

private int timestamp;

private String sign;

}

}

在上门的wxPay方法中,可以看到传入一个参数

request.extData = "RechargePay";

3.在收到支付回调的页面做判断

@Override

public void onResp(BaseResp baseResp) {

PayResp resp = (PayResp) baseResp;

String payType = resp.extData;

switch (payType) {

case "OrderPay": //订单支付的回调

// TODO: doSomething

break;

case "RechargePay": //充值支付的回调

// TODO: doSomething

break;

}

}

End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值