您的位置:首页 > 移动开发 > Android开发

Android 开发之Android 应用程序如何调用支付宝接口

2016-02-05 21:52 671 查看

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();
view sourceprint?

1
5
、向支付宝申请签约
2
3
点击文章开头给的网址,直接点击“在线申请”,目的是为了获得PID与密钥,到时候你好按照文档配置你的PayDemoActivity.java文件。
4
5
申请要上传你的apk或者产品说明文档,我用的是产品说明文档,里面要包括产品说明(最好有产品截图,我第一次没截图直接没成功)、接口使用场景、资费说明。
6
7
申请成功后按文档上说明,做几个密钥什么的哈哈,上传你做的公钥。然后PayDemoActivity.java里面配置。这里要注意的是,String RSA_PRIVATE=“”;这里要用PKCS8格式的私钥。
8
9
好了,android集成支付宝接口我认为比较快的过程就是这些了,祝你配置成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: