EasyPay 2.0.0 發(fā)布 ---- 極速集成Android支付

EasyPay(易支付)---- 一個(gè)便捷易用的Android平臺(tái)聚合支付框架

[圖片上傳失敗...(image-bc37b5-1572170858925)]

項(xiàng)目GitHub鏈接

[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)

  1. 精簡(jiǎn)微信支付集成和使用步驟,并更新微信支付SDK
  2. 更新支付寶SDK
  3. 更新銀聯(lián)SDK
  4. 支付回調(diào)fail方法返回code和message

聯(lián)系我

1) 有問題提Issues干旁。歡迎大家交流想法驶沼。

2) 郵箱聯(lián)系(Email : kingofglory@yeah.net)

3) 付費(fèi)加QQ群

關(guān)于為什么,說幾點(diǎn):

  1. 維護(hù)群和解答問題將耗費(fèi)作者額外時(shí)間和精力争群;
  2. 付費(fèi)將迫使同學(xué)們?yōu)榱瞬桓顿M(fèi)而更加認(rèn)真去思考問題和查看源碼商乎;
  3. 有同學(xué)覺得用了我的框架,節(jié)省了時(shí)間祭阀,提高了效率的,愿意請(qǐng)我喝杯咖啡交個(gè)朋友的鲜戒,非常歡迎专控;
  4. 有些同學(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.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末革半,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子流码,更是在濱河造成了極大的恐慌又官,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漫试,死亡現(xiàn)場(chǎng)離奇詭異六敬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驾荣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門外构,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秘车,你說我怎么就攤上這事典勇。” “怎么了叮趴?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵割笙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)伤溉,這世上最難降的妖魔是什么般码? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮乱顾,結(jié)果婚禮上板祝,老公的妹妹穿的比我還像新娘。我一直安慰自己走净,他們只是感情好券时,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伏伯,像睡著了一般橘洞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上说搅,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天炸枣,我揣著相機(jī)與錄音,去河邊找鬼弄唧。 笑死适肠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的候引。 我是一名探鬼主播侯养,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澄干!你這毒婦竟也來了沸毁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤傻寂,失蹤者是張志新(化名)和其女友劉穎息尺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疾掰,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搂誉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了静檬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炭懊。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拂檩,靈堂內(nèi)的尸體忽然破棺而出侮腹,到底是詐尸還是另有隱情,我是刑警寧澤稻励,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布父阻,位于F島的核電站愈涩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏加矛。R本人自食惡果不足惜履婉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斟览。 院中可真熱鬧毁腿,春花似錦、人聲如沸苛茂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妓羊。三九已至草戈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侍瑟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工丙猬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涨颜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓茧球,卻偏偏與公主長(zhǎng)得像庭瑰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抢埋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容