开发过支付宝、微信支付的同学都知道,微信的支付 API 设计感觉是 Java 开发工程师写的,远不如支付宝 SDK 的接口设计用起来顺手。在这里,统一封装微信支付和支付宝支付的API,使两种支付方式对外提供一致的调用接口。

   首先我们来看支付宝支付SDK的API是怎么设计的:

/***  支付接口**  @param orderStr        支付订单信息字串*  @param schemeStr       调用支付的app注册在info.plist中的scheme*  @param completionBlock 支付结果回调Block,用于wap支付结果回调跳转支付宝支付时只有当processOrderWithPaymentResult接口的completionBlock为nil时会使用这个bolock*/
- (void)payOrder:(NSString *)orderStrfromScheme:(NSString *)schemeStrcallback:(CompletionBlock)completionBlock;

  支付宝SDK的设计十分简洁,只有三个参数,分别负责:1.支付信息 2.进程跳转的 scheme 3.支付结果回调 block。

  然后看一下微信支付的API:

/*! @brief 发送请求到微信,等待微信返回onResp** 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型* SendAuthReq、SendMessageToWXReq、PayReq等。* @param req 具体的发送请求,在调用函数后,请自己释放。* @return 成功返回YES,失败返回NO。*/
+ (BOOL)sendReq:(BaseReq*)req;
/*! @brief 处理微信通过URL启动App时传递的数据** 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。* @param url 微信启动第三方应用时传递过来的URL* @param delegate  WXApiDelegate对象,用来接收微信触发的消息。* @return 成功返回YES,失败返回NO。*/
+ (BOOL)handleOpenURL:(NSURL *)url delegate:(nullable id<WXApiDelegate>)delegate;

  要发起微信支付,首先要实例化 一个PayReq对象,接着将这个对象的6个字段分别赋值,然后发起支付请求,等从微信返回到APP后,再从代理方法获取支付结果。相比支付宝SDK提供的接口,要繁琐了不少,可见接口设计是多么的重要,(当然支付宝的入参是事先拼接好的,拼接工作可以移交给后端)。

  我们希望不管是微信支付还是支付宝支付,都能有统一风格的调用接口,方便逻辑复用,那么接下来的工作就是通过封装 使这这两者的接口统一。

在这里,我们设想的接口是:

  1. 只有一个入参,组织参数的方式尽量简单
  2. 回调直接给出结果

以下是设计的接口:

typedef void(^PayResult)(PayResponse *result);
typedef void(^wxShareCallback)(int resp);
@interface PaymentHub : NSObject<WXApiDelegate>
/**获取 单利@return 返回单利实例*/
+ (instancetype)hub;
/**支付宝支付@param orderStr 支付订单加密信息@param callback 支付结果回调*/
- (void)AlipayWithOrder:(NSString *)orderStr callback:(PayResult)callback;/**微信支付@param request 微信支付所需参数@param callback 支付结果回调*/
- (void)WXpayWithRequest:(PayReq *)request callback:(PayResult)callback;/**进程间通信处理@param url 进程间 交换的数据@param callback 微信分享回调*/
- (void)handleOpenUrl:(NSURL *)url response:(wxShareCallback)callback;
+ (PayReq *)fromMap:(NSDictionary *)dict;

为了方便组织微信支付所需的字段,fromMap方法可以将包含数据的字典转换为 一个PayReq实例对象。在封装里,将微信SDK的 代理指定为 PaymentHub的实例,在实例内部处理微信的代理回调。
考虑到微信SDK还可能会负责分享,在handleOpenUrl方法里需要做区分处理。

demo链接

支付宝支付 微信支付SDK接口不统一? 盘他!相关推荐

  1. iOS 支付宝支付 微信支付SDK接口不统一? 盘他!

      开发过支付宝.微信支付的同学都知道,微信的支付 API 设计感觉是 Java 开发工程师写的,远不如支付宝 SDK 的接口设计用起来顺手.在这里,统一封装微信支付和支付宝支付的API,使两种支付方 ...

  2. android平台安全支付服务(msp)应用开发接口,Android接入支付宝和微信支付的方法...

    前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...

  3. android微信支付回调方法,Android接入支付宝和微信支付的方法

    前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...

  4. android支付宝支付微信支付封装,如何在Android App中集成支付宝和微信支付功能

    前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介 ...

  5. 【支付】uniapp之app中的支付宝、微信支付的实现及orderInfo的说明

    App平台支付流程 流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付.具体参考uniapp官方提供的app平台支付流 ...

  6. Android接入支付宝和微信支付

    前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...

  7. Android如何调用支付宝支付 微信支付

    1.支付宝支付-------------------------- 1,到支付宝官网,下载支付宝集成开发包,看懂里面的关键代码 由于android设备一般用的都是无线支付,所有我们申请的就是支付宝无线 ...

  8. 一个项目搞定支付宝,微信支付!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:今天给大家推荐 6 个 Spring Boot 项目,拿来就可以赚钱! 个人原创100W+访问量博客:点击前往, ...

  9. Flutter 成功在鸿蒙上运行;微信 8.0 发布;支付宝和微信支付达到反垄断标准 | 极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

最新文章

  1. 一个程序员的职业规划
  2. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
  3. Windows 下 Redis 的下载和安装
  4. int函数在Oracle,vb中int是什么意思 ?
  5. Registered Nurse in the US
  6. WinCE下的GPIO中断的处理
  7. 面试中遇到这 3 个SQL问题,最容易掉坑里!
  8. 给php添加标题的代码,纯代码给WP网站的分类和Tag页面添加自定义标题
  9. C++监控注册表信息
  10. 通过CrawlSpider对招聘网站进行整站爬取(拉勾网实战)
  11. RN react-navigation使用
  12. 抽象类和接口的主要区别
  13. Google Reader 使用技巧及OPML订阅源分享
  14. mysql主从不同步监控_MySQL主从同步监控
  15. 实现cron时间表达式生成器
  16. 百度地图 -- 鼠标绘制工具DrawingManager
  17. 2013年7月美国Boston之旅
  18. java编程的一个猜数字有趣小游戏
  19. 目标伪类选择器元素状态伪类
  20. 搜狐畅言社交化评论插件接入之单点登录

热门文章

  1. android 备份游戏数据,用于Android游戏存档备份和存档还原的教程(图形中的详细信息)...
  2. # 英语四级 词根+例句
  3. 关于学习数学等方法的心得
  4. 2010-2019,我,一个普通职场人的十年变迁
  5. 实测 Google 全同态加密FHE,效果如何?
  6. ae破碎效果在哪_AE教程 | 五分钟制作文字破碎效果
  7. 开源知识管理系统_逛了4年Github,一口气把我收藏的 Java 开源项目分享给你
  8. 配色三部曲-创建自己的调色板
  9. Linux 命令 poll 和 ppoll 详解 + 实例
  10. ITK:可视化静态稀疏Malcolm 2D水平集图层