本身在两个项目中接入了移动端支付宝和微信支付,也对支付代码进行了简单的封装。在项目集成与调试的时候遇到了一些问题,本身也一直想找时间进行整理,方便之后在项目中集成与使用。支付宝SDK和微信SDK都进行了相应的更新,我项目中使用的仍是老版本的SDK,下面开始介绍最新版本的SDK集成与使用。c++
在接入前,首先要对流程要有相应的了解,主要有如下三个步骤(具体详情,请点击上面连接查看):git
[1]、将下面两个文件拖入到工程 AlipaySDK.bundle AlipaySDK.framework github
libc++.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
UIKit.framework
Foundation.framework
CFNetwork.framework
CoreMotion.framework
AlipaySDK.famework
sql
注意数组
若是是Xcode 7.0以后的版本,须要添加libc++.tbd、libz.tbd; 若是是Xcode 7.0以前的版本,须要添加libc++.dylib、libz.dylibbash
command+R
运行一下,你会发现报错,就是
oppssl/asn1.h not found,在我最开始集成支付宝的时候,这个问题折腾了我很久,网上和官方都能找到解决方法,虽然每次都解决了,可是都尝试了很久。
报错解决
一、oppssl/asn1.h not found 微信
$(SRCROOT)/项目名称
,我写的
WBPayManagerDemo中的
openssl文件夹在
AliSDK_V15.5.0文件下,因此这里须要修改
$(SRCROOT)/WBPayManagerDemo/AliSDK_V15.5.0
微信SDK集成主要有如下三个步骤:app
向微信注册你的应用程序id 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将得到AppID,可当即用于开发。但应用登记完成后还须要提交审核,只有审核经过的应用才能正式发布使用。ide
下载微信终端SDK文件 SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个。 如选用手动集成,请前往“资源下载页”下载最新SDK包工具
搭建开发环境
pod 'WechatOpenSDK'
注意SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
libc++.tbd
Security.framework
CoreTelephony.framework
CFNetwork.framework
复制代码
注意 Xcode 7.0以前
libz.tbd
对应的是libz.dylib
libsqlite3.0.tbd
对应的是libsqlite3.0.dylib
libc++.tbd
对应的是libc++.dylib
[4]、配置工程
封装主要是新建了一个工具类,经过封装工具,能够将支付宝Block回调和微信的代理回调集中在一个回调里,支付只需调用一行代码就OK,我如今的项目都是用的这个支付工具类,下面介绍下核心代码和使用注意事项吧。
[1]注意URL Types的配置
在WBPayManager.h的头文件中,定义了两个URL identifier,因此配置的时候,须要保证info里的identifier和头文件定义的一致。
//此处必须保证在Info.plist 中的 URL Types 的 Identifier 对应一致
UIKIT_EXTERN NSString * const ALIPAY_URLIDENTIFIER;/** 支付宝URL NAME */
UIKIT_EXTERN NSString * const WECHAT_URLIDENTIFIER;/** 微信URL NAME */
复制代码
/** < 微信须要在程序加载完成注册 > */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[WBPayManager shareManager] wb_registerApp];
return YES;
}
/**
*
* 最老的版本,最好也写上
*/
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
// NOTE: 9.0之后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
/** * iOS 9.0 以前 会调用 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
复制代码
[3]、发起支付
//直接传入后台返回的订单信息支付串
[[WBPayManager shareManager] wb_payWithOrderInfo:orderInfo payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
//支付结果回调
}]
复制代码
//构建PayReq对象,后台返回
PayReq * req = [PayReq new];
req.partnerId = orderModel.wechatpay_data.partnerid;
req.prepayId= orderModel.wechatpay_data.prepayid;
req.package = orderModel.wechatpay_data.package;
req.nonceStr= orderModel.wechatpay_data.noncestr;
req.timeStamp= (UInt32)[orderModel.wechatpay_data.timestamp integerValue];
req.sign= orderModel.wechatpay_data.sign;
[[WBPayManager shareManager] wb_payWithOrderInfo:req payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
//支付结果回调
}]
复制代码
具体详情,请戳GitHub:WBPayManagerDemo
终于整理完成了,经过此次整理,但愿之后在项目集成少遇到一些坑吧,微信的支付文档感受确实有点老了,SDK在更新,文档却没有更新,不过也没有关系。最新版本的SDK在本身的项目中也没有使用,项目中仍是用的老版本的SDK,我也将老版本SDK的下载连接也放在文章中。若有不对的地方,欢迎指正,但愿这篇文章能对你有所帮助。