android微信支付

  • 这段时间一直在忙着弄支付这块的东西,支付宝也好,银联都很简单,基本按照文档和Demo就可以了支付成功,最坑的就属微信支付了。微信支付会有各种各样的坑等着你去跳,第一次做的人往往会摸不着头脑,所以把我在微信支付中遇到的坑和怎么解决的发出来,希望大家遇到时可以顺利解决
  • 第一个坑,就是我们下载的微信官方的Demo运行不起来,这个解决方法很简单,就是我们打开测试手机的应用管理,清除微信的缓存,然后再次运行就可以了支付成功了,但是只能支付一次,第二次支付的时候还是失败,要再次清除缓存,不知道这个是什么原因,大家知道的可以科普一下
  • 第二个坑,在创建应用的时候会让我们填入包名和应用签名,很多人一头雾水不知道这个是什么,不知道的话建议看看微信支付开发文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5应用签名

  • 在这里详细说一下这个应用签名,这个签名必须要和APP的签名一致,不然调不出付款界面。很多人直接下载微信提供的签名工具https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
    输入包名获取签名,其实这样是不对的。这个工具怎么用呢,首先我们要把我们的app用正式的keyStore打包签名安装到测试手机,然后再将微信签名工具安装到测试手机,然后输入你的包名,获取到的绿色的字符串就是你的应用签名应用签名

  • 第三个坑,支付回调界面,很多人不仔细的看文档,其实在文档中很多的东西已经讲了,虽然讲的不是很清楚,但是至少有提及。支付结果回调在微信支付的文档里面已经说明了这个问题。在回调的时候微信提供了一个专门负责回调的Activity,WXPayEntryActivity类我们一定要放在”申请应用包名”+”.wxapi”底下,名字不能改动,不然肯定回调失败,最后一定不要忘了在清单文件里面注册
    支付结果

    清单文件注册

注册广播

在调起微信支付前先要注册你的微信ID,


private final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null);
msgApi.registerApp(Constants.WeixinPay.APP_ID);
 // 将该app注册到微信
msgApi.registerApp(Constants.WeixinPay.APP_ID);  

在WXPayEntryActivity会取到微信支付的支付结果(但是这个结果不能作为支付成功的通知,一定要通过统一下单的回调结果获取支付通知)

    @Override
    public void onResp(BaseResp resp) {
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            if (resp.errCode == -1) {
                Toast.makeText(WXPayEntryActivity.this, "支付失败,请确认您的手机微信登录正常", Toast.LENGTH_SHORT).show();
                finish();
            } else if (resp.errCode == -2) {
                Toast.makeText(WXPayEntryActivity.this, "取消支付", Toast.LENGTH_SHORT).show();
                finish();
            } else if (resp.errCode == 0){
                Toast.makeText(WXPayEntryActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
            }
//            AlertDialog.Builder builder = new AlertDialog.Builder(this);
//            builder.setTitle("提示");
//            builder.setMessage("微信支付结果" + String.valueOf(resp.errCode));
//            builder.show();
 }

现在说一下支付结果返回-1的问题,这个问题真是纠结了好久啊,如果你是按照上面的步骤来的话还出现-1的话,原因只有两个:
1.可能是后台返回给你的参数不正确导致支付失败,后台调起预支付接口的时候要注意中文乱码问题,二是注意总金额是int类型,单位是分,不能出现小数。后台出现的问题这个不好测,你要是确保不是签名不统一的问题的话,可以前台调一下统一下单的接口,自己测一下看看到底是不是后台问题,我在做的时候就出现了后台统一下单出了问题,结果我这边一直支付失败,后面我会上示例代码;
2:可能是你直接运行代码进行测试导致返回值错误,在测试地时候一定要用当初创建项目的那个keyStore签名过的apk进行测试,不然肯定返回-1
示例代码
http://download.csdn.net/detail/mik201408/9673182

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值