终结《android开发集成微信支付》
Posted atuan_wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终结《android开发集成微信支付》相关的知识,希望对你有一定的参考价值。
终结《android开发集成微信支付》
本文章将结合开发先者的经验文献,完结微信常见的开发问题(第一次总结,望多多指导):
- 注册微信开发者帐号,添加应用并申请开通应用微信支付功能
- 仔细阅读微信平台提供的集成微信开发文档及相关文章
- 准备所需的jar包等资源文件
- 开始android集成微信支付开发
参考文献
- http://www.360doc.com/content/15/0214/10/7044580_448519997.shtml#(参考的文献)
- http://open.weixin.qq.com/zh_CN/htmledition/res/dev/document/sdk/ios/interface_w_x_api.html#a1ae34dd86ae2c2f553dd6981a35397ee(微信中文API文档)
开发经验总结
在我看来集成第三方的功能开发,需要秉承 读,解,套 三个具体的开发思路,当然一个好的开发者必备的就是拥有良好的开发思想。那么想要开发好第三方的集成,首先需读懂人家提供的规则,再解出思路,最后套用提供的标准案例进行功能的集成开发,(当然你要彻底理解了,套用也就省了) —— atuan
废话不多说,干正事!
android应用集成微信支付功能
-
一、准备
-
首先需要申请微信的开发者公众账号,创建所要集成功能的应用,这个过程需要微信官方的审核,等待审核完成后,就可以查看应用的详情,这应可以获取到应用对应的APP_ID,这个app_id在后面的开发中将会使用。其次下载微信提供的SDK包和案例。
二、读、解、套
-
步骤1、
- 首先通过阅读了解微信支付集成在应用中的场景、操作及相应原理(很重要仔细读)
-
场景介绍
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1 -
案例及规范
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_2 -
业务流程
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 -
APP端开发步骤说明
https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
步骤2、
- 当你理解里这些规则及操作后,跟着我的步骤来吧! (1)在你的应用启动时完成对微信的注册(一般在oncreate()方法中操作)
-
wxApi = WXAPIFactory.createWXAPI(this,”应用的app_id”);
- wxApi.registerApp(“应用的app_id”);
向微信注册自己的应用代码,例如:
@Override
protected void onCreate(Bundle savedInstanceState)
setContentView(R.layout.activity_order_sub);
//创建微信IWXAPI对象
wxApi = WXAPIFactory.createWXAPI(this, "应用的app_id");
wxApi.registerApp("应用的app_id");
super.onCreate(savedInstanceState);
-
(2)完成自己应用中的订单信息,向自己应用的后台请求调用微信支付的参数数据。(需要的字段)
- prepayid 、appid 、partnerid 、mpackage 、timestamp 、noncestr 、sign 等字段参数; (3)获得后台返回的参数信息后,拼装微信所需的参数数据,调用微信支付(在调用之前记得先判断是否安装微信,判断微信版本是否支持)
-
判断是否安装微信,判断微信版本是否支持代码,例如:
//判断微信是否安装是否支持微信支付
boolean sIsWXAppInstalledAndSupported = wxApi.isWXAppInstalled()
&& wxApi.isWXAppSupportAPI();
: 调起微信支付代码,例如:
//para是服务器返回回来的包含对应参数的对象
if (para != null)
PayReq req = new PayReq();
req.appId = para.appid;
req.partnerId = para.partnerid;
req.prepayId = para.prepayid;
req.nonceStr = para.noncestr;
req.timeStamp = para.timestamp;
req.packageValue = "Sign=WXPay";
req.sign = para.sign;
Toast.show(OrderSubActivity.this, "正常调起支付");
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
wxApi.registerApp("应用的app_id");//建议不要在这里去掉这个注册,因为到在一个手机上安装了两个微信,也就是现在流行的微信分身术,这时候你会发现微信调动不起来,就是需要再次注册以下。
wxApi.sendReq(req);
到这你的微信支付功能就已经完成一大半了。
-
(4)创建微信应用回调自己应用的类和接口
- 在这里不得不喷喷微信,太特么的霸道了竟然需要我们在自己的应用的包名对应的路径下创建一个名字为wxapi的文件夹,在文件夹里面创建一个类名为WXPayEntryActivity的activity类(作为支付结果页),并implements IWXAPIEventHandler接口,重写onReq(BaseReq req)和onResp(BaseResp resp)方法,这样当我们在微信中支付操作完成后,就可以在onResp(BaseResp resp)方法中的resp参数中获取到resp.errCode数据,我们根据这个参数的值就可以判断支付的状态,但是由于微信不能确保客户端给我们应用返回的值和返给我们后台的值是同步和确定的,所以我们不能以微信客户端返回的结果为准,应再去向自己应用的后台请求支付的最终结果,再进行后面的业务逻辑。(注意这个类是必要的,其他的想法你也别想了吧!)
-
resp.errCode参数的返回值对应的含义:
记得给权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE">
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
到这里,你应用的微信支付功能就集成完毕了。
-
步骤3、
- 调试, 注意:微信支付和分享等都需要生成签名包再测试(仅限Android,ios不需要)
Android开发集成微信支付常见的问题
如果你能严格按照我的总结进行微信支付的集成,那么你会发现一般不会有异常的问题。
-
1、回调遇到-1的问题或不能调起微信客户端等类似的问题
-
一般遇到这种情况,不用多想就是在你调用微信客户端时传入的参数有问题,这些参数都是自己应用的后台返回来的,要么就是你传给服务器的参数有问题导致后台服务器返回给你的数据出现问题,要么就是后台服务器生成参数时有问题。
-
2、待发现中。。。
-
android中集成微信开发也就这点东西,希望我的总结可以让大家获得帮助,不去跑弯路。还有就是如果那里表达的有问题,很高兴大家留言,我会及时更新,改正。
以上是关于终结《android开发集成微信支付》的主要内容,如果未能解决你的问题,请参考以下文章