支付宝支付 微信支付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 *)orderStr
      fromScheme:(NSString *)schemeStr
        callback:(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链接

原文地址:https://www.cnblogs.com/miaocunfa/p/11650153.html

时间: 2024-08-10 15:10:45

支付宝支付 微信支付SDK接口不统一? 盘他!的相关文章

iOS 支付宝、微信支付的集成记录

一.前言 最近项目需求需要集成支付宝和微信支付,以前没有接触过,这次正好乘着这次机会了解下. 总的来说,客户端的工作不多,无非就是就是集成SDK,然后获取后端传来的参数,吊起支付,回调处理等. 先附上官方文档链接: 支付宝:https://docs.open.alipay.com/204 微信支付:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1 废话不多说,开始吧. 二.支付宝 1.先集成SDK pod 'Alipay

支付宝和微信支付的各种填坑

填坑 支付宝填坑是每个接入支付宝必经之路,下面是我接入支付宝遇到的问题汇总,希望大家在接入的路上少一点弯路 问题1. Util/base64.h:63:21: Cannot find interface declaration for ‘NSObject’, superclass of ‘Base64’ 解决办法: 这是base64.h中没有加入#import 系统库文件导致,这个错误报错方法直接想喷它一脸.报错方式太恶心. 1 2 解决办法: 这是base64.h中没有加入#import  系

10分钟搞定支付宝和微信支付 的 各种填坑

填坑   支付宝填坑是每个接入支付宝必经之路,下面是我接入支付宝遇到的问题汇总,希望大家在接入的路上少一点弯路 问题1. Util/base64.h:63:21: Cannot find interface declaration for ‘NSObject’, superclass of ‘Base64’ 解决办法: 这是base64.h中没有加入#import  系统库文件导致,这个错误报错方法直接想喷它一脸.报错方式太恶心. 问题2.截图告知你什么问题 解决办法: 这个问题可以同上的,心情

10分钟搞定支付宝和微信支付的各种填坑

支付宝填坑是每个接入支付宝必经之路,下面是我接入支付宝遇到的问题汇总,希望大家在接入的路上少一点弯路. 问题1. Util/base64.h:63:21: Cannot find interface declaration for ‘NSObject’, superclass of ‘Base64’ 解决办法: 这是base64.h中没有加入#import 系统库文件导致,这个错误报错方法直接想喷它一脸.报错方式太恶心. 问题2.截图告知你什么问题 解决办法: 这个问题可以同上的,心情好,截图再

支付宝和微信支付程序-附源码下载

1.同时支持支付宝.微信支付的两种支付模式:刷卡支付 扫码支付:只要把相关支付参数配置到程序里面,就可以正常使用支付:2.可以对接到不同的行业系统里面去,比如餐饮酒店系统,医院系统等需要支付的系统3.开发环境为Visual Studio 2010,无数据库 源码下载点这里 原文地址:https://www.cnblogs.com/starksoft/p/11029393.html

Android 支付宝以及微信支付快速接入流程

简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:https://open.alipay.com/platform/home.htm 支付宝首页 这里 有两个需要注意的地方 一个是管理中心,另外一个是我的支付宝 管理中心: 管理中心 管理中心 我们需要 创建一个应用 提交给支付宝进行审核. 我的支付宝: 在这里我的支付宝 是一个商户版,一会我们会需要在

简聊iOS支付集成(支付宝和微信支付)

一.支付集成是什么 1.现在大部分app都有快捷支付功能,支付集成将第三方支付平台集成到自己的项目中,能够完成自己项目中的支付功能, 二.支付集成的使用 <1>.支付宝: 下载SDK和Demo:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1 配置相关信息: 1.导入SDK: AlipaySDK.bundle AlipaySDK.framework 2.配置静态库:在

java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到springmvc+spring+mybatis环境全过程(支付宝和微信支付、附源码)

一.支付宝测试环境代码测试 1.下载电脑网站的官方demo: 下载地址:https://docs.open.alipay.com/270/106291/ 2.下载解压导入eclipse readme.txt请好好看一下. 只有一个Java配置类,其余都是JSP. 3.配置AlipayConfig (1).注册蚂蚁金服开发者账号(免费,不像苹果会收取费用) 注册地址:https://open.alipay.com ,用你的支付宝账号扫码登录,完善个人信息,选择服务类型(我选的是自研). (2).设

支付宝支付 微信支付的小坑(2)

1)为什么支付成功不能打开APP 2)为什么支付的时候不能调用支付宝钱包或者不能调用微信支付 3)为什么那么多支付宝微信支付集成那么多编译报错啊 4)为什么不能接收到支付成功的回调 5)后台没有RSA加密想把支付宝的加密修改成MD5加密可以吗? 6)后台怎么知道支付成功了啊? 此问题有时间我会一一回答