本文根據(jù)支付寶螞蟻金服官方API和Demo編寫,為博主實際項目開發(fā)中的經(jīng)驗總結(jié),不包含公司和個人有關(guān)信息,相關(guān)密鑰請同學(xué)們自己申請。

隨著智能手機的迅速普及,手機APP的功能也更加智能化,貼近我們的現(xiàn)實生活。也有更多的互聯(lián)網(wǎng)公司和企業(yè)選擇移動支付的功能,方便消費者可以快速購買他們的產(chǎn)品。其中國內(nèi)使用最多的是支付寶和微信支付,下面我們來了解一下在Android設(shè)備上怎么接入支付寶的服務(wù)。
- 創(chuàng)建應(yīng)用
- 獲得所需數(shù)據(jù)
- 集成開發(fā)環(huán)境
- 支付接入
創(chuàng)建應(yīng)用
第一步我們需要到開放平臺上去創(chuàng)建我們的應(yīng)用。

應(yīng)用頁面
獲得所需數(shù)據(jù)
這里我們還需要獲取一些支付功能所需要的ID和密鑰。

應(yīng)用的AppID

服務(wù)商PID
請務(wù)必妥善保管你應(yīng)用的私鑰和公鑰,以防丟失??!

由支付寶簽名生成工具生成的密鑰
集成開發(fā)環(huán)境
首先需要從開發(fā)平臺上下載支付寶SDK所用到的相關(guān)Jar包,下載完成后解壓可以得到一個我們需要的jar文件。

使用AndroidStudio新建一個Android項目,并在工程中引入我們的jar包。
compile files('libs/alipaySdk-20170309.jar')
另外我們還需要在proguard-project.txt文件下添加打包混淆的規(guī)則。
-libraryjars libs/alipaySDK-20150602.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
接著我們需要在AndroidManifast文件中引入相關(guān)權(quán)限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
最后添加兩個Activity聲明
```
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
```
到這里我們的支付寶SDK就集成好啦,接下來我們看看在項目里是怎么去調(diào)用他的。
##支付接入
>以下代碼均運行在沙盒環(huán)境下,實際部署請根據(jù)Demo中提示進行。
我們從官方提供的Demo中復(fù)制所有的Java文件到我們的項目里。因為官方為我們做了很完善的封裝,所以并不需要額外實現(xiàn)。復(fù)制過來后記得Mark一下項目,檢查有無包引用錯誤。
```
/** 應(yīng)用APPID */
public static final String APPID = "";
/** 商戶信息中的PID 點擊右上角頭像可以看商戶信息*/
public static final String PID = "";
/** 支付寶登錄功能所用的參數(shù),這里可以不填 */
public static final String TARGET_ID = "";
/** 私鑰,RSA2算法生成的私鑰 推薦使用*/
public static final String RSA2_PRIVATE = "";
/** RSA算法生成的私鑰 官方已不推薦*/
public static final String RSA_PRIVATE = "";
```
在`PayDemoActivity`文件中,我們需要注意上述的變量。這里我重新修改了一下他們的注釋,方便各位理解。

最后我們需要關(guān)注的是`OrderInfoUtil2_0`文件的buildOrderParamMap方法,該方法用于構(gòu)建訂單的詳細(xì)信息,這里開發(fā)者可以根據(jù)[*官方文檔*](https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.x7kkCI&treeId=204&articleId=105465&docType=1)進行相應(yīng)的修改。最后是集成完成后彈出的支付界面。

##FAQ
**1、博主可以提供完整的Demo下載么?**
不好意思哈,因為這里包含了項目相關(guān)內(nèi)容,故無法提供詳細(xì)Demo供下載,有不明白的地方歡迎在下方留言!
**2、RSA2的私鑰改怎么申請?**
這個請根據(jù)官方給出的文檔說明,下載簽名軟件進行生成,流程較長這里我就不一一說明了,不過官方給的說明還是很詳細(xì)的哈!
**3、為什么我支付時顯示40247錯誤?**
可能是APPID沒有支付權(quán)限的問題,請檢查APP是否擁有APP支付接口的權(quán)限。如果已經(jīng)簽約了APP支付接口,請檢查商戶公鑰是否上傳到對應(yīng)的appid應(yīng)用下,檢查上傳的商戶公鑰和商戶私鑰是否匹配。