WorldPayCSE 的 Xamarin IOS 绑定库

Posted

技术标签:

【中文标题】WorldPayCSE 的 Xamarin IOS 绑定库【英文标题】:Xamarin IOS Binding library for WorldPayCSE 【发布时间】:2021-12-09 12:11:15 【问题描述】:

我需要在 xamarin 表单中为 iosandroid 使用 worldPay CSE(客户端加密)SDK (https://developer.worldpay.com/docs/wpg/clientsideencryption),因此我创建了 2 个绑定库。我已经成功地为 android 创建了一个包装器,这工作正常,但我遇到了 IOS 问题。

我下载了https://github.com/Worldpay/worldpay-cse-lib-ios 并按照以下教程创建绑定库并使用objective sharpie https://www.xamboy.com/2020/07/20/creating-a-xamarin-binding-library-for-ios-and-android-part-1/映射API 定义

我能够构建解决方案,它似乎是从头文件创建对象,但是当我运行 worldpayCSE.Encrypt(wpCardData, out NSEncryptError) 方法时,我收到以下错误:

Objective-C 抛出异常。名称:NSInvalidArgumentException 原因:-[NSTaggedPointerString isEmpty]:发送了无法识别的选择器 到实例 0xff2d7cc5da80afba 本机堆栈跟踪:0 CoreFoundation 0x000000010b2ebfba __exceptionPreprocess + 242 1 libobjc.A.dylib 0x000000011c694ff5 objc_exception_throw + 48 2 核心基础 0x000000010b2fad2f +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0 3 核心基础 0x000000010b2f04cf 转发 + 1455 4 CoreFoundation 0x000000010b2f27a8 _CF_forwarding_prep_0 + 120 5 Test3dsecureSolution.iOS 0x000000010a6d180a -[WPCardValidator validateNumber:withExpectedLength:] + 61 6 Test3dsecureSolution.iOS 0x000000010a6d18ba -[WPCardValidator validateMonth:] + 48 7 Test3dsecureSolution.iOS 0x000000010a6d153e -[WPCardValidator validate:] + 117 8 Test3dsecureSolution.iOS 0x000000010a6d3b66 +[WorldpayCSE 验证:] + 72 9 Test3dsecureSolution.iOS 0x000000010aa41089 xamarin_dyn_objc_msgSend + 217 10 ??? 0x00000001592f5e10 0x0 + 5791243792

它似乎在验证方法上失败了。但是,当我在 xcode 中运行本机演示项目时,它工作正常,所以我很确定问题不在于框架文件,我怀疑我可能遗漏了一些东西

我检查了 API 定义,而 2 个验证标签确实标记了。它们似乎与 GetPublic Key 和 GetJson 有关。两者都不需要接触xamarin IOS,看起来是红鹭

我已将我的解决方案的副本推送到 git hub。加密方法是从about页面的按钮通过依赖服务触发到WorldPayClient.cs的IOS实现

https://github.com/Law85/XamarinForms.WorldPayCSEBinding

这也是我为生成 API 定义和支撑而运行的脚本 Sharpie 绑定 --output=WorldpayCSE --namespace=WorldpayCSE --sdk=iphoneos14.5 /Users/lukewinthorpe/Desktop/WorldPay/WorldpayCSE.framework/Headers/*.h -scope /Users/lukewinthorpe/Desktop/WorldPay/WorldpayCSE。框架/标题

任何人都可以为我提供任何帮助,我们将不胜感激。

谢谢 卢克

【问题讨论】:

【参考方案1】:

如果将来有人需要,我设法解决了这个问题。生病检查到回购。所以看起来我忽略了世界支付网站上的第 2 步

替代方案:手动安装使用手动方法:

1.下载 WorldpayCSE.framework 和 openssl.framework 并将其导入您的项目。为此请使用 GitHub 发布页面。

2.在 Xcode 中,将 -ObjC 添加到 Build Settings 中的 Other Linker Flags。

https://developer.worldpay.com/docs/wpg/clientsideencryption/ios-integration

在框架 open.ssl 和 WorldPayCSE 的属性部分,确保将链接器标志属性设置为 -ObjC

感觉自己像个白痴,但至少可以工作:)

【讨论】:

以上是关于WorldPayCSE 的 Xamarin IOS 绑定库的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin SQLite教程Xamarin.iOS项目添加引用

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?

使用Xamarin Effect删除Xamarin.iOS中TextEntry上的圆角

有哪些ios或android应用是用xamarin开发的

Xamarin.iOS 和 RFComm