EasyPay2.0.0正式發佈----讓Android支付功能集成極限提速

EasyPay GitHub源碼連接java

Vision (願景)

成爲Android平臺最便捷易用的支付框架android


Introduction(介紹)

EasyPay(易支付)集成並高度封裝了Android平臺的微信支付,支付寶支付以銀聯支付。使用此庫,開發者可使用簡單輕鬆方便的 Api 實現支付功能,大量節省集成配置時間。git

This is a library for Android Developers easily to use Alipay, WechatPay and UnionPay in Android project.github


Why (爲何有這個庫)

不想聽我這三幾段廢話的能夠直接跳到下面 Usage(使用) 直接使用啦。編程

  1. 支付平臺衆多。微信、支付寶、銀聯、京東、美團、百度等等,須要閱讀各家文檔,耗費大量時間精力。
  2. 集成步驟繁瑣。集成過微信支付都知道,必須在包名下配置 ${applicationId}.wxapi.WXPayEntryActivity。。。
  3. Api 調用方式不一致。一樣的功能,代碼差別很大,增長理解成本。
  4. 支付結果接收邏輯分散。調用方法與接受結果代碼不在同一個地方,邏輯分散,可讀性和可維護性差。

Think deeply (思考與指望)

咱們能不能有一種多合一的庫,能夠省去紛繁的集成步驟,以統一的集成方式,統一的Api調用,統一的回調接收邏輯,同時兼具輕鬆擴展新的支付方式的能力,以知足支付功能需求。設計模式

我給出的答案就是 EasyPay。EasyPay 已誕生三年,使用其實現支付功能的App超3000+,以其極簡單的Api實現了多種支付功能獲得開發者承認。api

How (解決什麼問題)

  1. EasyPay 用巧妙方式省去了微信支付必須配置wxapi.WXPayActivity的步驟,在客戶端甚至你都不須要配置微信AppId
  2. EasyPay 分別封裝了微信支付、支付寶支付、銀聯支付,單獨成庫,按需集成,全部庫集成均一句代碼完成
  3. EasyPay 統一支付調用接口,統一支付結果接收回調,調用代碼與接收結果代碼集中在一塊兒
  4. EasyPay 預留擴展其餘支付方式接口
  5. EasyPay 甚至抽空用反射解決了銀聯SDK因持有靜態Context致使的內存泄漏問題(該問題三年前我反映後六個月也沒解決。。。,因此只有本身動手,豐衣足食)
  6. EasyPay 讓你省出時間陪女友,哈哈哈哈哈哈(if 沒有 那省出時間讓你去找啊,還期望我給你new 一個對象啊。。。)

有人會說,No Picture, you say a XX。OK, 明白的,安排!微信

Screenshot(支付效果圖)

支付效果圖


Usage(使用)

使用步驟很是簡單,總共兩步:1.集成依賴庫;2.相關支付Api調用。app

使用步驟1、 集成依賴庫

集成方式有如下兩種,根據須要選擇其中一種集成便可:框架

遠程依賴庫集成方式 Or 下載源碼做爲Module導入集成方式

遠程依賴庫集成方式

在Project中主App模塊中的build.gradle的dependencies塊中添加如下依賴:

1) EasyPay支付基類庫(必選):

注意:本步驟必須添加,由於該庫是EasyPay基類庫

implementation 'com.xgr.easypay:EasyPay:2.0.0'
複製代碼

2) 根據須要集成微信支付、支付寶支付、銀聯支付

注意:如下三個庫可根據實際須要增刪

1)微信支付集成(可選):
implementation 'com.xgr.easypay:wechatpay:2.0.0'
複製代碼
2)支付寶支付集成(可選):
implementation 'com.xgr.easypay:alipay:2.0.0'
複製代碼
3)銀聯支付集成(可選):
implementation 'com.xgr.easypay:unionpay:2.0.0'
複製代碼

遠程依賴集成方式到此結束。

下載源碼後做爲module導入:

1) 集成基類依賴庫(必選):

implementation project(':easypay') 複製代碼

2) 根據須要集成其餘支付依賴庫

1)微信支付集成(可選):
implementation project(':wechatpay') 複製代碼
2)支付寶集成(可選):
implementation project(':alipay') 複製代碼
3)銀聯支付集成(可選):
implementation project(':unionpay') 複製代碼

下載源碼做爲Module導入集成方式到此結束。


使用步驟2、相關支付Api調用

微信支付(共兩步)

1)配置

在項目主App模塊的build.gradle文件的android{}塊->defaultConfig{}塊中配置applicationId,具體以下:

manifestPlaceholders = [
                APPLICATION_ID: applicationId,
        ]
複製代碼
2)api調用
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從立項之初,就充分考慮了代碼擴展性,啓用策略模式,所有采用面向接口編程,遵循依賴倒置設計原則。從支付基類擴展出新的支付很是容易。僅需三步。下面給出參考步驟。更具體請參照項目中支付寶或者微信或者銀聯支付方式封裝。

1) 支付訂單信息類實現IPayInfo接口

public class XXpayInfoImpli implements IPayInfo {
    public xxType xxField = xxx;
    public yyTYpe xxFiled = yyy;
    ...other Field
}
複製代碼

2) 支付策略類實現IPayStrategy。

將第一步中支付實體類傳入泛型。支付策略的初衷是將某種支付全部操做都進行集中封裝,凡是業務須要用到該支付的地方,都調用這個類便可。

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)處理了。

3)調用Api

//實例化支付策略
        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("支付取消");
            }
        });
複製代碼

擴展介紹到此結束


(ChangeLog) 更新日誌

v2.0.0更新(2019/10/27)

  1. 極限精簡微信支付集成和使用步驟,並更新微信支付SDK
  2. 更新支付寶SDK
  3. 更新銀聯SDK
  4. 支付回調fail方法返回code和message

聯繫我

1) 有問題提Issues。歡迎你們交流想法。

2) 郵箱聯繫(Email : kingofglory@yeah.net)

3) 付費加QQ羣

關於爲何,說幾點:

  1. 維護羣和解答問題將耗費做者額外時間和精力;
  2. 付費將迫使同窗們爲了避免付費而更加認真去思考問題和查看源碼;
  3. 有同窗以爲用了個人框架,節省了時間,提升了效率的,願意請我喝杯咖啡交個朋友的,很是歡迎;
  4. 有些同窗可能對本框架不熟悉或者碰到了其餘Android支付問題,須要快速諮詢的,能夠考慮付費入羣,不保證能解決,但會盡全力而爲。

感謝你們,但願一塊兒起步。

加羣步驟:掃碼支付時備註:easypay+你的qq號。我看到後將拉你入羣。付款不退,慎重考慮。


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.
複製代碼
相關文章
相關標籤/搜索