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集成支付宝接口我认为比较快的过程就是这些了,祝你配置成功!

Android 开发之Android 应用程序如何调用支付宝接口的更多相关文章

  1. android应用程序如何调用支付宝接口

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  2. android应用程序如何调用支付宝接口(转)

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  3. Android之应用程序怎样调用支付宝接口

    http://blog.csdn.net/lilidejing/article/details/19483717 近期在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口.由于用的人比 ...

  4. Android开发之 Android应用程序详细解析

    我们继续的沿用上一篇所建立的应用. Android应用程序可以分为:应用程序源代码(.java),应用程序描述文件(.xml),各种资源. 可以这么理解: 安卓应用程序,通过java代码来实现其业务逻 ...

  5. Android开发之 Android应用程序目录结构解析

    建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...

  6. Android开发之 Android 的基本组件的概述

    Android是一个为组件化而搭建的平台,它的应用是由一些零散的有联系的组件组成,并通过AndroidManifest.xml文件 把它们绑定起来. Android常用的组件有: Activity(活 ...

  7. Android开发之android:process=":remote"

    由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将 ...

  8. Android开发之Android Material Design Toolbar自定义随笔

    一.自定义Toolbar的menu: 在menu下新建menu.xml文件,自定义menu的样式: <menu xmlns:android="http://schemas.androi ...

  9. Android 开发之 Android 开发的起步

    前言  Android 开发的起步 我们可以先来看看百科上面怎么说? 百度百科上 Android的介绍 一.Windows环境下在线搭建Android环境. 1. 下载 Android开发工具. JD ...

随机推荐

  1. 最新office2003密钥

    Microsoft Office Professional Edition 2003GWH28-DGCMP-P6RC4-6J4MT-3HFDY Office2003序列号注册码sn: WFDWY-XQ ...

  2. [Todo] 乐观悲观锁,自旋互斥锁等等

    乐观锁.悲观锁.要实践 http://chenzhou123520.iteye.com/blog/1860954 <mysql悲观锁总结和实践> http://chenzhou123520 ...

  3. 自动签到升级版(JS实现的每日定时任务)

    公司规定每日签到两次:日子太安逸了,有时候中午居然会忘记签到…… 于是,笔者寻思写一个自动签到的脚本:每天指定两个签到时段,每次打开页面,先检测当前是否为签到时段,如果在签到时段,则检查cookie中 ...

  4. Node.js:get/post请求、全局对象、工具模块

    一.GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交.表单提交到服务器一般都使用 GET/POST 请求. 1.获取GET请求内容 由于GET请求直接被嵌入在路径 ...

  5. 刷新SqlServer所有视图元数据的存储过程

    摘自: http://www.cnblogs.com/yashen/archive/2004/12/23/81000.html 我们在使用SqlServer时经常遇到这种情况,当修改某个表的结构后,相 ...

  6. hdu5297 Y sequence(容斥原理+迭代)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5297 题意:给定整数n和整数r,在1.2.3.4.5.......的序列中删掉能够开2次方的数,3次方的数 ...

  7. Packagist / Composer 中国全量镜像

    用法: 有两种方式启用本镜像服务: 将配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置).见“例1 (推荐方式)” 将配置信息添加到单个项目的 composer. ...

  8. SSIS实践入门3:把SSIS程序包从A电脑到B电脑的转移

    接触SSIS已经有几天了,之前一直是在A电脑做一些demo和修改一些之前的SSIS程序.这次在包中拖入了一个脚本任务,但是在A电脑打开编辑一直打不开,如下图所示 在B电脑就可以打开SSIS脚本编辑器 ...

  9. VC中关于预编译头文件的概括,以及无法打开预编译头文件的错误解决

    1.预编译头文件 在VC中编译器一般都是以文件为单位进行编译,如果修改了工程中的一个文件,那么将导致所有文件都要从新编译,这样的编译将耗费很长时间.为了提高编译速度,将那些不常被修改,比较稳定,文件单 ...

  10. keytool命令总结

    keytool 命令总结 一.创建数字证书 交互模式 使用默认的密钥库.keystore(目录是c: Documents and Setting用户名)和算法(DSA) keytool -genkey ...