如何在 Swift 中解析 Apple Pay PKPayment

Swift社区
iOS领域新星创作者
博客专家认证
2022-02-25 14:54:23

要解析 [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment) 并与 Wyre [CreateAppleOrder](https://docs.sendwyre.com/reference/createapplepayorder) API一起使用,我们可以声明一些可编码结构。

import PassKit
import Foundation

struct PaymentObject: Encodable {
    var billingContact: Contact?
    var shippingContact: Contact?
    var token: JSONValue
}

extension PaymentObject {
    struct Contact: Encodable {
        var addressLines: [String]?
        var country: String?
        var countryCode: String?
        var familyName: String?
        var givenname: String?
        var locality: String?
        var postalCode: String?
        var administrativeArea: String?
        var subAdministrativeArea: String?
        var subLocality: String?
    }
}

extension PaymentObject {
    init(payment: PKPayment) throws {
        let json = try JSONSerialization.jsonObject(
            with: payment.token.paymentData,
            options: .mutableContainers
        )

        self.init(
            billingContact: Contact(contact: payment.billingContact),
            shippingContact: Contact(contact: payment.shippingContact),
            token: JSONValue(any: json)
        )
    }
}

extension PaymentObject.Contact {
    init?(contact: PKContact?) {
        guard let contact = contact else { return nil }

        self.country = contact.postalAddress?.country
        self.countryCode = contact.postalAddress?.isoCountryCode
        self.postalCode = contact.postalAddress?.postalCode
        self.familyName = contact.name?.familyName
        self.givenname = contact.name?.givenName
        self.locality = contact.postalAddress?.city
        self.subLocality = contact.postalAddress?.subLocality
        self.administrativeArea = contact.postalAddress?.state
        self.subAdministrativeArea = contact.postalAddress?.subAdministrativeArea
        self.addressLines = contact.postalAddress?.street
            .split(separator: "\n")
            .map({ String($0) })
    }
}

 

...全文
194 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

24

社区成员

发帖
与我相关
我的任务
社区描述
Swift社区 是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容。 欢迎关注公众号:Swift社区,后台点击进群,加入我们
iosswift 技术论坛(原bbs) 上海·浦东新区
社区管理员
  • 网罗开发
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

做最好的 Swift 社区

我们的使命是做一个最专业最权威的 Swift 中文社区

我们的愿景是希望更多的人学习和使用Swift

我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术干货

试试用AI创作助手写篇文章吧