Android--快速接入微信支付
来源:互联网 发布:供销社大数据集团 地点 编辑:程序博客网 时间:2024/05/17 19:15
前言
最近实习的时候要求我做支付模块,主要是介入支付宝支付和微信支付的。支付宝支付接入相对来说比较好做,官网文档也比较容易懂。但是做微信支付的时候,官网文档就有点懵逼了,不过慢慢读还是能够开通的。与是抽时间记录一下微信支付接入的过程。
这里我不去说明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--> <activity android:name=".wxapi.WXEntryActivity" 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、跳转微信进行支付
根据上面获取到的服务端的还回数据,调起微信支付,代码实例如下:
@Override public 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; @Override public 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(); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public 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说明如下:
常见坑位收集
Android微信支付彻底扫坑
Android 微信支付详解与坑
Android常见问题
- Android--快速接入微信支付
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- android微信支付快速接入详细教程
- Android 微信支付接入
- Android 接入微信支付
- Android 接入微信支付
- Android微信支付接入
- # Android微信支付接入
- Android 接入微信支付宝支付
- 设计模式六大原则
- 前端基础面试题,菜鸟必备
- EventBus3.0 使用
- Linux中epoll()函数的底层实现
- ViewPager的高度根据item的高度自适应
- Android--快速接入微信支付
- vs2015的程序在vs2013上运行出现:error MSB8020
- elasticsearch.net search使用指南
- mysql忘记root用户密码如何进行重置
- android4.4 编译SDK与使用
- iOS开发进阶
- 网络请求踩坑多
- Silver Cow Party (Dijkstra)
- iOS开发:icon和启动图尺寸