1. 程式人生 > >Android開發 : 使用EasyPay打造全能移動支付框架

Android開發 : 使用EasyPay打造全能移動支付框架

640?wx_fmt=png

今日科技快訊

最近有網友稱:對華為P10進行了快閃記憶體讀寫速度測試,由於採用了不同供應商,結果顯示資料指標差距較大,網友質疑,P10記憶體縮水。而華為終端官方微博對“快閃記憶體門”事件釋出宣告稱:為了兼顧體驗、品質與供應,採用了業界通用的辦法,P10快閃記憶體選型採用兩種主流器件同時供貨的模式。對此眾多自媒體吐槽,稱華為不應該口掩蓋問題。

作者簡介

明天就是五一假期了,提前祝大家節日快樂!

本篇是 MichaelX 第四篇投稿,他之前已經分享過微信以及支付寶的接入,而今天他將帶來集成了微信與支付寶的框架,希望能幫助到大家。

MichaelX 的部落格地址:

http://blog.csdn.net/xiong_it

前言

在這之前,筆者釋出了兩篇移動app支付相關博文,得到一些關注,但是由於博文中程式碼零碎,有些讀者私信博主,以及加筆者qq諮詢相關問題。考慮到這些,筆者把之前專案中的支付相關程式碼從業務中剝離出來,重構,形成了現在的 EasyPay。

EasyPay是什麼

EasyPay 旨在幫助 Android 開發者快速整合接入移動支付SDK,其中包括主流的微信APP支付支付寶APP支付,銀聯支付(開發中)。

為什麼要用EasyPay

EasyPay和微信支付等移動支付SDK的區別

EasyPay 是一個開源的聚合支付可定製化框架,目前已整合微信APP支付,支付寶APP支付SDK。銀聯支付(開發中)。

Android開發者只需要簡單呼叫EasyPay的幾行程式碼,即可調起支付客戶端,完成支付流程,得到支付結果。

EasyPay宗旨:簡單,易用,可擴充套件。

EasyPay和其他第三方聚合支付的區別

第三方聚合支付,如知名的Ping++,需要同時接入其 Server端SDK 和 Client端SDK,使接入企業面臨風險:

1、資訊洩露風險

2、支付整合服務商提供服務跟不上商戶業務發展需要的風險

3、支付整合服務商系統穩定性、安全性的風險

4、資金安全風險

知乎:《使用第三方支付整合有何風險,例如 Beecloud 或者 Ping++?》

https://link.juejin.im/?target=https%3A%2F%2Fwww.zhihu.com%2Fquestion%2F31237376

此外,天下沒有免費的午餐,第三方聚合支付平臺一般需要收取5%~15%左右的手續費等各種服務費用,使得接入企業收益受損。

而使用開源的EasyPay,程式碼透明,與 Server端 無關,Android開發者只需要根據自己需求對 EasyPay 進行個性化定製,即可打造一個支付平臺齊全的無風險支付框架。但是客觀的講,這同時也是 EasyPay 的短板,它只簡化了APP端開發者的呼叫工作,Server端 工作人員仍需要按照移動支付第三方平臺的SDK文件進行開發。

如果覺得EasyPay對你有幫助,你付出的僅僅是一個點贊,或者一個star或者fork,如果不滿意,請幫忙提issue指出,而不是5%-15%左右的手續費等各種服務費用。

通過閱讀 EasyPay原始碼,你可以知道移動支付的流程是怎樣的:

APP->APP伺服器->支付平臺後臺伺服器->APP伺服器->APP->支付客戶端->APP

通過擴充套件EasyPay,你可以較快的搭建一個私有的功能完善的支付框架。

EasyPay怎麼用

使用者場景:

APP使用者選擇一個價格為666元的商品:"皮皮蝦",商品描述:"此商品屬性過於強大,難以調教,一般人切勿輕易購買,吼吼!",然後使用者進入收款臺,選擇了微信支付。

好勒,皮皮蝦,咱們走!此處省略:皮皮蝦,咱們走.jpg

640?wx_fmt=png

開發者呼叫步驟:

1. 通過建造者模式建立支付引數 PayParams 例項並傳入EasyPay的建立方法中

2. 傳入支付結果回撥介面例項得到支付結果回撥

假如你的app中每個商品有id,請求伺服器時可以用商品id代替價格,讓伺服器自己去查詢價格,防止客戶端中的商品價格被惡意修改。

開發者需要做什麼

上一節是開發者在 Activity/Fragment 之類的View層呼叫程式碼,除此之外,開發者還需要做一些少量的額外的工作。

需要匯入EasyPay/library原始碼依賴並修改app客戶端相關檔案

1. 下載 EasyPay 原始碼到本地

2. 在Android Studio中開啟你的app專案

3. Android Studio左上角 File->New->Import Module->... 選擇library目錄 匯入,app會自動依賴library這個module

4. 複製 EasyPay/sample 下wxapi包到你的包路徑下,假如你的包名:com.app.payclient,那麼wxapi包應該放在payclient包下面

5. 按照 EasyPay/sample 的 AndroidMenifest.xml 檔案修改你的清單檔案

6. 按照 EasyPay/sample 的 proguard-rules.pro 修改你的混淆檔案

需要修改伺服器請求路徑和請求欄位和返回的json解析

由於筆者並不知道你的伺服器地址和請求路徑及欄位和返回json格式,所以你只需要動動小手修改EasyPay/library中網路請求和解析*部分程式碼即可.

假如你的支付api介面文件如下:

  • host:http://api.yourhost.com/

  • 路徑:pay/

  • 請求方式為:Http,get

  • 請求需要的引數欄位為:

640?wx_fmt=png

假設你想使用的網路框架是 Retrofit2。那麼 network/NetwrokClientInterf 的實現類 RetrofitClient 需要做如下修改:

由於 Retrofit 請求一般需要藉助一個 xxService類,那麼實際修改的是 xxService類,以 EasyPay 原始碼中的 network/PrePayInfoService 為例,它需要修改成如下:

640?wx_fmt=png

當網路連線使用其他框架時,需要在 NetworkClientInterf 對應的實現類中修改路徑及請求引數欄位。

假如當前使用者使用了微信支付,當伺服器返回的資料格式如下時:

640?wx_fmt=png

假如json的格式如下:

640?wx_fmt=png

以你們server端人員給出的實際json欄位來修改 pay/PrePayInfo。

當為其他支付方式時,也需要在對應的 PayStragetyInterf 支付實現策略類中修改解析。

library原始碼中需要修改的地方都打上了TODO標籤,匯入Android Studio後,如下圖方式檢視:

640?wx_fmt=png

開發者能做什麼

EasyPay 目前實現了微信,支付寶app支付,如果你覺得支付邏輯程式碼不OK?完全可以通過實現 PayStragetyInterf 來完全重寫一個自己的微信,支付寶支付策略。

EasyPay支援的平臺(微信,支付寶,銀聯)不在你的需求範圍內?可以通過實現 PayStragetyInterf 來擴充套件一種支付方式。

EasyPay支援的網路框架(HttpUrlConnection,OkHttp3(前兩者嚴格意義上不屬於框架),Volley,Retrofit2)用的不順手?那就自己擼一個 NetworkClientInterf 介面的實現類來實現自己的網路請求客戶端。

其他,還是不夠滿足你的需求,歡迎提出issue,或者加入一起開發,完善該repo,打造一個更加優秀的EasyPay。

專案地址:

https://github.com/xiong-it/EasyPay

附錄

移動支付開發博文(點選可檢視)

移動支付的流程

1. APP將商品資訊post給APP伺服器

2. APP伺服器攜帶商品資訊和一些其他資訊請求支付平臺伺服器,獲取預支付訂單資訊

3. APP伺服器得到預支付訂單資訊並返給APP

4. APP解析預支付訂單資訊

5. APP利用解析後的預支付資訊調起支付客戶端(微信,支付寶,等)

6. 支付客戶端將支付結果返給APP

7. APP向用戶展示支付結果

EasyPay的回撥errCode錯誤碼列表

640?wx_fmt=png

更多

每天學習累了,看些搞笑的段子放鬆一下吧。關注最具娛樂精神的公眾號,每天都有好心情。

640?wx_fmt=gif

如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點選“投稿”選單檢視。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:

640?wx_fmt=jpeg