成爲Android平臺最便捷易用的支付框架android
EasyPay(易支付)集成並高度封裝了Android平臺的微信支付,支付寶支付以銀聯支付。使用此庫,開發者可使用簡單輕鬆方便的 Api 實現支付功能,大量節省集成配置時間。git
This is a library for Android Developers easily to use Alipay, WechatPay and UnionPay in Android project.github
不想聽我這三幾段廢話的能夠直接跳到下面 Usage(使用) 直接使用啦。編程
咱們能不能有一種多合一的庫,能夠省去紛繁的集成步驟,以統一的集成方式,統一的Api調用,統一的回調接收邏輯,同時兼具輕鬆擴展新的支付方式的能力,以知足支付功能需求。設計模式
我給出的答案就是 EasyPay。EasyPay 已誕生三年,使用其實現支付功能的App超3000+,以其極簡單的Api實現了多種支付功能獲得開發者承認。api
有人會說,No Picture, you say a XX。OK, 明白的,安排!微信
使用步驟很是簡單,總共兩步:1.集成依賴庫;2.相關支付Api調用。app
集成方式有如下兩種,根據須要選擇其中一種集成便可:框架
遠程依賴庫集成方式 Or 下載源碼做爲Module導入集成方式;
在Project中主App模塊中的build.gradle的dependencies塊中添加如下依賴:
注意:本步驟必須添加,由於該庫是EasyPay基類庫
implementation 'com.xgr.easypay:EasyPay:2.0.0'
複製代碼
注意:如下三個庫可根據實際須要增刪
implementation 'com.xgr.easypay:wechatpay:2.0.0'
複製代碼
implementation 'com.xgr.easypay:alipay:2.0.0'
複製代碼
implementation 'com.xgr.easypay:unionpay:2.0.0'
複製代碼
遠程依賴集成方式到此結束。
implementation project(':easypay') 複製代碼
implementation project(':wechatpay') 複製代碼
implementation project(':alipay') 複製代碼
implementation project(':unionpay') 複製代碼
下載源碼做爲Module導入集成方式到此結束。
在項目主App模塊的build.gradle文件的android{}塊->defaultConfig{}塊中配置applicationId,具體以下:
manifestPlaceholders = [
APPLICATION_ID: applicationId,
]
複製代碼
private void wxpay(){
//實例化微信支付策略
WXPay wxPay = WXPay.getInstance();
//構造微信訂單實體。通常都是由服務端直接返回。
WXPayInfoImpli wxPayInfoImpli = new WXPayInfoImpli();
wxPayInfoImpli.setTimestamp("");
wxPayInfoImpli.setSign("");
wxPayInfoImpli.setPrepayId("");
wxPayInfoImpli.setPartnerid("");
wxPayInfoImpli.setAppid("");
wxPayInfoImpli.setNonceStr("");
wxPayInfoImpli.setPackageValue("");
//策略場景類調起支付方法開始支付,以及接收回調。
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("支付取消");
}
});
}
複製代碼
微信支付到此結束
private void alipay(){
//實例化支付寶支付策略
AliPay aliPay = new AliPay();
//構造支付寶訂單實體。通常都是由服務端直接返回。
AlipayInfoImpli alipayInfoImpli = new AlipayInfoImpli();
alipayInfoImpli.setOrderInfo("");
//策略場景類調起支付方法開始支付,以及接收回調。
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("支付取消");
}
});
}
複製代碼
支付寶支付到此結束
private void unionpay(){
//實例化銀聯支付策略
UnionPay unionPay = new UnionPay();
//構造銀聯訂單實體。通常都是由服務端直接返回。測試時能夠用Mode.TEST,發佈時用Mode.RELEASE。
UnionPayInfoImpli unionPayInfoImpli = new UnionPayInfoImpli();
unionPayInfoImpli.setTn("814144587819703061900");
unionPayInfoImpli.setMode(Mode.TEST);
//策略場景類調起支付方法開始支付,以及接收回調。
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("支付取消");
}
});
}
複製代碼
銀聯支付到此結束
易支付編碼實現遵循設計模式六大原則,而且使用了單例以及策略模式來實現整個庫,擴展性良好,能夠輕鬆擴展其餘支付方式。
├── activity
│ ├── UnionPayAssistActivity.java //銀聯輔助Activity,負責調起銀聯支付接口以及接收回調。客戶端無需關心。
│ └── WXPayEntryBaseActivity.java //微信支付回調Activity封裝。客戶端需繼承該Activity並實現getAppId()方法。
├── alipay
│ ├── AliPay.java //支付寶支付api封裝,實現了IPayStrategy接口
│ ├── AlipayInfoImpli.java
│ └── AliPayResult.java
│ └── ResultCode.java
├── base
│ ├── IPayInfo.java //易支付支付信息基類接口
│ └── IPayStrategy.java //易支付支付策略基類接口
├── callback
│ └── IPayCallback.java //易支付統一回調接口
├── EasyPay.java //易支付場景類,客戶端調用者
├── unionpay
│ ├── Mode.java
│ ├── UnionPay.java //銀聯支付api封裝,,實現了IPayStrategy接口
│ └── UnionPayInfoImpli.java
│ └── UnionPayErrCode.java
└── wxpay
├── WXPay.java //微信支付api封裝,實現了IPayStrategy接口
└── WXPayInfoImpli.java
└── WXErrCodeEx.java
複製代碼
EasyPay從立項之初,就充分考慮了代碼擴展性,啓用策略模式,所有采用面向接口編程,遵循依賴倒置設計原則。從支付基類擴展出新的支付很是容易。僅需三步。下面給出參考步驟。更具體請參照項目中支付寶或者微信或者銀聯支付方式封裝。
public class XXpayInfoImpli implements IPayInfo {
public xxType xxField = xxx;
public yyTYpe xxFiled = yyy;
...other Field
}
複製代碼
將第一步中支付實體類傳入泛型。支付策略的初衷是將某種支付全部操做都進行集中封裝,凡是業務須要用到該支付的地方,都調用這個類便可。
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
}
複製代碼
完成上述兩步後,根據業務在須要地方調用便可,須要注意是當某支付平臺支付回調比較分散時,可在對應地方將調用轉發給上述支付類便可。這樣,能夠將邏輯集中到一個類處理。如不理解這段話,能夠看銀聯支付UnionPayAssistActivity中的onActivityResult()方法,就將邏輯轉給 UnionPay.handleResult(this,data)處理了。
//實例化支付策略
XXpay xxPay = new XXPay();
//構造支付寶訂單實體。通常都是由服務端直接返回。
XXpayInfoImpli xxpayInfoImpli = new XXpayInfoImpli();
xxpayInfoImpli.setXXFiled();
...
//策略場景類調起支付方法開始支付,以及接收回調。
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("支付取消");
}
});
複製代碼
擴展介紹到此結束
關於爲何,說幾點:
感謝你們,但願一塊兒起步。
加羣步驟:掃碼支付時備註:easypay+你的qq號。我看到後將拉你入羣。付款不退,慎重考慮。
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.
複製代碼