android 支付模块封装,Android集成支付----支付宝支付总结与封装
前言
類似于Android集成支付----微信支付總結(jié)與封裝(可以查看本人另外一篇文章),本文對支付寶支付進行一個總結(jié)與封裝。相比于微信支付,支付寶支付沒有那么多坑。
集成支付寶支付SDK
這里只是簡要介紹,重點解說有坑的地方,具體參考官方文檔,官方文檔百度一下就有了。
1.導入SDK
支付寶支付導入SDK只需要導入一個jar包,相信這個對于懂Android開發(fā)的同學不成問題。
2.修改Manifest、混淆等
這些內(nèi)容照著官方文檔復制粘貼即可
支付寶整體來說還是很人性化的,并沒有很多坑。不像微信支付文檔里有一些歧義。
支付寶支付開發(fā)步驟
相信大家通過官方文檔可以很輕松的集成支付寶支付SDK,下面我們就直接進入正題。
1.OrderInfo的獲取(簽名過程)
orderInfo的獲取,用官方的話來說是簽名過程。支付寶官方明確建議,這個過程要放在服務端來做,只需要返回給客戶端一個orderInfo字符串即可。
V}VE}{S6K5ME9PQ`{($ZMG7.png
如果是放在服務端,那么我們就不用過多關心,只作為一個從服務端請求的字符串即可。
然而在實際開發(fā)中,OrderInfo也有可能放在客戶端來做,比如我們的服務端就是這樣的,讓先請求一個接口,返回給我這么點信息,然后讓我自己組裝OrderInfo,也就是自己簽名,日了狗了。
Paste_Image.png
具體的簽名過程可以參考官方文檔、官方demo,當然還可以看我自己封裝的代碼。github在下面。
2.調(diào)起支付寶APP
這個地方非常簡單,直接復制官方文檔提供的代碼即可:
Runnable payRunnable = new Runnable() {//要在子線程
@Override
public void run() {
PayTask alipay = new PayTask(RechargeActivity.this);
Map result = alipay.payV2
(orderInfo, true);//這里的orderInfo就是上面說的orderInfo
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
3.支付結(jié)果的處理
這里也同樣簡單,只需要在mHandler中處理即可
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
AliPayResult payResult = new AliPayResult((Map) msg.obj);
switch (payResult.getResultStatus()) {
case "9000":
GMToastUtil.showToast("支付成功");
break;
case "8000":
GMToastUtil.showToast("正在處理中");
break;
case "4000":
GMToastUtil.showToast("訂單支付失敗");
break;
case "5000":
GMToastUtil.showToast("重復請求");
break;
case "6001":
GMToastUtil.showToast("已取消支付");
break;
case "6002":
GMToastUtil.showToast("網(wǎng)絡連接出錯");
break;
case "6004":
GMToastUtil.showToast("正在處理中");
break;
default:
GMToastUtil.showToast("支付失敗");
break;
}
}
};
簽名問題
這里有一個問題還是有必要說一下的。
支付寶支付簽名有兩種,如下圖RSA2與RSA,這里支付寶官方推薦RSA2,但也不排除有人會用RSA。比如我們的服務端開發(fā)人員,非要用RSA,很不理解。
Paste_Image.png
支付寶提供了簽名工具,自己操作生成一個公鑰和一個私鑰,這里的公鑰全名是”應用公鑰“如上圖。私鑰自己留著在獲取orderInfo(簽名過程)處使用。公鑰上傳到上圖位置,要用RSA2就上傳到RSA2位置,反之你懂的。
公鑰上傳后,支付寶開放平臺會自動生成一個支付寶公鑰,注意區(qū)分”應用公鑰“和”支付寶公鑰“。這里的支付寶公鑰是給服務端用的,服務端在異步回調(diào)時驗簽。
支付寶支付的封裝
支付寶同樣不涉及很多業(yè)務邏輯,完全可以封裝成工具類以便下次使用。封裝后的使用非常簡單,如下代碼,詳細代碼可以看我的github,地址在文末。
//簽名在客戶端
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//假設已經(jīng)從服務端獲取必要數(shù)據(jù)
MyALipayUtils.ALiPayBuilder builder = new MyALipayUtils.ALiPayBuilder();
builder.setAppid("123")
.setRsa("456")//根據(jù)情況設置Rsa2與Rsa
.setMoney("0.01")//單位時分
.setTitle("支付測試")
.setOrderTradeId("487456")//從服務端獲取
.setNotifyUrl("fdsfasdf")//從服務端獲取
.build()
.toALiPay(MainActivity.this);
}
});
//簽名在服務端
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//假設已從服務端獲取orderInfo
String orderInfo = "";
MyALipayUtils.ALiPayBuilder builder = new MyALipayUtils.ALiPayBuilder();
builder.build().toALiPay(MainActivity.this, orderInfo);
}
});
補充
直接運行demo,點擊簽名在客戶端,會出現(xiàn)以下錯誤。碰到這個錯誤不要驚慌。
image.png
只需要將setRsa("私鑰")這里的私鑰換成正確的私鑰就OK了。也就是下圖這里
image.png
私鑰分兩種,兩種有什么區(qū)別?私鑰怎么獲取?私鑰生后怎么配置?等這些問題都可以在官方文檔中找到。
總結(jié)
以上是生活随笔為你收集整理的android 支付模块封装,Android集成支付----支付宝支付总结与封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 全双工服务器_利用Java实现
- 下一篇: matlab中tenmat,tensor