EasyPay(易支付)---- 一個(gè)便捷易用的Android平臺(tái)聚合支付框架
[圖片上傳失敗...(image-bc37b5-1572170858925)]
[TOC]
Vision (愿景)
成為Android平臺(tái)最便捷易用的支付框架
Introduction(介紹)
This is a framework for Android Developers easily to use Alipay,WechatPay and UnionPay in Android project.
EasyPay(易支付)集成并高度封裝了Android平臺(tái)的微信支付,支付寶支付以銀聯(lián)支付刚夺。使用此庫末捣,開發(fā)者可以使用簡(jiǎn)單輕松方便的api實(shí)現(xiàn)支付功能,大量節(jié)省集成配置時(shí)間莽红。
Screenshot(支付效果圖)
[圖片上傳失敗...(image-1d38c7-1572170858925)]
Usage(使用)
使用步驟非常簡(jiǎn)單卒茬,總共兩步:1.集成依賴庫;2.相關(guān)支付Api調(diào)用柳畔。
使用步驟一郭赐、 集成依賴庫
集成方式有以下兩種,根據(jù)需要選擇其中一種集成即可:
遠(yuǎn)程依賴庫集成方式 Or 下載源碼作為Module導(dǎo)入集成方式俘陷;
遠(yuǎn)程依賴庫集成方式
在Project中主App模塊中的build.gradle的dependencies塊中添加以下依賴:
1) EasyPay支付基類庫(必選):
注意:本步驟必須添加观谦,因?yàn)樵搸焓荅asyPay基類庫
implementation 'com.xgr.easypay:EasyPay:2.0.0'
2) 根據(jù)需要集成微信支付豁状、支付寶支付、銀聯(lián)支付
注意:以下三個(gè)庫可根據(jù)實(shí)際需要增刪
1)微信支付集成(可選):
implementation 'com.xgr.easypay:wechatpay:2.0.0'
2)支付寶支付集成(可選):
implementation 'com.xgr.easypay:alipay:2.0.0'
3)銀聯(lián)支付集成(可選):
implementation 'com.xgr.easypay:unionpay:2.0.0'
遠(yuǎn)程依賴集成方式到此結(jié)束夭禽。
下載源碼后作為module導(dǎo)入:
1) 集成基類依賴庫(必選):
implementation project(':easypay')
2) 根據(jù)需要集成其他支付依賴庫
1)微信支付集成(可選):
implementation project(':wechatpay')
2)支付寶集成(可選):
implementation project(':alipay')
3)銀聯(lián)支付集成(可選):
implementation project(':unionpay')
下載源碼作為Module導(dǎo)入集成方式到此結(jié)束谊路。
使用步驟二讹躯、相關(guān)支付Api調(diào)用
微信支付(共兩步)
1)配置
在項(xiàng)目主App模塊的build.gradle文件的android{}塊->defaultConfig{}塊中配置applicationId,具體如下:
manifestPlaceholders = [
APPLICATION_ID: applicationId,
]
2)api調(diào)用
private void wxpay(){
//實(shí)例化微信支付策略
WXPay wxPay = WXPay.getInstance();
//構(gòu)造微信訂單實(shí)體。一般都是由服務(wù)端直接返回缠劝。
WXPayInfoImpli wxPayInfoImpli = new WXPayInfoImpli();
wxPayInfoImpli.setTimestamp("");
wxPayInfoImpli.setSign("");
wxPayInfoImpli.setPrepayId("");
wxPayInfoImpli.setPartnerid("");
wxPayInfoImpli.setAppid("");
wxPayInfoImpli.setNonceStr("");
wxPayInfoImpli.setPackageValue("");
//策略場(chǎng)景類調(diào)起支付方法開始支付潮梯,以及接收回調(diào)。
EasyPay.pay(wxPay, this, wxPayInfoImpli, new IPayCallback() {
@Override
public void success() {
toast("支付成功");
}
@Override
public void failed(int code, String msg) {
toast("支付失敗");
}
@Override
public void cancel() {
toast("支付取消");
}
});
}
微信支付到此結(jié)束
支付寶支付(共一步)
private void alipay(){
//實(shí)例化支付寶支付策略
AliPay aliPay = new AliPay();
//構(gòu)造支付寶訂單實(shí)體剩彬。一般都是由服務(wù)端直接返回酷麦。
AlipayInfoImpli alipayInfoImpli = new AlipayInfoImpli();
alipayInfoImpli.setOrderInfo("");
//策略場(chǎng)景類調(diào)起支付方法開始支付,以及接收回調(diào)喉恋。
EasyPay.pay(aliPay, this, alipayInfoImpli, new IPayCallback() {
@Override
public void success() {
toast("支付成功");
}
@Override
public void failed(int code, String msg) {
toast("支付失敗");
}
@Override
public void cancel() {
toast("支付取消");
}
});
}
支付寶支付到此結(jié)束
銀聯(lián)支付(共一步)
private void unionpay(){
//實(shí)例化銀聯(lián)支付策略
UnionPay unionPay = new UnionPay();
//構(gòu)造銀聯(lián)訂單實(shí)體。一般都是由服務(wù)端直接返回轻黑。測(cè)試時(shí)可以用Mode.TEST,發(fā)布時(shí)用Mode.RELEASE糊肤。
UnionPayInfoImpli unionPayInfoImpli = new UnionPayInfoImpli();
unionPayInfoImpli.setTn("814144587819703061900");
unionPayInfoImpli.setMode(Mode.TEST);
//策略場(chǎng)景類調(diào)起支付方法開始支付,以及接收回調(diào)氓鄙。
EasyPay.pay(unionPay, this, unionPayInfoImpli, new IPayCallback() {
@Override
public void success() {
toast("支付成功");
}
@Override
public void failed(int code, String msg) {
toast("支付失敗");
}
@Override
public void cancel() {
toast("支付取消");
}
});
}
銀聯(lián)支付到此結(jié)束
項(xiàng)目實(shí)現(xiàn)介紹
易支付編碼實(shí)現(xiàn)遵循設(shè)計(jì)模式六大原則馆揉,并且使用了單例以及策略模式來實(shí)現(xiàn)整個(gè)庫,擴(kuò)展性良好,可以輕松擴(kuò)展其他支付方式。
├── activity
│ ├── UnionPayAssistActivity.java //銀聯(lián)輔助Activity抖拦,負(fù)責(zé)調(diào)起銀聯(lián)支付接口以及接收回調(diào)升酣∠夏海客戶端無需關(guān)心。
│ └── WXPayEntryBaseActivity.java //微信支付回調(diào)Activity封裝噩茄∠旅妫客戶端需繼承該Activity并實(shí)現(xiàn)getAppId()方法。
├── alipay
│ ├── AliPay.java //支付寶支付api封裝绩聘,實(shí)現(xiàn)了IPayStrategy接口
│ ├── AlipayInfoImpli.java
│ └── AliPayResult.java
│ └── ResultCode.java
├── base
│ ├── IPayInfo.java //易支付支付信息基類接口
│ └── IPayStrategy.java //易支付支付策略基類接口
├── callback
│ └── IPayCallback.java //易支付統(tǒng)一回調(diào)接口
├── EasyPay.java //易支付場(chǎng)景類沥割,客戶端調(diào)用者
├── unionpay
│ ├── Mode.java
│ ├── UnionPay.java //銀聯(lián)支付api封裝,凿菩,實(shí)現(xiàn)了IPayStrategy接口
│ └── UnionPayInfoImpli.java
│ └── UnionPayErrCode.java
└── wxpay
├── WXPay.java //微信支付api封裝机杜,實(shí)現(xiàn)了IPayStrategy接口
└── WXPayInfoImpli.java
└── WXErrCodeEx.java
框架擴(kuò)展新的支付平臺(tái)(如美團(tuán)、京東等其他支付)
EasyPay從立項(xiàng)之初衅谷,就充分考慮了代碼擴(kuò)展性椒拗,啟用策略模式,全部采用面向接口編程会喝,遵循依賴倒置設(shè)計(jì)原則陡叠。從支付基類擴(kuò)展出新的支付非常容易。僅需三步肢执。下面給出參考步驟枉阵。更具體請(qǐng)參照項(xiàng)目中支付寶或者微信或者銀聯(lián)支付方式封裝。
1) 支付訂單信息類實(shí)現(xiàn)IPayInfo接口
public class XXpayInfoImpli implements IPayInfo {
public xxType xxField = xxx;
public yyTYpe xxFiled = yyy;
...other Field
}
2) 支付策略類實(shí)現(xiàn)IPayStrategy预茄。
將第一步中支付實(shí)體類傳入泛型兴溜。支付策略的初衷是將某種支付所有操作都進(jìn)行集中封裝,凡是業(yè)務(wù)需要用到該支付的地方耻陕,都調(diào)用這個(gè)類即可拙徽。
public class XXPay implements IPayStrategy<XXpayInfoImpli> {
private AlipayInfoImpli alipayInfoImpli;
private static IPayCallback sPayCallback;
@Override
public void pay(Activity activity, AlipayInfoImpli payInfo, IPayCallback payCallback) {
this.mActivity = activity;
this.alipayInfoImpli = payInfo;
sPayCallback = payCallback;
}
...other method
}
完成上述兩步后,根據(jù)業(yè)務(wù)在需要地方調(diào)用即可诗宣,需要注意是當(dāng)某支付平臺(tái)支付回調(diào)比較分散時(shí)膘怕,可在對(duì)應(yīng)地方將調(diào)用轉(zhuǎn)發(fā)給上述支付類即可。這樣召庞,可以將邏輯集中到一個(gè)類處理岛心。如不理解這段話,可以看銀聯(lián)支付UnionPayAssistActivity中的onActivityResult()方法篮灼,就將邏輯轉(zhuǎn)給 UnionPay.handleResult(this,data)處理了忘古。
3)調(diào)用Api
//實(shí)例化支付策略
XXpay xxPay = new XXPay();
//構(gòu)造支付寶訂單實(shí)體。一般都是由服務(wù)端直接返回诅诱。
XXpayInfoImpli xxpayInfoImpli = new XXpayInfoImpli();
xxpayInfoImpli.setXXFiled();
...
//策略場(chǎng)景類調(diào)起支付方法開始支付髓堪,以及接收回調(diào)。
EasyPay.pay(xxPay, this, xxpayInfoImpli, new IPayCallback() {
@Override
public void success() {
toast("支付成功");
}
@Override
public void failed(int code, String message) {
toast("支付失敗");
}
@Override
public void cancel() {
toast("支付取消");
}
});
擴(kuò)展介紹到此結(jié)束
(ChangeLog) 更新日志
v2.0.0更新(2019/10/27)
- 精簡(jiǎn)微信支付集成和使用步驟,并更新微信支付SDK
- 更新支付寶SDK
- 更新銀聯(lián)SDK
- 支付回調(diào)fail方法返回code和message
聯(lián)系我
1) 有問題提Issues干旁。歡迎大家交流想法驶沼。
2) 郵箱聯(lián)系(Email : kingofglory@yeah.net)
3) 付費(fèi)加QQ群
關(guān)于為什么,說幾點(diǎn):
- 維護(hù)群和解答問題將耗費(fèi)作者額外時(shí)間和精力争群;
- 付費(fèi)將迫使同學(xué)們?yōu)榱瞬桓顿M(fèi)而更加認(rèn)真去思考問題和查看源碼商乎;
- 有同學(xué)覺得用了我的框架,節(jié)省了時(shí)間祭阀,提高了效率的,愿意請(qǐng)我喝杯咖啡交個(gè)朋友的鲜戒,非常歡迎专控;
- 有些同學(xué)可能對(duì)本框架不熟悉或者碰到了其他Android支付問題,需要快速咨詢的遏餐,可以考慮付費(fèi)入群伦腐,不保證能解決,但會(huì)盡全力而為失都。
感謝大家柏蘑,希望一起起步。
加群步驟:掃碼支付時(shí)備注:easypay+你的qq號(hào)粹庞。我看到后將拉你入群咳焚。付款不退,慎重考慮庞溜。
<figure class="half">
<img src="https://github.com/kingofglory/EasyPay/blob/master/screensshot/wechatpay.jpg">
<img src="https://github.com/kingofglory/EasyPay/blob/master/screensshot/alipay.jpg">
</figure>
License
MIT License
Copyright (c) 2017 kingofglory
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.