前言

最近实习的时候要求我做支付模块,主要是介入支付宝支付和微信支付的。支付宝支付接入相对来说比较好做,官网文档也比较容易懂。但是做微信支付的时候,官网文档就有点懵逼了,不过慢慢读还是能够开通的。与是抽时间记录一下微信支付接入的过程。
这里我不去说明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. Oracle-No.04 Oracle视图加主键解决hibernate复合主键问题
  2. leetcode算法题--统计全为 1 的正方形子矩阵
  3. WWF系列之----关于Host与WorkflowInstance之间的通讯
  4. Sentinel 1.7.0 发布,支持 Envoy 集群流量控制
  5. 中国国家高速公路网详细布局
  6. 【Liunx】Linux 简介
  7. Openflow协议通信流程解读
  8. 李楠评华为Mate X/小米MIX Alpha:适合土豪做非主力手机用
  9. SAP License:你是怎么理解ERP的?
  10. 大数据面试都问些什么?
  11. Daily Scrum02 12.17
  12. kubernetes视频教程笔记 (26)-集群调度-节点亲和性
  13. 世界各国 MCC 和 MNC 列表
  14. 惠普HP DeskJet Ink Advantage 2777 驱动
  15. 如何通过 Apple Watch 解锁 Mac !
  16. 人为什么要学数学 ——数学意义的哲学思考
  17. 最小割问题-Karger‘s algorithm
  18. python字体大小快捷键_PyCharm(2019.1版本)用鼠标滚轮控制放大缩小字体
  19. layer 上传图片点击取消仍在加载_layer 点击弹出图片
  20. MTK modem log中判断SIM卡类型__2020.07.16

热门文章

  1. 苹果可弯曲屏幕新专利获准,折叠iPhone最快2020年现身?
  2. linux I/O 栈 预习(上)
  3. AI工程师职业规划和学习路线完整版
  4. 又一个很全的R资讯网站
  5. jQuery常用方法总结(转)
  6. Windows2003 企业版 + Sql Server2005手工调整数据库服务器内存
  7. Revit二次开发 - C#程序员的佳好选择
  8. 微软中文网,越办越好了!
  9. bitcount java_java-Long.bitCount()如何找到设置的位数?
  10. nginx 带宽_Nginx的Gzip功能