如何在Android App中集成支付寶和微信支付功能
前言
本文主要介紹如何在 Android App 里集成支付寶和微信支付的功能,文中將實現(xiàn)的步驟一步步介紹的非常詳細,對同樣遇到這個問題的朋友相信會是一個很好的參考,下面話不多說了,來一起看看詳細的介紹吧。
集成支付寶支付
沒想到現(xiàn)在 App 里集成支付寶是這么的簡單,我還折騰了好久…

好了,開始,假設你已經完成了支付寶那些繁雜的申請啥的工作,進入開發(fā)了。
首先,去下載官方的 DEMO :
導入開發(fā)資源
解壓后把里面的 jar 包拿出來放到你工程的 lib 目錄下,如圖

然后進入工程的“Project Structure”,在app module下選擇“File dependency”,將libs目錄下的alipaySDK-xxxxxxxx.jar導入,或者在app module下的build.gradle下手動添加依賴,如下代碼所示:
......
compile files('libs/alipaySdk-20170725.jar')
......
修改 AndroidManifest 文件
復制進去就行
<activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" > </activity> <activity android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" > </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" />
好了,準備工作基本完成。
支付接口的調用
這里參考下給的 Demo。
由于支付包的 Demo 給的是本地加密的方式,并且不推薦使用這種方法,所以我們只需要用的其中的部分代碼就好了。
首先,把 PayResult.java這個類復制到你的項目里。代碼如下:
public class PayResult {
private String resultStatus;
private String result;
private String memo;
public PayResult(Map<String, String> rawResult) {
if (rawResult == null) {
return;
}
for (String key : rawResult.keySet()) {
if (TextUtils.equals(key, "resultStatus")) {
resultStatus = rawResult.get(key);
} else if (TextUtils.equals(key, "result")) {
result = rawResult.get(key);
} else if (TextUtils.equals(key, "memo")) {
memo = rawResult.get(key);
}
}
}
@Override
public String toString() {
return "resultStatus={" + resultStatus + "};memo={" + memo
+ "};result={" + result + "}";
}
/**
* @return the resultStatus
*/
public String getResultStatus() {
return resultStatus;
}
/**
* @return the memo
*/
public String getMemo() {
return memo;
}
/**
* @return the result
*/
public String getResult() {
return result;
}
}
然后調支付接口。PayTask對象主要為商戶提供訂單支付、查詢功能,及獲取當前開發(fā)包版本號。獲取PayTask支付對象調用支付(支付行為需要在獨立的非ui線程中執(zhí)行),
private static final int SDK_PAY_FLAG = 1;
// 訂單信息
final String orderInfo = info;
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map<String, 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();
注意下 orderInfo這個變量,這個值是由通過向后臺請求返回的值。
這里需要后臺注意的是,寫的時候看好App支付請求參數(shù)說明這個文檔。
然后是支付結果的獲取與處理。
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
對于支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作為支付結束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要驗證的信息
String resultStatus = payResult.getResultStatus();
// 判斷resultStatus 為9000則代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 該筆訂單是否真實支付成功,需要依賴服務端的異步通知。
Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
} else {
// 該筆訂單真實的支付結果,需要依賴服務端的異步通知。
Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
}
break;
}
default:
break;
}
};
};
然后就好了。
結束。
集成微信支付
微信支付還是好弄的,就是先該注冊的注冊,該申請的申請,這個不是本文的重點。
因為微信有個支付回調的問題,我的做法就是在項目的x.x.x.wxapi包路徑中實現(xiàn) WXPayEntryActivity 類(切記包名或類名一定要一致,否則會造成無法回調)。代碼如下:
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pay_result);
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
/*
* 在這里去做跟后臺服務器的請求,
* 獲取需要的簽名信息,然后調起微信支付。
**/
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
switch(resp.errCode){
case 0:
//支付成功,做自己想做的處理
break;
case -1:
//可能的原因:簽名錯誤、未注冊APPID、項目設置APPID不正確、注冊的APPID與設置的不匹配、其他異常等。
break;
case -2:
//用戶取消.無需處理。發(fā)生場景:用戶不支付了,點擊取消,返回APP。
break;
default:
break
}
}
}
后記
這是第一次接入支付寶支付,一開始還很起勁的參照一個庫去進行封裝,然后發(fā)現(xiàn)好像多此一舉,并且還不成功,和后臺捯飭了好久然后看Demo才弄出來。
參考:
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Android編程實現(xiàn)定時發(fā)短信功能示例
這篇文章主要介紹了Android編程實現(xiàn)定時發(fā)短信功能,結合實例形式較為詳細的分析了Android定時發(fā)送短信功能的相關原理、實現(xiàn)方法與注意事項,需要的朋友可以參考下2017-09-09
Android使用HorizontalScrollView實現(xiàn)水平滾動
這篇文章主要為大家詳細介紹了Android使用HorizontalScrollView實現(xiàn)水平滾動,并點擊有相應的反應效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11
mac開發(fā)android環(huán)境搭建步驟圖解
這里比較詳細的來總結下mac開發(fā)android的環(huán)境搭建步驟安裝過程,希望對一些正準備配置Android開發(fā)環(huán)境的小伙伴們有一定幫助2014-01-01
Android用TextView實現(xiàn)跑馬燈效果代碼
大家好,本篇文章主要講的是Android?TextView實現(xiàn)跑馬燈效果代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01

