Android项目实战(五十):微信支付 坑总结

大部分APP必备需求,使用总结 

Android接入文章在此:官方文档

文档很简单,Android分为四步:

1、后台配置

2、Android 内 注册appId

3、Android 内 调起支付

4、Android 内 支付结果回调

详细流程总结:

1、后台配置

   这个让服务器同事去做就行,记得把项目APP的包名和签名文件给他

   包名在app目录下的build.gradle文件中可以查看,为applicationId 键的值

  签名就用微信官方给的签名工具获取

  注:有文章说这个工具获取的签名是错误的,经测试是正确的,所以放心用。

2、Android 内 注册appId

   这个比较简单,就是两行代码 , 放在发起支付的那个activity的onCreate里面注册即可

final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
// 将该app注册到微信
msgApi.registerApp("wxd930ea5d5a258f4f");

  注:有文章说createWXAPI(content,null) 写成 createWXAPI(content,false)

  实际上第二个参数null或者false都没关系,检测办法就是看一下msgApi.registerApp返回是不是true ,经测试,都为true

3、Android 内 调起支付

IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);

 操作一般为:

 客户端发送订单数据给服务器, 服务器进行处理之后,返回微信支付需要的这几个参数,客户端用这几个参数调起支付

 这个就是调起支付的操作,执行sendReq之后即可。

    注意:最好数据都由服务器返回,尽量不要在客户端写死。

4、Android 内 支付结果回调

   涉及一个Activity名为WXPayEntryActivity

   这个Activity可以从官方下载的demo中获取:地址

  注意:

  1、需要将这个Activity放到自己的项目中,放置的位置为包名.wxapi.WXPayEntryActivity.java

        加入你的包名为com.aaa.wx  ,则在目录com-aaa-wx下有一个wxapi的包 包里为这个WXPayEntryActivity文件

      结果目录就为:com.aaa.wx.wxapi.WXPayEntryActivity  

    这个位置一定要写对,否则调起支付调不出支付窗口

  2、将WXPayEntryActivity放到自己的项目中的时候,需要在AndroidManifest.xml中注册一下

   有文章说要写<intent-filter></intent-filter> , 经测试 现在的版本不需要也是可以的,跟调起支付失败没有关系

以上四步实现,正常来说就可以实现支付功能了,

支付结果从WXPayEntryActivity中的onResp方法中回调

publicvoidonResp(BaseRespresp){
      if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){
          Log.d(TAG,"onPayFinish,errCode="+resp.errCode);
          AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
          builder.setTitle(R.string.app_tip);
      }
}

--------------------------------------------------------------------微信支付排坑总结------------------------------------------------------------------------ 

 1、签名

    后台配置的签名要为release包的签名

  客户端检查的时候,需要打成release包,注意直接编译的debug包是没有签名的,所以会调取失败。

  检查方法:获取已经集成好微信支付的app(测试微信支付的app)的签名(用官方的签名获取app),和后台配置的对比,不一致导致支付调起失败。

2、WXPayEntryActivity

   这个Activity从官方demo中获取,放到自己的项目中,放置的位置必须为你的包名.wxapi下 , 具体查看上面集成第四步

   AndroidManifest.xml文件需要注册这个WXPayEntryActivity

3、包名

   检查项目包名和后台配置的包名是否一致

4、PayReq 对象参数错误

   服务器原因,导致返回的PayReq对象需要的参数出现问题,导致调起支付失败

  检测办法,对比iOS端,如果iOS也不可以发起支付,极有可能是服务器的问题,如果iOS端可以发起支付,则仍为客户端集成问题

5、微信客户端端缓存

   当你反复检查代码就是认为没有问题的时候,极有可能是微信缓存的问题。

   去手机设置---应用管理---微信---清除数据/缓存

    再发起支付就可以正常发起支付了。 

 (该问题一般是一开始代码有问题,调起支付失败,这时候微信账号上有订单缓存,然后你修改代码之后,代码正确了,仍然调起支付失败,就时这个订单缓存导致的)

 注意:

 打印WXPayEntryActivity的onResp方法的resp.errCode

 如果没有打印,说明可能是上述第二个和第四个问题

 如果打印值为-1 , 异常错误,则考虑为 第1 、 3  、5个问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

极简 Github 上手教程

随着你写的代码越来越多,就需要去管理这些代码,可能要在不同的电脑上编写同一份代码,可能要和别人合作开发,也可能想把项目分享给别人。更进一步地,你可能还会需要管理...

3237
来自专栏技术博客

MVC项目开发中那些用到的知识点(js css优化-- 合并和压缩)

在项目框架中,首先要引用很多css和js文件,80%的用户响应时间都是浪费在前端。而这些时间主要又是因为下载图片、样式表、JavaScript脚本、flash等...

2172
来自专栏乐沙弥的世界

快速安装及部署DRBD

1071
来自专栏24K纯开源

Windows下程序打包发布时的小技巧

一、背景     Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去。这个时候,快速确定这个程序到底依赖哪些动态链接库变得...

2746
来自专栏专知

Python网络爬虫与信息抽取笔记02 HTTP协议介绍

1392
来自专栏Java后端技术

GitLab配置ssh key

  当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选...

1213
来自专栏linux运维学习

linux学习第四十二篇:限定某个目录禁止解析php, 限制user_agent,PHP相关配置

限定某个目录禁止解析php 虚拟主机配置文件添加的核心配置内容: <Directory /data/wwwroot/111.com/upload> ...

2559
来自专栏Python研发

LInux50个基本命令

cd:(切换) vim:(创建文件)   vi:编辑文件 bc:(计算器)quit:退出计算器 mkdir:(创建目录)   mkdir -p:递归建立目录 r...

1653
来自专栏守望轩

Visual Studio 2008 每日提示(二十四)

#231、如何找到最后一次设置的环境保存的位置? 原文链接:Did you know… How to find what development settin...

3747
来自专栏游戏杂谈

rtx登录内网系统

公司内部使用rtx进行沟通和交流,经常遇到订餐的问题,用php写了一个订餐系统,实现rtx上点击链接打开系统就自动登录了,无需再次输入用户名和密码。

3591

扫码关注云+社区

领取腾讯云代金券