前言

最近实习的时候要求我做支付模块,主要是介入支付宝支付和微信支付的。支付宝支付接入相对来说比较好做,官网文档也比较容易懂。但是做微信支付的时候,官网文档就有点懵逼了,不过慢慢读还是能够开通的。与是抽时间记录一下微信支付接入的过程。
这里我不去说明AppID申请的过程,主要记录一下开发过程。

微信支付

首先一定要清楚微信支付业务流程,这样接下来就事半功倍了。
主要官方文档看这:

  • 业务流程
  • APP端开发步骤
  • Android资源下载
  • API列表

业务流程如下:

微信支付业务流程

这里我大致用自己的理解把App客户端的流程分为四步

1、统一下单

商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付。

客户端将支付信息上传给公司服务端。首先根据具体公司的需求,上传支付信息给服务端,然后接收服务端还回结果。我们客户端只需要发送相应的请求提给服务端即可。
更多具体内容参考微信APP支付文档-统一下单

2、调起支付接口

APP端调起支付的参数列表

根据前一步得到的还回结果跳转至微信客户端进行支付操作

3、用户进行微信支付操作

进入微信支付页面后可以能会有:输入密码支付,取消支付,支付失败等操作

4、微信客户端回调支付结果详情给我们的APP客户端

完整示例

1、引入微信支付资源

1、引入微信支付依赖

在build.gradle文件中,添加如下依赖即可:

dependencies {compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

详情参考Android资源下载

2、配置WXPayEntryActivity

1、首先我们下载下来官网的demo然后copy其中的一个WXPayEntryActivity类放到 app包下新建一个wxapi包 里面。

注意是WXPayEntryActivity不是WXEntryActivity,WXEntryActivity是微信分享的, WXPayEntryActivity才是支付的

这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。请务必保证在你项目下他的结果目录为:
开放平台绑定的商户应用包名 + wxapi + WXPayEntryActivity

开放平台绑定的商户应用包名

2、AndroidManifest.xml中注册

    <!--wx pay所需权限--><uses-permission   android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--wx pay--><activityandroid:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop"/>

3、发送支付信息给服务端

跟服务端协调需要我们客户端传递什么信息过去。详细请求参数参考API列表-统一下单
我这里,只需要传递一些和服务端协商好的数据,其他金额等都是在服务端处理好的。然后服务端还回预支付交易给我们客户端

        WXPayReq wxPayReq=new WXPayReq();wxPayReq.setUser_id(User_id);wxPayReq.setChannel_id(Channel_id);wxPayReq.setGoods_id(goodsID);

3、跳转微信进行支付

根据上面获取到的服务端的还回数据,调起微信支付,代码实例如下:

@Overridepublic void wxpay(Context context, WXPayRsp wxPayRsp, IPayListener iPayListener) {this.iPayListener = iPayListener;IWXAPI api= WXAPIFactory.createWXAPI(context, Constants.APP_ID);api.registerApp(Constants.APP_ID);PayReq payReq=new PayReq();payReq.appId=Constants.APP_ID;payReq.partnerId=wxPayRsp.getPartnerid();payReq.prepayId=wxPayRsp.getPrepayid();payReq.packageValue="Sign=WXPay";payReq.nonceStr=wxPayRsp.getNoncestr();payReq.timeStamp=wxPayRsp.getTimestamp();payReq.sign=wxPayRsp.getSign();api.sendReq(payReq);}

具体请求参数如下:

调起支付接口参数

每次调用微信支付的时候都会校验 appid 、包名 和 应用签名的。 这三个必须保持一致才能够成功调起微信!!! (这个bug害我浪费一下午时间!api.sendReq接口,返回true,但微信客户端并未启动,后来产品给后台的appid和给我的不同才知道错误在这)

4、微信客户端回调支付结果处理

我是直接copy的官网demo里面WXPayEntryActivity类的,然后根据自己的需要删除了一些不必要的东西。其实我们可以安装微信官网给的demo和文档编写我们自己打WXPayEntryActivity,我的示例如下:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{private IWXAPI api;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);try {api.handleIntent(getIntent(), this);} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {}@Overridepublic void onResp(BaseResp resp) {int result = 0;//有时候支付结果还需要发送给服务器确认支付状态if (resp.getType()== ConstantsAPI.COMMAND_PAY_BY_WX){if (resp.errCode==0){Toast.makeText(this,"支付成功",Toast.LENGTH_LONG).show();}else if (resp.errCode==-2){Toast.makeText(this,"取消支付",Toast.LENGTH_LONG).show();}else {Toast.makeText(this,"支付失败",Toast.LENGTH_LONG).show();}finish();}}}

errCode说明如下:

名称 描述 解决方案
0 成功 展示成功页面
-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。

填坑日记

卸载重装微信或者清空数据保平安

  • 因为业务调整,公司微信接口改变,加上一些其他app的变更。发现之前明明好好通过支付的,结果出现了问题。还回错误为-1。后来换个测试机一搞就通过了,在测试机中引起微信支付失败的原因竟然是,缓存没有清空导致的。因为包名是一致,然后我的app里面还是用到了webview内嵌。心里有句mmp不知道当讲不当讲
  • 发正式宝的时候微信开发平台填写的签名改了之后,微信掉不起来,后来同样卸载微信就好了。这句mmp我一定要讲

常见坑位收集

Android微信支付彻底扫坑
Android 微信支付详解与坑
Android常见问题

作者:Swy2w
链接:https://www.jianshu.com/p/f577ab65f731
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android--快速接入微信支付相关推荐

  1. Android 快速实现微信支付(真的!很快!)

    Android 快速实现微信支付(真的!很快!) 阅读 6502收藏 5022016-4-21 原文链接:http://www.jianshu.com/p/c97639279d2e 如果你已经成功集成 ...

  2. uni-app - 最详细 H5 网页接入微信支付功能,提供从详细的示例代码与注释(移动端网页实现微信支付能力,微信公众号前端支付 JSAPI / JS-SDK 详细示例源码)官方最新超级详细教程

    前言 关于 uni-app 项目中接入微信支付的文章鱼龙混杂,各种 JSAPI / JS-SDK 乱代码.过时.没注释.不讲流程原理,非常难用. 本文实现了 uni-app H5 移动端网页项目,实现 ...

  3. Java接入微信支付APIV3(Native)

    Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信"扫一扫"完成支付的模式. 一.准备工作 微信商户平台 微信支付 - 中国领先的第三方支付平台 | 微信支付提 ...

  4. Android 调用第三方微信支付

    好久没写东西了,恰逢最近做三方支付,听身边很多开发的朋友说都被微信坑过,就把过程记录下,避免以后再碰到类似的坑. 第一步: 其实第一步实在是没什么好说明的,到微信开放平台填写相应的资料即可. 然后申请 ...

  5. Android 支付宝以及微信支付快速接入流程

    一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成!1.首先,我们需要前往支付宝开放平台,申 ...

  6. android快速集成微信分享支付

    前言 最近公司的项目中有又又又又微信分享和支付的功能,每次我都会重新集成,为了方便以后的开发,以及方便各位同仁的开发,整合了这次开发的一些点滴,方便亲们快速集成微信分享和支付. 参考文档 –1.微信官 ...

  7. android实现第三方支付,Android开发第三方APP接入微信支付

    前言 在APP中接入微信支付其实很简单,大部分工作主要都是后台完成,客户端只需要调用后台,得到后台返回的字符串后在调用微信的api即可.但是会有些坑,稍不注意就会掉坑里,下面会讲到. 一. 接入流程 ...

  8. php接入微信支付,扫码支付和H5支付(非微信浏览器),基于thinkPHP框架 WeChatDeveloper支付类包 踩坑指南

    此文章入选<PHP领域内容榜>第4名 文章介绍 本文主要介绍通过thinkPHP5和第三方支付类包(WeChatDeveloper)实现快速接入微信扫码支付和微信H5手机网站支付(非微信浏 ...

  9. 阿里多个App已接入微信支付;Facebook年薪中位数170万元;恶意软件感染超1000万台安卓设备 | EA周报...

    EA周报 2021年9月30日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.恶意软件感染超1000万台安卓设备 2.阿里回应App接入微信支付:会继续 ...

  10. Payment Spring Boot 1.0.2.RELEASE 发布,接入微信支付分、先享卡功能

    Payment Spring Boot 是微信支付V3的Java实现,仅仅依赖Spring内置的一些类库.配置简单方便,可以让开发者快速为Spring Boot应用接入微信支付. 演示例子:https ...

最新文章

  1. 【Interfacenavigation】XML中的字体(27)
  2. RMAN 系列(二) ---- RMAN 设置和配置
  3. Android studio如何使用SVN进行版本控制?
  4. Recordset.State 属性
  5. Vulhub 靶场下载使用
  6. android虚线边框_Android实现代码画虚线边框背景效果
  7. Web笔记-session盗用安全问题(Spring Boot获取所有session及提高安全性)
  8. Java工作笔记-Spring Boot上传图片并显示
  9. cp210x驱动怎么安装_电脑声卡驱动怎么安装,教你三步搞定声卡驱动
  10. CentOS 系列安装 Docker
  11. HDUOJ-----X问题
  12. 如何攻克 Android 调试难题?| 技术头条
  13. 分享一个网盘:千脑网
  14. AXD Debugger
  15. python小程序源码合集
  16. [Open3D ERROR] GLFW Error: WGL: Failed to make context current解决方案
  17. 百面机器学习01-特征工程
  18. 西安某1000M3浮顶油罐设计(成品油库1000m³油罐设计与制造工艺)
  19. python执行pip install 命令的时候报错 Filexxxx,line 1 pip install 的问题
  20. 从记账软件看工具类APP的存量运营之道

热门文章

  1. 判断浏览器是否为IE和版本
  2. requests库入门09-OAUTH认证
  3. 刷新页面微信二维码图片随机换,点击按钮自动复制对应微信号
  4. syslinux 制作多系统启动U盘
  5. python序列切片
  6. android button的selector
  7. 笔试题--Multicore简答题(下)
  8. 关注BLUEBEE的浏览器发展
  9. 启动spark shell
  10. MyEclipse2014破解