Android接入支付寶和微信支付


然后把下載下來的aar包,放到項目目錄下面的libs目錄下,通過下面的gradle依賴進來

// 支付寶 SDK AAR 包所需的配置
compile(name: 'alipaySdk-15.6.0-20190226104104-noUtdid', ext: 'aar')
1
2
調用支付寶SDK的方法發起支付
調用支付寶SDK發起支付,只需要一個參數,就是服務端返回的訂單信息。所以這里的支付順序是先要我們調用服務端的接口創建一個訂單,然后服務端把訂單信息返回給我們,我們APP拿着這個訂單信息去調用支付寶支付。

//下面的orderInfo就是咱自己的服務端返回的訂單信息,里面除了訂單ID等,還有簽名等安全信息
//使用方式基本按照支付寶的DEMO里面就行了

final Runnable payRunnable = new Runnable() {

@Override
public void run() {
PayTask alipay = new PayTask(PayDemoActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());

Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};

// 必須異步調用
Thread payThread = new Thread(payRunnable);
payThread.start();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
由上面的調用可見,支付寶是通過消息機制來接收回調的,所以我們得在Handler的消息中接收回調信息。
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
//這里接收支付寶的回調信息
//需要注意的是,支付結果一定要調用自己的服務端來確定,不能通過支付寶的回調結果來判斷
break;
}
default:
break;
}
};
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
需要注意的是,支付結果一定要調用自己的服務端來確定,不能通過支付寶的回調結果來判斷!

其他
實際情況里需要考慮用戶手機上有沒有安裝過支付寶

已經安裝過支付寶,會直接調用支付寶支付
沒有安裝支付寶,會調起支付寶的H5頁面支付
以上就是支付寶的接入了,步驟還是比較簡單的,也沒有什么坑。下面的微信支付就有坑了…

微信支付接入
接入微信的SDK
官網在這

相比於支付寶,微信接入SDK就比較簡單了,一行代碼搞定

//微信支付SDK
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
1
2
這里需要注意的是,微信的SDK里面支付和社交登錄等這些是集成在一起的,無法分開。所以如果項目里之前已經集成過微信登錄的話就不需要重復集成了!

調用微信SDK發起支付
String content = ... (這個是服務端返回的訂單信息)
//需要一個注冊微信支付的APPID
IWXAPI api = WXAPIFactory.createWXAPI(mContext, APPID);
JSONObject json = new JSONObject(content);
PayReq req = new PayReq();
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
api.sendReq(req); //這里就發起調用微信支付了
1
2
3
4
5
6
7
8
9
10
11
12
13
接收微信支付的回調
可以看到上面的代碼和支付寶就不一樣了,沒有用Handler。

微信支付比較特殊的一個地方是需要我們用一個特殊的Activity來接收回調的信息。這個處理不好很容易就碰到接收不到回調的情況。

我們需要新建一個名叫WXPayEntryActivity的Activity,內容的話可以參考微信SDK里面的。需要注意的有幾點:

WXPayEntryActivity這個Activity的路徑要符合要求,比如APP的包名是com.niubi.company,那這個Activity的路徑就需要是com.niubi.company.wxapi.WXPayEntryActivity
這個WXPayEntryActivity當然需要在AndroidManifest文件中注冊
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
1
2
3
4
特別需要注意的是上面的exported屬性和launchMode屬性一定要加上,否則是接收不到回調的

我們在支付完成以后,一般是希望直接回到我們自己的應用里面。這個時候我們就需要讓上面的WXPayEntryActivity不顯示,否則就會閃一下或是停留在這個黑黑頁面。
不顯示的話要注意2點,一個是不要有布局,另一個就是要及時的finish掉這個Activity
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{

...

@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
<!--AlertDialog.Builder builder = new AlertDialog.Builder(this);-->
<!--builder.setTitle(R.string.app_tip);-->
<!--builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));-->
<!--builder.show();-->
//這里肯定不能是像上面的DEMO一樣彈出對話框了,而是通知我們發起支付調用的頁面
//然后及時finish掉這個頁面,貼個偽代碼:
sendPayNotice()
finish();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
其他
同樣的,微信支付成功與否,也要通過調用自己的服務端來查看,而不能依賴微信的回調狀態,這個要切記。
--------------------- 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM