开发过支付宝、微信支付的同学都知道,微信的支付 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链接

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

  1. iOS支付宝、微信支付

    微信支付: 1.获取的数据有:(红色的一定要知道,因为生成签名会用到) 参数注释 例如 appid 应用IDwx3ff3d1fc2ff83937 mch_id 商户号1448474102 APP_KE ...

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

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

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

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

  4. Android和IOS 调用 支付宝和微信 支付方法

    Android和IOS 调用 支付宝和微信 支付方法 转载于:https://www.cnblogs.com/huangzineng/p/7235705.html

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

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

  6. ios 支付宝:移动支付2

    ios 支付宝:移动支付1 http://blog.csdn.net/dynastyting/article/details/51304293 ios 支付宝:移动支付2 http://blog.cs ...

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

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

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

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

  9. iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程

    本章项目demo: https://github.com/zhonggaorong/weixinLoginDemo 本章不讲解: 微信sdk的集成 , 项目集成的文章请参照 (包含微信登录):   h ...

最新文章

  1. 多媒体计算机系统是能进行获取,第六章 7 多媒体计算机系统.pdf
  2. 测试环境mysql参数max_allowed_packet自动更改的问题排查过程
  3. RSS接触 - RSS中的XML文档
  4. mybatis.net mysql_ADO.NET与ORM的比较(5):MyBatis实现CRUD
  5. 让你久等了!《码出高效:Java 开发手册》正式发布
  6. lintcode 落单的数(位操作)
  7. Spring中yml多环境配置
  8. SparkContext详述
  9. 福建建设工程质量安全网
  10. 版本管理工具git常用命令
  11. 国产操作系统Deepin安装
  12. 安卓逆向-new-sec6-4 Java反射相关知识以及平头哥框架hook构造函数 | App发布测试版本感染
  13. oracle+dbcc+checkdb,dbcc checkdb 修复数据库
  14. 模拟cmos集成电路(4)
  15. 一张图看懂在北京买房不同贷款方式的差别
  16. (深度学习)前馈神经网络—全连接网络的一般流程
  17. 闯关的lulu (有趣的规律题)
  18. GuLi商城-人人开源搭建后台管理系统
  19. Android整点报时
  20. 字符串匹配算法:BMH算法 C实现

热门文章

  1. 【Python】时间序列数据分析与预测之Python工具汇总
  2. 在家无聊就重装个系统吧 三分钟教你重装安装系统
  3. uni-app开发的h5,使用微信授权登录(前置条件+具体代码)
  4. Labview Socket通讯_通讯板卡
  5. win10蓝屏提示重新启动_关于网传0x000000F4蓝屏的临时分析解答
  6. python检测键盘输入termios、等待按键超时检测
  7. Vue 2.x折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件
  8. 使用传统AV屏幕用作树莓派屏幕
  9. 微信红包封面免费做了
  10. 深度学习思维导图(基于TensorFlow框架)