|
|
|
|
移动端

iOS不用官方SDK实现微信和支付宝支付XHPayKit

前段时间由于项目需求,移除了项目中的微信支付SDK和支付宝支付SDK,这种情况下需要自己搞定支付,第一时间考虑到的是使用openshare,但是当下载openshare下来后发现,openshare的支付接口,并不能直接替换官方SDK支付接口。

作者:朱晓辉来源:简书|2018-02-25 11:22

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


前言

前段时间由于项目需求,移除了项目中的微信支付SDK和支付宝支付SDK,这种情况下需要自己搞定支付,第一时间考虑到的是使用openshare,但是当下载openshare下来后发现,openshare的支付接口,并不能直接替换官方SDK支付接口。

官方SDK的实现逻辑是后台订单签名完成后,客服端传签名信息及参数给支付SDK,支付SDK生成协议url,然后拉起第三方支付APP,而openshare的支付接口是直接传拉起支付的协议url地址,将生成协议url地址的操作也交给后台来生成。

这样的话后台需要修改代码,能否不修改后台代码,弄一个支付接口直接替换官方SDK支付接口,实现无缝对接呢,于是就研究了下微信和支付宝支付时APP间通讯关系,最后封装成XHPayKit。

blob.png
微信、支付宝支付

特性:

  1. XHPayKit拥有和官方SDK类似接口,可以直接替换官方SDK支付接口,如果你使用过官方SDK,那么转换为本库你只需花费极短时间.
  2. XHPayKit只有10kb大小,不用导入任何依赖库,便可实现微信支付、支付宝支付,如果你想为项目瘦身或由于某种原因,不想使用官方SDK实现支付功能,此库将是一个不错的选择.
  3. XHPayKit使用时,不需要配置微信等平台appid等信息,服务端配置就可以了,因为后台签名订单时会返回appid等信息给客户端.

注意:

  1. 先在微信、支付宝开放平台注册你的应用,并获得支付能力
  2. 导入此库,并请将 weixin 、 alipay 字段添加到info.plist白名单
  3. 添加自己APP URL Schemes,和微信回调URL Schemes,详见README文档

使用方法:

1.微信支付

  1. //微信支付参数,下面7个参数,由后台签名订单后生成,并返回给客服端(与官方SDK一致) 
  2.  //注意:请将下面参数设置为你自己真实订单签名后服务器返回参数,便可进行实际支付 
  3. XHPayWxReq *req = [[XHPayWxReq alloc] init]; 
  4. req.openID = @""
  5. req.partnerId = @""
  6. req.prepayId = @""
  7. req.nonceStr = @""
  8. req.timeStamp = 1518156229; 
  9. req.package = @""
  10. req.sign = @""
  11.           
  12. //传入订单模型,拉起微信支付 
  13. [[XHPayKit defaultManager] wxpayOrder:req completed:^(NSDictionary *resultDict) { 
  14.           NSLog(@"支付结果:\n%@",resultDict); 
  15.           NSInteger code = [resultDict[@"errCode"] integerValue]; 
  16.           if(code == 0){//支付成功 
  17.                   
  18.           } 
  19. }]; 

2.支付宝支付

  1. //支付宝订单签名,此签名由后台签名订单后生成,并返回给客户端(与官方SDK一致) 
  2. //注意:请将下面值设置为你自己真实订单签名,便可进行实际支付 
  3. NSString *orderSign = @"很长的一串支付宝订单签名"
  4.           
  5. //传入支付宝订单签名 和 自己App URL Scheme,拉起支付宝支付 
  6. [[XHPayKit defaultManager] alipayOrder:orderSign fromScheme:@"XHPayKitExample" completed:^(NSDictionary *resultDict) { 
  7.     NSLog(@"支付结果:\n%@",resultDict); 
  8.     NSInteger status = [resultDict[@"ResultStatus"] integerValue]; 
  9.     if(status == 9000){//支付成功 
  10.                   
  11.     } 
  12. }]; 

3.在Appdelegate中添加以下代码 - 处理第三方支付跳回商户app携带的支付结果Url

  1. #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0 
  2. /** iOS9及以后 */ 
  3. - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<uiapplicationopenurloptionskey, id> *)options 
  4.     BOOL result = [[XHPayKit defaultManager] handleOpenURL:url]; 
  5.     if (!result) {//这里处理其他SDK(例如QQ登录,微博登录等) 
  6.           
  7.     } 
  8.     return result; 
  9. #endif 
  10. /** iOS9以下 */ 
  11. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
  12.     BOOL result = [[XHPayKit defaultManager] handleOpenURL:url]; 
  13.     if (!result) {//这里处理其他SDK(例如QQ登录,微博登录等) 
  14.           
  15.     } 
  16.     return result; 
  17. }</uiapplicationopenurloptionskey, id> 

其它接口:

  1. /** 
  2.  是否安装微信 
  3.  @return 已安装YES,未安装NO 
  4.  */ 
  5. +(BOOL)isWxAppInstalled; 
  6. /** 
  7.  是否安装支付宝 
  8.  @return 已安装YES,未安装NO 
  9.  */ 
  10. +(BOOL)isAliAppInstalled; 

支付结果resultDict释义:

微信

  1.     "errCode":0, 
  2.     "errStr":"成功" 
  3. //以下状态码含义与官方SDK一致 
  4. errCode = 0,成功 
  5. errCode = -1,普通错误类型 
  6. errCode = -2,用户点击取消并返回 
  7. errCode = -3,发送失败 
  8. errCode = -4,授权失败  
  9. errCode = -5,微信不支持 

支付宝

  1.     "result":""
  2.     "resultStatus":"9000"
  3.     "memo":"支付成功" 
  4. //以下状态码含义与官方SDK一致 
  5. resultStatus = 9000,支付成功 
  6. resultStatus = 8000,正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态 
  7. resultStatus = 4000,支付失败 
  8. resultStatus = 5000,重复请求 
  9. resultStatus = 6001,用户中途取消 
  10. resultStatus = 6002,网络连接出错 
  11. resultStatus = 6004,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态 

小结:

XHPayKit的实现非常简单,感兴趣的同学可以下载下来研究下支付时APP间通讯.

代码地址:https://github.com/CoderZhuXH/XHPayKit

【编辑推荐】

  1. 开发者福利 游族Mob宣布短信SDK“全球免费”
  2. 开发者所需要知道的iOS 11 SDK新特性
  3. 微信小程序云端增强 SDK接入
  4. 使用CocoaPods给微信集成SDK打印收发消息
  5. 对标苹果 ARKit,Google 推增强现实 SDK ARCore
【责任编辑:未丽燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

J2ME手机游戏设计技术与实战

本书主要介绍了在手机上开发J2ME游戏的方法,作者在介绍了J2ME游戏开发相关知识背景的基础上,以大富翁手机游戏的设计开发为例,详细讲述了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊