1、到支付宝官网,下载支付宝集成开发包

由于android设备一般用的都是无线支付,所以我们申请的就是支付宝无线快捷支付接口。下面是申请的地址以及下载接口开发包的网址:https://b.alipay.com/order/productDetail.htm?productId=2014110308141993(如果链接失效,你可以到支付宝官网商家服务模块中找到 快捷支付(无线)这个服务。) 
 

下载集成开发包(http://download.alipay.com/public/api/base/WS_MOBILE_PAY_SDK_BASE.zip),解压发现里面有三个文件夹,打开其中“移动支付接口SDK2.0标准版(20150121)”文件夹,你将看到“DEMO”文件夹即说明文档,在打开“DEMO”文件夹,会看到“客户端的demo”文件夹,在客户端的demo中又有两个压缩包,分别是Android、IOS使用的,解压Android使用的压缩包,你将看到“alipay_demo”、“alipay-sdk-common”文件夹,这个就是你要用的支付宝接口及demo。 
 
↓ 
 
↓ 
 
↓ 
 
↓ 
 
把“alipay_demo”项目导入到Eclipse中,run一下;成功之后,好好的研究研究该demo,至于到时候如何集成到你的项目里面,文档上说明很详细,按着文档上一步一步来就行了。我的建议是先把这个demo弄懂再设计你的项目,看看调用接口是需要哪些数据,这样也有利于你一开始设计数据。

2、介绍接口demo里面的结构

· 打开项目会发现里面有5个类: 
 
其中,Base64.java、PayResult.java、SignUtils.java这三个类不需要动,到时候直接放到项目里面就行了,如果你想了解它们也可以看看。重点就是ExternalFragment.java和PayDemoActivity.java这两个类。先来说说PayDemoActivity.java类。

01 package com.alipay.sdk.pay.demo;
02  
03 /*
04    请 参考《移动支付接口SDK2.0标准版接入与使用规则》__(7.2 RSA密钥生成与使用),并使用压缩包中的openssl RSA密钥生成工具,生产一套RSA公私钥。
05    这里签名时,只需要使用生成的RSA私钥。
06    Note:为了安全起见,使用RSA私钥进行签名的操作过程,应该尽量放到商家服务器端去进行。
07    */
08 public class PayDemoActivity extends FragmentActivity {
09  
10     //商户PID(合作身份者id,以2088开头的16位纯数字,这个你申请支付宝签约成功后就会看见)
11     public static final String PARTNER = "";
12     //商户收款账号(这里填写收款支付宝账号,即你付款后到账的支付宝账号)
13     public static final String SELLER = "";
14     //商户私钥,pkcs8格式(商户私钥,自助生成,即rsa_private_key.pem中去掉首行,最后一行,空格和换行最后拼成一行的字符串,rsa_private_key.pem这个文件等你申请支付宝签约成功后,按照文档说明你会生成的,如果android版本太高,这里要用PKCS8格式用户私钥,不然调用不会成功的,那个格式你到时候会生成的,表急。)
15     public static final String RSA_PRIVATE = "";
16     //支付宝公钥(支付宝(RSA)公钥,用签约支付宝账号登录ms.alipay.com后,在密钥管理页面获取;或者文档上也有。  )
17     public static final String RSA_PUBLIC = "";
18 }

PayDemoActivity.java这个类等你申请支付宝签约成功后再配置,先放在这不用管,如何配置我注释里面已经写的很明白了。

然后是ExternalFragment.java这个类。这个类其实很简单,你运行这个demo会发现其实在PayDemoActivity.java类的onCreate()方法中填充的布局包含了ExternalFragment类,因此就会显示ExternalFragment类填充的布局,然后点击“支付”按钮,就会调用支付宝接口(因为PayDemoActivity.java未配置,所以你现在估计调用不成功)。我们找到按钮的点击事件的方法就找到调用支付宝的入口了,这个类的代码如下:

01 /**
02      * call alipay sdk pay. 调用SDK支付
03      *
04      */
05     public void pay(View v) {
06         // 订单
07         String orderInfo = getOrderInfo("测试的商品""该测试商品的详细描述""0.01");
08  
09         // 对订单做RSA 签名
10         String sign = sign(orderInfo);
11         try {
12             // 仅需对sign 做URL编码
13             sign = URLEncoder.encode(sign, "UTF-8");
14         catch (UnsupportedEncodingException e) {
15             e.printStackTrace();
16         }
17  
18         // 完整的符合支付宝参数规范的订单信息
19         final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"
20                 + getSignType();
21  
22         Runnable payRunnable = new Runnable() {
23  
24             @Override
25             public void run() {
26                 // 构造PayTask 对象
27                 PayTask alipay = new PayTask(PayDemoActivity.this);
28                 // 调用支付接口,获取支付结果
29                 String result = alipay.pay(payInfo);
30  
31                 Message msg = new Message();
32                 msg.what = SDK_PAY_FLAG;
33                 msg.obj = result;
34                 mHandler.sendMessage(msg);
35             }
36         };
37  
38         // 必须异步调用
39         Thread payThread = new Thread(payRunnable);
40         payThread.start();
41     }

现在,你已经知道代码是如何调用支付宝接口了。接下来的问题就是:如何把这些代码集成到你的项目中去?

3、写好你的项目

4、如何将支付宝接口集成到你的项目当中

1.解压接口压缩文件(文件名是WS_MOBILE_PAY_SDK_BASE.zip),找到安卓的压缩文件(文件名是支付宝移动支付SDK标准版(Android).zip)。标准SDK以jar包方式提供给商户应用工程集成,打开alipay-sdk-common文件夹分别是alipaysdk.jar、alipaysecsdk.jar、alipayutdid.jar这三个jar包。 
2.导入开发资源 
(1) 将这 3 个 jar 包放入商户应用工程的 libs 目录下,如下图。 
 
图1-1 libs目录结构 
(2) 进入商户应用工程的 Java Build Path,将 libs 目录下的 jar 导入,如下图。 
 
图1-2 导入jar 
(3) 选中 Order and Export,勾选 3 个 jar 包,如下图。 
 
图1-3 勾选3个jar包 
3.修改Manifest文件 
在商户应用工程的AndroidManifest.xml文件里面添加声明:

01 <activity
02     android:name="com.alipay.sdk.app.H5PayActivity"
03     android:configChanges="orientation|keyboardHidden|navigation"
04     android:exported="false"
05     android:screenOrientation="behind" >
06 </activity>
07 <activity
08     android:name="com.alipay.sdk.auth.AuthActivity"
09     android:configChanges="orientation|keyboardHidden|navigation"
10     android:exported="false"
11     android:screenOrientation="behind" >
12 </activity>

和权限声明:

1 <uses-permission android:name="android.permission.INTERNET" />
2 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
4 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
5 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
6 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

4.添加混淆规则 
在商户应用工程的proguard-project.txt里添加以下相关规则:

01 -libraryjars libs/alipaysdk.jar
02 -libraryjars libs/alipaysecsdk.jar
03 -libraryjars libs/alipayutdid.jar
04 -keep class com.alipay.android.app.IAlixPay{*;}
05 -keep class com.alipay.android.app.IAlixPay$Stub{*;}
06 -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
07 -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
08 -keep class com.alipay.sdk.app.PayTask{ public *;}
09 -keep class com.alipay.sdk.app.AuthTask{ public *;}
10 -keep class com.alipay.mobilesecuritysdk.*
11 -keep class com.ut.*

至此,SDK开发资源导入完成。 
5.订单数据生成 
在调用SDK支付时需要提交订单信息info,其中参数以key=“value”形式呈现,参数之间以“&”分割,所有参数不可缺。 
6.支付接口调用 
需要在新线程支付接口。(可参考alipay_demo来实现) 
获取PayTask支付对象调用支付,代码实例:

01 final String orderInfo = info; // 订单信息
02 Runnable payRunnable = new Runnable() {
03     @Override
04     public void run() {
05         PayTask alipay = new PayTask(DemoActivity.this);
06         String result = alipay.pay(orderInfo);
07         Message msg = new Message();
08         msg.what = SDK_PAY_FLAG;
09         msg.obj = result;
10         mHandler.sendMessage(msg);
11     }
12 };
13 // 必须异步调用
14 Thread payThread = new Thread(payRunnable);
15 payThread.start();

7.支付结果获取和处理 
调用pay方法支付后,将通过2种途径获得支付结果: 
· 同步返回 
商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。(可参考alipay_demo来实现) 
代码示例:

1 private Handler mHandler = new Handler() {
2     public void handleMessage(Message msg) {
3         Result result = new Result((String) msg.obj);
4         Toast.makeText(DemoActivity.this, result.getResult(),
5         Toast.LENGTH_LONG).show();
6     };
7 };

· 异步通知 
商户需要提供一个http协议的接口,包含在参数里传递给快捷支付,即notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url,以xml数据格式传输支付结果。 
8.查询有效账号接口调用 
调用PayTask对象的checkAccountIfExist()方法查询。(可参考alipay_demo来实现)。 
代码示例:

01 Runnable checkRunnable = new Runnable() {
02     @Override
03     public void run() {
04         PayTask payTask = new PayTask(DemoActivity.this);
05         boolean isExist = payTask.checkAccountIfExist();
06         Message msg = new Message();
07         msg.what = SDK_CHECK_FLAG;
08         msg.obj = isExist;
09         mHandler.sendMessage(msg);
10     }
11 };
12 Thread checkThread = new Thread(checkRunnable);
13 checkThread.start();

9.获取当前SDK版本号 
调用PayTask对象的getVersion()方法查询。 
代码示例:

1 PayTask payTask = new PayTask(activity);
2 String version = payTask.getVersion();
1 5、向支付宝申请签约
2  
3 点击文章开头给的网址,直接点击“在线申请”,目的是为了获得PID与密钥,到时候你好按照文档配置你的PayDemoActivity.java文件。
4  
5 申请要上传你的apk或者产品说明文档,我用的是产品说明文档,里面要包括产品说明(最好有产品截图,我第一次没截图直接没成功)、接口使用场景、资费说明。
6  
7 申请成功后按文档上说明,做几个密钥什么的哈哈,上传你做的公钥。然后PayDemoActivity.java里面配置。这里要注意的是,String RSA_PRIVATE=“”;这里要用PKCS8格式的私钥。
8  
9 好了,android集成支付宝接口我认为比较快的过程就是这些了,祝你配置成功!

最新文章

  1. float导致父级元素塌陷的问题
  2. WEB进度条控件
  3. 搭建 SubversionEdge for VS
  4. PowerDesigner给两个表添加reference,中间显示外键信息步骤
  5. JavaScript原型链问题
  6. eNSP的使用
  7. ooj1057: M的整数倍DP
  8. hdu5883 The Best Path(欧拉路)
  9. NotePad++相关设置
  10. intelli IDEA node开发代码提示问题
  11. [转载]C++异常机制的实现方式和开销分析
  12. Selenium 入门
  13. PHPcurl抓取AJAX异步内容(转载)
  14. j2ee安全介绍--转
  15. MyEclipse6.5安装SVN插件的三种方法
  16. Pip 安装 出现UnicodeEncodeError: &#39;ascii&#39; codec can&#39;t encode characters in position 1-5: ordinal not in
  17. PRINCE2认证
  18. 微信小程序之两个页面传值
  19. 解决 vmware workstations 14 开启虚拟机黑屏
  20. VirboxLM许可管理平台,一站式软件保护解决方案

热门文章

  1. 如何获取Android唯一标识(唯一序列号)
  2. django cookie and session
  3. 是否 whether ,if
  4. 小课堂week16 编程范式巡礼第一季 三大基石
  5. SpringMVC基于代码的配置方式(零配置,无web.xml)直接继承WebMvcConfigurerAdapter
  6. (LeetCode 53)Maximum Subarray
  7. mysql查找数据库中是否已经存在某张表
  8. NFS服务的配置与应用
  9. thinkphp session如何取数组
  10. Geolocation 地理定位