您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在Android應(yīng)用中接入支付寶和微信支付,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
支付寶接入
首先是接入支付寶的aar文件
比較坑的是支付寶還需要下載aar文件導(dǎo)入,而不是gradle里面一行依賴就能搞定的。
我們需要去官網(wǎng)下載最新的DEMO和SDK,官網(wǎng)地址在這里
然后把下載下來的aar包,放到項目目錄下面的 libs 目錄下,通過下面的gradle依賴進(jìn)來
// 支付寶 SDK AAR 包所需的配置 compile(name: 'alipaySdk-15.6.0-20190226104104-noUtdid', ext: 'aar')
調(diào)用支付寶SDK的方法發(fā)起支付
調(diào)用支付寶SDK發(fā)起支付,只需要一個參數(shù),就是服務(wù)端返回的訂單信息。所以這里的支付順序是先要我們調(diào)用服務(wù)端的接口創(chuàng)建一個訂單,然后服務(wù)端把訂單信息返回給我們,我們APP拿著這個訂單信息去調(diào)用支付寶支付。
//下面的orderInfo就是咱自己的服務(wù)端返回的訂單信息,里面除了訂單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); } }; // 必須異步調(diào)用 Thread payThread = new Thread(payRunnable); payThread.start();
由上面的調(diào)用可見,支付寶是通過消息機(jī)制來接收回調(diào)的,所以我們得在Handler的消息中接收回調(diào)信息。
private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { //這里接收支付寶的回調(diào)信息 //需要注意的是,支付結(jié)果一定要調(diào)用自己的服務(wù)端來確定,不能通過支付寶的回調(diào)結(jié)果來判斷 break; } default: break; } }; };
需要注意的是,支付結(jié)果一定要調(diào)用自己的服務(wù)端來確定,不能通過支付寶的回調(diào)結(jié)果來判斷!
其他
實際情況里需要考慮用戶手機(jī)上有沒有安裝過支付寶
已經(jīng)安裝過支付寶,會直接調(diào)用支付寶支付
沒有安裝支付寶,會調(diào)起支付寶的H5頁面支付
以上就是支付寶的接入了,步驟還是比較簡單的,也沒有什么坑。下面的微信支付就有坑了...
微信支付接入
接入微信的SDK
官網(wǎng)在這
相比于支付寶,微信接入SDK就比較簡單了,一行代碼搞定
//微信支付SDK compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
這里需要注意的是,微信的SDK里面支付和社交登錄等這些是集成在一起的,無法分開。所以如果項目里之前已經(jīng)集成過微信登錄的話就不需要重復(fù)集成了!
調(diào)用微信SDK發(fā)起支付
String content = ... (這個是服務(wù)端返回的訂單信息) //需要一個注冊微信支付的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); //這里就發(fā)起調(diào)用微信支付了
接收微信支付的回調(diào)
可以看到上面的代碼和支付寶就不一樣了,沒有用Handler。
微信支付比較特殊的一個地方是需要我們用一個特殊的Activity來接收回調(diào)的信息。這個處理不好很容易就碰到接收不到回調(diào)的情況。
我們需要新建一個名叫 WXPayEntryActivity 的Activity,內(nèi)容的話可以參考微信SDK里面的。需要注意的有幾點:
WXPayEntryActivity這個Activity的路徑要符合要求,比如APP的包名是 com.niubi.company ,那這個Activity的路徑就需要是 com.niubi.company.wxapi.WXPayEntryActivity
這個WXPayEntryActivity當(dāng)然需要在 AndroidManifest 文件中注冊
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"/>
特別需要注意的是上面的 exported 屬性和 launchMode 屬性一定要加上,否則是接收不到回調(diào)的
我們在支付完成以后,一般是希望直接回到我們自己的應(yīng)用里面。這個時候我們就需要讓上面的 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一樣彈出對話框了,而是通知我們發(fā)起支付調(diào)用的頁面 //然后及時finish掉這個頁面,貼個偽代碼: sendPayNotice() finish(); } } }
Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由美國Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
上述內(nèi)容就是怎么在Android應(yīng)用中接入支付寶和微信支付,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。