背景:接到开发任务,需要接入一个支付(啥也不知道,啥也不敢问)。
资料:集成指南
支付流程,大概是资料里说明的第一个流程 Hosted Checkout。
重点是下载SDK,位置在右侧栏: Mobile SDK
打开demo我们得到app中的流程:
// MARK: - 1. Create Session
// MARK: - 2. Set card info
// MARK: - 3. Update Session With Payer Data
// MARK: - 4. Check 3DS Enrollment
// MARK: - 5. Process Payment
配置好区域(Asia Pacific)和商户号(来源文档),填写上测试卡号(卡号来源),一路就干到了最后一个页面(前提是服务端将对应的服务端代码布好)。
WX20210901-155957@2x.png这个页面点击提交通过后,我们会得到一个sessionId,将这个通过接口提交给服务器,服务器使用sessionId获取一个token保存在数据库,用户再来付款的时候就不需要输入卡号了,直接使用token就可以扣款了。
流程是跑通中间经历了各种错,也花了很久,中途遇到xcode升级,导致xcode升级后MPGSDK.framework无法使用。
报错:
module compiled with Swift 5.2.2 cannot be imported by the Swift 5.3.2 compiler
搜索这个错误后下载低版本swft 5.2.2的工具包,切换到5.2.2又报:
Undefined symbols for architecture x86_64:
"___isOSVersionAtLeast", referenced from:
[IQToolbar fixedSpaceBarButton] in IQToolbar.o
工程中确实使用了IQKeyboardManager的三方库,还是手动集成,无奈去下载了一个最新的库,但错误依旧。
搞了几个小时,近乎崩溃了,最后只能切换新的swift(5.3.2),最后想到我去更新个最新的MPGSDK.framework不就可以了。
找MPGSDK以前下载的源代码,git pull更新一下,然后开始编译,得到最新的包果然成功解决。
当我打包又遇到了报错:
ld: warning: ignoring file Library/MPG/MPGSDK.framework/MPGSDK, missing required architecture armv7 in file Library/MPG/MPGSDK.framework/MPGSDK (3 slices)
Undefined symbols for architecture armv7:
"nominal type descriptor for MPGSDK.Gateway", referenced from:
_got.$s6MPGSDK7GatewayCMn in MPGBindingCreditCard.o
"nominal type descriptor for
意思是缺少MPGSDK.framework不包含armv7,于是我使用命令查看一下。
lipo -info MPGSDK.framework/MPGSDK
Architectures in the fat file: MPGSDK.framework/MPGSDK are: x86_64 arm64
打开sdk源码工程,修改编译架构为armv7编译出只支持armv7的SDK。
再使用命令将armv7合并到arm64的sdk里,命令如下:
lipo -create t1/MPGSDK.framework/MPGSDK t2/MPGSDK.framework/MPGSDK -output t1/MPGSDK.framework/M
PGSDK
说明:t1里是带arm64的t2是只支持armv7的。
命令执行成功后,使用查看命令:
lipo -info t1/MPGSDK.framework/MPGSDK
Architectures in the fat file: t1/MPGSDK.framework/MPGSDK are: x86_64 i386 armv7 arm64
将最新的SDK拖到工程里,再打包就成功了。
网友评论