最近在做一個關於購物商城的項目,項目裏面付款這塊我選的是調用支付寶的接口,因爲用的人比較多。
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; |
08 |
public class PayDemoActivity extends FragmentActivity
{ |
11 |
public static final String
PARTNER = "" ; |
13 |
public static final String
SELLER = "" ; |
15 |
public static final String
RSA_PRIVATE = "" ; |
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集成支付寶接口我認爲比較快的過程就是這些了,祝你配置成功! |