Intel 英特爾之開發人員專區 ------Android 開發之Android 應用程序如何調用支付寶接口

Android 開發之Android 應用程序如何調用支付寶接口

最近在做一個關於購物商城的項目,項目裏面付款這塊我選的是調用支付寶的接口,因爲用的人比較多。

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目錄結構 
圖1-1 libs目錄結構 
(2) 進入商戶應用工程的 Java Build Path,將 libs 目錄下的 jar 導入,如下圖。 
圖1-2 導入jar 
圖1-2 導入jar 
(3) 選中 Order and Export,勾選 3 個 jar 包,如下圖。 
圖1-3 勾選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集成支付寶接口我認爲比較快的過程就是這些了,祝你配置成功!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章