专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
stormzhang  ·  双十一晚会不香了? ·  2 天前  
stormzhang  ·  游戏的玩法,已经变了 ·  1 周前  
鸿洋  ·  Android从上帝视角来看PackageM ... ·  1 周前  
51好读  ›  专栏  ›  郭霖

Android开发 : 使用EasyPay打造全能移动支付框架

郭霖  · 公众号  · android  · 2017-04-28 08:00

正文

今日科技快讯

最近有网友称:对华为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

开发者调用步骤:

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

  • 请求需要的参数字段为:

假设你想使用的网络框架是 Retrofit2。那么 network/NetwrokClientInterf 的实现类 RetrofitClient 需要做如下修改:

由于 Retrofit 请求一般需要借助一个 xxService类,那么实际修改的是 xxService类,以 EasyPay 源码中的 network/PrePayInfoService 为例,它需要修改成如下:

当网络连接使用其他框架时,需要在 NetworkClientInterf 对应的实现类中修改路径及请求参数字段。

假如当前用户使用了微信支付,当服务器返回的数据格式如下时:

假如json的格式如下:

以你们server端人员给出的实际json字段来修改 pay/PrePayInfo。

当为其他支付方式时,也需要在对应的 PayStragetyInterf 支付实现策略类中修改解析。

library源码中需要修改的地方都打上了TODO标签,导入Android Studio后,如下图方式查看:

开发者能做什么

EasyPay 目前实现了微信,支付宝app支付,如果你觉得支付逻辑代码不OK?完全可以通过实现 PayStragetyInterf 来完全重写一个自己的微信,支付宝支付策略。

EasyPay支持的平台(微信,支付宝,银联)不在你的需求范围内?可以通过实现 PayStragetyInterf 来扩展一种支付方式。

EasyPay支持的网络框架(HttpUrlConnection,OkHttp3(前两者严格意义上不属于框架),Volley,Retrofit2)用的不顺手?那就自己撸一个 NetworkClientInterf 接口的实现类来实现自己的网络请求客户端。

其他,还是不够满足你的需求,欢迎提出issue,或者加入一起开发,完善该repo,打造一个更加优秀的EasyPay。

项目地址:

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

附录

移动支付开发博文(点击可查看)

《微信支付接入详细指南》

《支付宝SDK接入详细指南》

移动支付的流程

1. APP将商品信息post给APP服务器

2. APP服务器携带商品信息和一些其他信息请求支付平台服务器,获取预支付订单信息

3. APP服务器得到预支付订单信息并返给APP

4. APP解析预支付订单信息

5. APP利用解析后的预支付信息调起支付客户端(微信,支付宝,等)

6. 支付客户端将支付结果返给APP

7. APP向用户展示支付结果

EasyPay的回调errCode错误码列表

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: