文档章节

Android集成微信支付

zyj_main
 zyj_main
发布于 2016/11/08 10:50
字数 1306
阅读 511
收藏 0

Android集成微信支付

 admin  5:45 pm  Android

0

如果要了解微信支付整个支付流程可以阅读我之前写的文章《手机App集成微信支付&支付宝-iOS&Android完整版》。
如果不想看文章的话可以直接到Github下载Demo源码。下载源码后只需要修改com.qinyejun.apppaydemo.wxapi.Constants.java文件中的相关账号即可运行。

开发者账号

要在App中集成微信支付的话,首先需要到微信开放平台注册开发者账号。注意是「微信开放平台」,而不是「微信公众平台」。微信公众平台是和公众号开发相关,微信开放平台提供App微信登陆,微信支付等接口。 想详细了解微信支付的同学请点击此链接访问官方文档。
账号注册完成后还需要通过开发者资质认证后,才能获得微信登录、智能接口、公众号第三方平台开发等高级能力。认证费用是300元/年,一年到期后再交钱审核。目前微信只支持企业认证,个人开发者是无法认证的。

微信商户平台

要获取支付权限,还需要登陆「微信商户平台」 和腾讯签约。签约需要扫描上传「营业执照」、「组织机构代码证」、「经营许可证/资格证」、「身份证」等信息。在微信商户平台可以进行查询交易订单,提现等功能。在此需要说明一下的是,微信商户平台和财付通数据其实是通的,在微信和财付通都可以看到同样的交易记录。

创建应用

登录微信开放平台,进入管理中心,创建移动应用。创建完成后你将得到应用的AppID和AppSecret。创建完应用以后还需要设置「开发信息」
点击「修改」,设置好「应用签名」、「应用包名」和下载地址等信息。
设置「应用签名」有一个坑需要注意:应用的MD5签名所有字母必须大写,如果用小写的话后面调用支付回一直返回 retcode=- 1 。

下载SDK

点击该链接到官方网站下载SDK及Demo

导入开发资源

将demo中libs目录下的libammsdk.jar文件导入到你的项目中。

Coding

注册App


IWXAPI msgApi = WXAPIFactory.createWXAPI(getActivity(), null);
msgApi.registerApp(Constants.APP_ID);

获取预支付信息PrePay并发起支付请求

微信支付和支付宝支付流程有些不一样,微信支付会在真正发起支付请求钱先发起PrePay(预支付)请求,然后利用PrePay发起支付请求。Demo中的PrePay是在客户端生成的,但是更加安全的方式是在服务端生成PrePay。我这里是在服务器端获取Prepay信息的,具体实现请查看文章《iOS&Android集成微信支付-Server篇》。返回的PrePay信息结构如下:
PrePay


LZApiUtil.getInstance().getApi().getPrepay(mOrder.getId(), new Callback() {
			
			@Override
			public void success(PrePayModel result, Response response) {
				if (result.getSuccess()) {
					req.appId = result.getAppid();
					req.partnerId = result.getPartnerid();
					req.prepayId = result.getPrepayid();
					req.nonceStr = result.getNoncestr();
					req.timeStamp = result.getTimestamp();
					req.packageValue = result.getPackage();
					req.sign = result.getSign();
					
					msgApi.registerApp(Constants.APP_ID);
					msgApi.sendReq(req);
				} else {
					Toast.makeText(getActivity(), "获取微信支付信息失败,请再次尝试", Toast.LENGTH_SHORT).show();
				}
			}
			
			@Override
			public void failure(RetrofitError arg0) {
				// TODO Auto-generated method stub
				
			}
		});

支付结果回调

微信SDK Sample中,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类。注意:包名或类名不一致会造成无法回调。比如我的包名为com.qinyejun.apppaydemo ,所以我将 WXPayEntryActivity.java文件放到包com.qinyejun.apppaydemo.wxapi下面。 回调代码如下:


	public void onResp(BaseResp resp) {
		Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

		if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
			
			if (resp.errCode == 0) {//success
				Toast.makeText(this, "恭喜您购买成功!", Toast.LENGTH_LONG).show();
				
				Intent i = new Intent(this,MainActivity.class);
				startActivity(i);
				
			} else {
				Toast.makeText(this, "支付失败:"+resp.errStr +";code=" + String.valueOf(resp.errCode) , Toast.LENGTH_LONG).show();
				finish();
			}
		}
	}

通知服务器支付成功

如果支付成功后,微信服务器会向你的服务器 notify URL 发起支付成功的请求。这样就可以在服务端实现一些相关的业务逻辑,比如标机订单为已支付,发短信给用户等。notify URL的具体实现请查看文章《iOS&Android集成微信支付-Server篇》

可能会遇到的错误

retcode一直返回-1/-2,请尝试以下解决方案:

  • 检查微信开放平台」应用签名「是否正确,并确保字母为大写。
  • 检查微信开放平台「包名」是否正确
  • 切换微信账号!切换微信账号!切换微信账号!这个实在是太坑人了,我在开发过程中真实遇到过的情况,各种方法都尝试过了,什么清缓存啊之类。快要崩溃的时候在某论坛上看到有人说切换微信账号可以了,抱着死马当活马医的心态试了下,竟然可以正常工作了。有兴趣可以到这个帖子里面看看微信留下的各种坑

查看完整代码请移步Github

其他相关文章

iOS集成支付宝-Swift版
iOS&Android集成支付宝-server篇(PHP)
iOS集成微信支付-Swift版
iOS&Android集成微信支付-Server篇(PHP)
Android集成微信支付
Android集成支付宝

如需转载请保留原文链接: http://www.qinyejun.com/android/android-wechatpay

© 著作权归作者所有

zyj_main
粉丝 0
博文 10
码字总数 25490
作品 0
成都
私信 提问
Android项目实战(五十):微信支付 坑总结

大部分APP必备需求,使用总结  Android接入文章在此:官方文档   文档很简单,Android分为四步: 1、后台配置 2、Android 内 注册appId 3、Android 内 调起支付 4、Android 内 支付结果回...

听着music睡
2018/08/30
0
0
Android开发:使用EasyPay打造全能移动支付框架

前言 在这之前,笔者发布了两篇移动app支付相关博文,得到一些关注,但是由于博文中代码零碎,有些读者私信博主,以及加笔者qq咨询相关问题。考虑到这些,笔者把之前项目中的支付相关代码从业...

MichaelX
2018/10/30
0
0
android产品二次开发

在已有的app产品基础上做二次开发: 1、对接13个接口(接口已经设计好,只需要对接,都是http请求,就是一般的发请求拿数据) 2、福利界面:只需要一个webview加载url就好 3、充值界面(集成...

电饭锅烧豆腐干
2017/08/23
73
1
提供Cordova android原生插件开发服务

android原生提供Cordova android原生插件开发服务,提供Cordova android原生插件 [产品功能] android原生表情键盘插件 android原生仿微信9图上传插件,解决cordova原本插件一次只能上传一张图...

panglongcl
2016/05/04
37
0
Android 微信支付无法调用微信客户端

项目中在开发 Android 原生 App 微信支付,在微信开放平台注册了 App 并认证,开通了微信支付。 参照官方文档开发,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 1、服务...

mymbrooks
2017/04/23
567
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA Maven project: 'xxx/pom.xml' already exists in VFS

Failed to create a Maven project: ‘xxx/pom.xml‘ already exists in VFS idea创建项目后,发现项目有问题,删除后重新创建,提示错误如下。 解决办法 1.通过idea打开任意一个项目 2.File...

国产大熊猫
今天
7
0
Flutter之 State 生命周期

State 的生命周期,指的是在用户参与的情况下,其关联的 Widget 所经历的,从创建到显示,再到更新最后到停止,直至销毁等各个阶段 不同的阶段涉及到特定的任务处理 State 的生命周期流程如下...

過愙
今天
12
0
零基础一年拿下BAT三家offer

背景 1、本人本科一本双非垫底的那种,硕士211。本硕电子通信,完全0基础,转行一年。 2、研一上第一学期上课+外派到老师合作公司写MATLAB。去年4月开始学习Java。 起步 1、实话说,刚决定转...

gzc426
今天
6
0
并行和并发的区别

并行和并发的区别 并行(Parallel)的重点在于同一时间点多个任务同时进行; 并发(Concurrent)的重点在于同一时间段有多个任务执行,不要求某个时间点有多个任务同时进行。...

StupidZhe
今天
42
0
java内存泄漏问题

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中。Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中...

Bb进阶
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部