赞
踩
签约地址:https://b.alipay.com/,
只有成为签约商户的开发者才能具备集成支付宝app支付的资格。
签约资料:1)营业执照 2)APP说明文档 3)商户经营信息、商户联系人等信息
必要时还需提供APP apk以备审核。审核通过后即可进行代码集成。
审核通过后,可得到支付宝分配的商户号等信息。
2.1 导入jar包资源
目前最新版支付宝开发jar包下载地址:http://download.csdn.net/detail/xiong_it/9566771
下载后将之拷贝libs目录,Eclipse会自动添加依赖,Android Studio需在app的gradle中添加一行
compile files('libs/alipaySdk-20160223.jar')
点击右上角:Sync Now,稍等片刻
2.2 修改AndroidManifest.xml清单
声明必要Activity
- <activity
- android:name="com.alipay.sdk.app.H5PayActivity"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
- <activity
- android:name="com.alipay.sdk.auth.AuthActivity"
- android:configChanges="orientation|keyboardHidden|navigation"
- android:exported="false"
- android:screenOrientation="behind" >
- </activity>
添加必要权限
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.3 添加支付宝混淆规则
- -libraryjars libs/alipaySDK-20160223.jar
-
- -keep class com.alipay.android.app.IAlixPay{*;}
- -keep class com.alipay.android.app.IAlixPay$Stub{*;}
- -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
- -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
- -keep class com.alipay.sdk.app.PayTask{ public *;}
- -keep class com.alipay.sdk.app.AuthTask{ public *;}
支付宝交互流程示意图
流程图白话版解释
支付宝的支付流程较之微信的支付流程图少了一步app服务器端订单的生成,但是在其demo代码中是推荐使用app服务器进行sign签名过程的,于是笔者索性是按照的微信支付的流程(微信支付交互流程)去集成的。
- params.put("money", payMoney);// 商品金额,单位:元
- params.put("goodsname", goodsName);// 商品名称
注意:支付宝支付的人民币单位和微信支付,银联支付稍有不同,需以:元 作为支付单位。其他两者支付单位为:分
其他参数均交给咱们app服务器处理即可,详细参数请点击:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1
这样做的好处:签名逻辑在服务器完成,app无需暴露公钥和私钥,更安全。同时也是demo中的推荐做法。
更详细的支付宝接入交互流程解释请点击:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1
支付调起代码(须在子线程)
- new Thread() {
- @Override
- public void run() {
- super.run();
- PayTask payTask = new PayTask(mActivity);
- String result = payTask.pay(signInfo, true);
- Message message = mHandler.obtainMessage();
- message.what = PAY_RESULT;
- message.obj = result;
- mHandler.sendMessage(message);
- }
- }.start();
支付处理代码(UI线程)
- /*支付宝支付结果码*/
- private static final String PAY_OK = "9000";// 支付成功
- private static final String PAY_WAIT_CONFIRM = "8000";// 交易待确认
- private static final String PAY_NET_ERR = "6002";// 网络出错
- private static final String PAY_CANCLE = "6001";// 交易取消
- private static final String PAY_FAILED = "4000";// 交易失败
-
- /*内部类,处理支付宝支付结果*/
- static class AliPayHandler extends Handler {
- private SoftReference<PayActivity> activitySoftReference;// 使用软引用防止内存泄漏
-
- public AliPayHandler(PayActivity activity) {
- activitySoftReference = new SoftReference<PayActivity>(activity);
- }
-
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- PayActivity activity = activitySoftReference.get();
-
- AliPayResult payResult = new AliPayResult((String) msg.obj);
- String resutStatus = payResult.getResultStatus();
- Log.d(TAG, "statusCode = " + resutStatus);
-
- if (resutStatus.equals(PAY_OK)) {
- activity.paySuccessed();
- } else if (resutStatus.equals(PAY_CANCLE)) {
- activity.payCanceled();
- } else if (resutStatus.equals(PAY_NET_ERR)) {
- activity.payFailed(NETWORK_ERR);
- } else if (resutStatus.equals(PAY_WAIT_CONFIRM)) {
- activity.payWaitConfirm();
- } else {
- activity.payFailed(UNKNOW_ERR);
- }
- }
- }

注:AliPayResult.java来自支付宝demo中的PayResult.java
至此,集成支付宝SDK结束。祝各位集成支付宝支付成功!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。