iOS 支付宝支付 微信支付SDK接口不统一? 盘他!
开发过支付宝、微信支付的同学都知道,微信的支付 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提供的接口,要繁琐了不少,可见接口设计是多么的重要,(当然支付宝的入参是事先拼接好的,拼接工作可以移交给后端)。
我们希望不管是微信支付还是支付宝支付,都能有统一风格的调用接口,方便逻辑复用,那么接下来的工作就是通过封装 使这这两者的接口统一。
在这里,我们设想的接口是:
- 只有一个入参,组织参数的方式尽量简单
- 回调直接给出结果
以下是设计的接口:
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接口不统一? 盘他!相关推荐
- iOS支付宝、微信支付
微信支付: 1.获取的数据有:(红色的一定要知道,因为生成签名会用到) 参数注释 例如 appid 应用IDwx3ff3d1fc2ff83937 mch_id 商户号1448474102 APP_KE ...
- 支付宝支付 微信支付SDK接口不统一? 盘他!
开发过支付宝.微信支付的同学都知道,微信的支付 API 设计感觉是 Java 开发工程师写的,远不如支付宝 SDK 的接口设计用起来顺手.在这里,统一封装微信支付和支付宝支付的API,使两种支付方 ...
- android平台安全支付服务(msp)应用开发接口,Android接入支付宝和微信支付的方法...
前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...
- Android和IOS 调用 支付宝和微信 支付方法
Android和IOS 调用 支付宝和微信 支付方法 转载于:https://www.cnblogs.com/huangzineng/p/7235705.html
- android微信支付回调方法,Android接入支付宝和微信支付的方法
前言 很多APP都需要支付功能,国内一般就是支付宝和微信了.目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端. APP端总结起来就是三步走: 接入支付的库 ...
- ios 支付宝:移动支付2
ios 支付宝:移动支付1 http://blog.csdn.net/dynastyting/article/details/51304293 ios 支付宝:移动支付2 http://blog.cs ...
- android支付宝支付微信支付封装,如何在Android App中集成支付宝和微信支付功能
前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介 ...
- 【支付】uniapp之app中的支付宝、微信支付的实现及orderInfo的说明
App平台支付流程 流程:支付平台功能申请 -> manifest.json 里配置支付参数 -> uni-app 里调用 API 进行支付.具体参考uniapp官方提供的app平台支付流 ...
- iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程
本章项目demo: https://github.com/zhonggaorong/weixinLoginDemo 本章不讲解: 微信sdk的集成 , 项目集成的文章请参照 (包含微信登录): h ...
最新文章
- 多媒体计算机系统是能进行获取,第六章 7 多媒体计算机系统.pdf
- 测试环境mysql参数max_allowed_packet自动更改的问题排查过程
- RSS接触 - RSS中的XML文档
- mybatis.net mysql_ADO.NET与ORM的比较(5):MyBatis实现CRUD
- 让你久等了!《码出高效:Java 开发手册》正式发布
- lintcode 落单的数(位操作)
- Spring中yml多环境配置
- SparkContext详述
- 福建建设工程质量安全网
- 版本管理工具git常用命令
- 国产操作系统Deepin安装
- 安卓逆向-new-sec6-4 Java反射相关知识以及平头哥框架hook构造函数 | App发布测试版本感染
- oracle+dbcc+checkdb,dbcc checkdb 修复数据库
- 模拟cmos集成电路(4)
- 一张图看懂在北京买房不同贷款方式的差别
- (深度学习)前馈神经网络—全连接网络的一般流程
- 闯关的lulu (有趣的规律题)
- GuLi商城-人人开源搭建后台管理系统
- Android整点报时
- 字符串匹配算法:BMH算法 C实现
热门文章
- 【Python】时间序列数据分析与预测之Python工具汇总
- 在家无聊就重装个系统吧 三分钟教你重装安装系统
- uni-app开发的h5,使用微信授权登录(前置条件+具体代码)
- Labview Socket通讯_通讯板卡
- win10蓝屏提示重新启动_关于网传0x000000F4蓝屏的临时分析解答
- python检测键盘输入termios、等待按键超时检测
- Vue 2.x折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件
- 使用传统AV屏幕用作树莓派屏幕
- 微信红包封面免费做了
- 深度学习思维导图(基于TensorFlow框架)