Android集成微信支付

来源:互联网 发布:加盟淘宝店可靠吗 编辑:程序博客网 时间:2024/05/16 10:34

如果不想看文章的话可以直接到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() {@Overridepublic 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();}}@Overridepublic 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) {//successToast.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

1 0
原创粉丝点击