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; |
04 |
请 参考《移动支付接口SDK2.0标准版接入与使用规则》__(7.2 RSA密钥生成与使用),并使用压缩包中的openssl RSA密钥生成工具,生产一套RSA公私钥。 |
06 |
Note:为了安全起见,使用RSA私钥进行签名的操作过程,应该尽量放到商家服务器端去进行。 |
08 |
public class PayDemoActivity extends FragmentActivity { |
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 = ""; |
PayDemoActivity.java这个类等你申请支付宝签约成功后再配置,先放在这不用管,如何配置我注释里面已经写的很明白了。
然后是ExternalFragment.java这个类。这个类其实很简单,你运行这个demo会发现其实在PayDemoActivity.java类的onCreate()方法中填充的布局包含了ExternalFragment类,因此就会显示ExternalFragment类填充的布局,然后点击“支付”按钮,就会调用支付宝接口(因为PayDemoActivity.java未配置,所以你现在估计调用不成功)。我们找到按钮的点击事件的方法就找到调用支付宝的入口了,这个类的代码如下:
02 |
* call alipay sdk pay. 调用SDK支付 |
05 |
public void pay(View v) { |
07 |
String orderInfo = getOrderInfo("测试的商品", "该测试商品的详细描述", "0.01"); |
10 |
String sign = sign(orderInfo); |
13 |
sign = URLEncoder.encode(sign, "UTF-8"); |
14 |
} catch (UnsupportedEncodingException e) { |
19 |
final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" |
22 |
Runnable payRunnable = new Runnable() { |
27 |
PayTask alipay = new PayTask(PayDemoActivity.this); |
29 |
String result = alipay.pay(payInfo); |
31 |
Message msg = new Message(); |
32 |
msg.what = SDK_PAY_FLAG; |
34 |
mHandler.sendMessage(msg); |
39 |
Thread payThread = new Thread(payRunnable); |
现在,你已经知道代码是如何调用支付宝接口了。接下来的问题就是:如何把这些代码集成到你的项目中去?
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文件里面添加声明:
02 |
android:name="com.alipay.sdk.app.H5PayActivity" |
03 |
android:configChanges="orientation|keyboardHidden|navigation" |
04 |
android:exported="false" |
05 |
android:screenOrientation="behind" > |
08 |
android:name="com.alipay.sdk.auth.AuthActivity" |
09 |
android:configChanges="orientation|keyboardHidden|navigation" |
10 |
android:exported="false" |
11 |
android:screenOrientation="behind" > |
和权限声明:
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.* |
至此,SDK开发资源导入完成。
5.订单数据生成
在调用SDK支付时需要提交订单信息info,其中参数以key=“value”形式呈现,参数之间以“&”分割,所有参数不可缺。
6.支付接口调用
需要在新线程支付接口。(可参考alipay_demo来实现)
获取PayTask支付对象调用支付,代码实例:
01 |
final String orderInfo = info; // 订单信息 |
02 |
Runnable payRunnable = new Runnable() { |
05 |
PayTask alipay = new PayTask(DemoActivity.this); |
06 |
String result = alipay.pay(orderInfo); |
07 |
Message msg = new Message(); |
08 |
msg.what = SDK_PAY_FLAG; |
10 |
mHandler.sendMessage(msg); |
14 |
Thread payThread = new Thread(payRunnable); |
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(); |
· 异步通知
商户需要提供一个http协议的接口,包含在参数里传递给快捷支付,即notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url,以xml数据格式传输支付结果。
8.查询有效账号接口调用
调用PayTask对象的checkAccountIfExist()方法查询。(可参考alipay_demo来实现)。
代码示例:
01 |
Runnable checkRunnable = new Runnable() { |
04 |
PayTask payTask = new PayTask(DemoActivity.this); |
05 |
boolean isExist = payTask.checkAccountIfExist(); |
06 |
Message msg = new Message(); |
07 |
msg.what = SDK_CHECK_FLAG; |
09 |
mHandler.sendMessage(msg); |
12 |
Thread checkThread = new Thread(checkRunnable); |
9.获取当前SDK版本号
调用PayTask对象的getVersion()方法查询。
代码示例:
1 |
PayTask payTask = new PayTask(activity); |
2 |
String version = payTask.getVersion(); |
3 |
点击文章开头给的网址,直接点击“在线申请”,目的是为了获得PID与密钥,到时候你好按照文档配置你的PayDemoActivity.java文件。 |
5 |
申请要上传你的apk或者产品说明文档,我用的是产品说明文档,里面要包括产品说明(最好有产品截图,我第一次没截图直接没成功)、接口使用场景、资费说明。 |
7 |
申请成功后按文档上说明,做几个密钥什么的哈哈,上传你做的公钥。然后PayDemoActivity.java里面配置。这里要注意的是,String RSA_PRIVATE=“”;这里要用PKCS8格式的私钥。 |
9 |
好了,android集成支付宝接口我认为比较快的过程就是这些了,祝你配置成功! |
- android应用程序如何调用支付宝接口
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- android应用程序如何调用支付宝接口(转)
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- Android之应用程序怎样调用支付宝接口
http://blog.csdn.net/lilidejing/article/details/19483717 近期在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口.由于用的人比 ...
- Android开发之 Android应用程序详细解析
我们继续的沿用上一篇所建立的应用. Android应用程序可以分为:应用程序源代码(.java),应用程序描述文件(.xml),各种资源. 可以这么理解: 安卓应用程序,通过java代码来实现其业务逻 ...
- Android开发之 Android应用程序目录结构解析
建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...
- Android开发之 Android 的基本组件的概述
Android是一个为组件化而搭建的平台,它的应用是由一些零散的有联系的组件组成,并通过AndroidManifest.xml文件 把它们绑定起来. Android常用的组件有: Activity(活 ...
- Android开发之android:process=":remote"
由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象.在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将 ...
- Android开发之Android Material Design Toolbar自定义随笔
一.自定义Toolbar的menu: 在menu下新建menu.xml文件,自定义menu的样式: <menu xmlns:android="http://schemas.androi ...
- Android 开发之 Android 开发的起步
前言 Android 开发的起步 我们可以先来看看百科上面怎么说? 百度百科上 Android的介绍 一.Windows环境下在线搭建Android环境. 1. 下载 Android开发工具. JD ...
随机推荐
- [Ubuntu]明明白白安装中文字体
Ubuntu 6.06 dapper对中文的支持应该说是一向不错的,包括现在默认安装就包含了scim输入法.然而,一般安装的ubuntu虽然能够显示.输入中文了,但总觉 得所显示的中文像歪瓜裂枣,很是 ...
- 详细记录ASP.NET中的图象处理
最近做网站时,要求上传能加上水印,就研究了一下相关的功能.推荐一下程序人生的网站,大家也可以写一些开发感悟在上面.在使用ASP的时候,我们时常要借助第三方控件来实现一些图象功能.而现在,ASP.NET ...
- 用thinkphp操作session
写了一段代码,对session进行一些常用的操作: <?php namespace Home\Controller; use Think\Controller; class Demo1Contr ...
- 算法笔记_144:有向图强连通分量的Tarjan算法(Java)
目录 1 问题描述 2 解决方案 1 问题描述 引用自百度百科: 如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连 ...
- python发送邮件实例1
文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...
- js 函数节流throttle 函数去抖debounce
1.函数节流throttle 通俗解释: 假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯: 但是,你是个没耐心的人,你最多只会等待电梯停留一分钟: ...
- oracle 获取指定日期的第一天和最后一天
oracle 获取指定日期的第一天和最后一天 CreationTime--2018年8月21日17点56分 Author:Marydon 1.查询本月的第一天和最后一天 SELECT TO_CHA ...
- ubuntu——printk()函数总结,关于日志文件
我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况. 对程序的调试起到了很重要的作用. (下文中的日志级别和控制台日志控制级别 ...
- 分享阿里云SLB-负载均衡的实现基本原理架构
负载均衡技术原理浅析 https://help.aliyun.com/knowledge_detail/39444.html?spm=5176.7839438.2.6.XBbX5l 阿里定制版的LVC ...
- 【jQuery获取下拉框select、单选框radio、input普通框的值和checkbox选中的个数】
radio单选框:name属性相同 <input type="radio" id="sp_type" name="p_type" va ...