Android微信支付回调区分

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

问题

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

思路

 

 

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

调起微信支付SDK的地方

 

 

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

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;
        }
    }



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值