Android移動支付(支付寶支付2016最新接入詳解)
接入流程
一:公司開通支付寶商戶號
二:註冊登入螞蟻金服開放平臺建立應用
三:專案整合支付寶SDK
一:公司開通支付寶商戶號
二:註冊登入螞蟻金服開放平臺建立應用
1 建立應用
2 應用環境設定
應用公鑰配置 點選支付寶的祕鑰生成器
AES祕鑰點選生成即可
上線和新增支付功能
選擇APP支付,確定後會提示需要簽約,進行簽約就是了
點選上線,簽約涉及到公司資訊的就交給人事去弄吧
三:專案中整合支付寶SDK
修改Manifest
在商戶應用工程的AndroidManifest.xml檔案裡面新增宣告:
<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>
和許可權宣告:
<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" />
新增混淆規則
在商戶應用工程的proguard-project.txt裡新增以下相關規則:
-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 *;}
至此,開發包開發資源匯入完成。
支付介面呼叫
需要在新執行緒中呼叫支付介面。(可參考alipay_demo實現)
獲取PayTask支付物件呼叫支付(支付行為需要在獨立的非ui執行緒中執行),程式碼示例:
final String orderInfo = info; // 訂單資訊
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(DemoActivity.this);
String result = alipay.payV2(orderInfo,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須非同步呼叫
Thread payThread = new Thread(payRunnable);
payThread.start();
支付結果獲取和處理
呼叫pay方法支付後,將通過2種途徑獲得支付結果:
同步返回
商戶應用客戶端通過當前呼叫支付的Activity的Handler物件,通過它的回撥函式獲取支付結果。(可參考alipay_demo實現)
程式碼示例:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
Result result = new Result((String) msg.obj);
Toast.makeText(DemoActivity.this, result.getResult(),
Toast.LENGTH_LONG).show();
};
};
非同步通知
商戶需要提供一個http協議的介面,包含在請求支付的入參中,其key對應notify_url。支付寶伺服器在支付完成後,會以POST方式呼叫notify_url傳輸資料。
獲取當前開發包版本號
呼叫PayTask物件的getVersion()方法查詢。
程式碼示例:
PayTask payTask = new PayTask(activity);
String version = payTask.getVersion();
在支付類新增
APPID
PID
商戶私鑰,pkcs8格式(在支付寶商戶裡面配置一下)
這樣執行Demo就可以成功呼叫支付寶了,是不是感覺挺簡單的呢,這是博主第二次做個移動支付了,第一次做的是用第三方SDK Ping++接入的,一次性集成了支付寶和微信支付,跳槽換了一家公司,雖然第三方SDK接入支付簡單,Ping++號稱只需一行程式碼,畢竟這世上沒有免費的午餐,所以這次決定單獨接入,有時間會帶來Android微信支付的接入詳解。