如何使用Token SDK安全地确认交易:iOS教程

B站影视 2025-01-20 15:22 3

摘要:public func registerForFirebaseNotifications(application: UIApplication) { if #available(iOS 10.0, *) { // 对于iOS 10及以上,显示通知(通过APNS

在本教程中,我们将介绍如何通过推送通知系统实现交易验证的过程。推送消息是Token SDK中多个重要功能的一部分,主要包括:

Token恢复和自动恢复

使用MAC验证交易(确认/拒绝支付)

使用MAC验证同意(确认/拒绝同意)

移动Token登录

第一步:启用推送通知

当您的应用使用推送功能时,首先需要请求用户许可接收推送通知。

public func registerForFirebaseNotifications(application: UIApplication) { if #available(iOS 10.0, *) { // 对于iOS 10及以上,显示通知(通过APNS发送) UNUserNotificationCenter.current.delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current.requestAuthorization(options: authOptions, completionHandler: { _, _ in }) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerUserNotificationSettings(settings) }}注意! 如果未请求权限或用户未授权接收通知,则用户将无法接收到推送通知。建议在某个引导过程后再请求权限,让用户了解推送通知的用途。

Firebase实例Token

默认的推送服务是Firebase,您需要将Firebase添加为项目的依赖项。详细说明可以参考Firebase官网设置。

注册Token进行推送

要获取最新的Firebase Token,请使用Firebase的Messaging模块,并将接收到的firebaseRegistrationId与 Token进行注册。

Messaging.messaging.token { (result, error) in if let error = error { debugPrint("Error fetching remote instance ID: \(error)") } else if let firebaseRegistrationId = result { do { try assecoToken.registerTokenForPushWithId(serverInfo: serverInfo!, registrationId: firebaseRegistrationId, success: { //继续处理 }, failure: { (error) in debugPrint(error) }) } catch let error { debugPrint(error) } }}注意! Firebase注册Token可能会定期刷新。为了确保能够及时更新,您需要实现MessagingDelegate协议,接收Token更新通知。extension AppDelegate: MessagingDelegate { public func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { do { guard let fcmToken = fcmToken else { return } try TokenFacade.registerTokenForPushWithAuthenticationTag(tokenName: tokenName, registrationId: fcmToken, serverInfo: serverInfo, keychainAccessGroup: keychainAccessGroup) { } failure: { error in debugPrint(error) } } catch { // NO-OP } }}接收到推送消息后,首先需要确定消息类型。在交易确认或拒绝时,消息类型为TokenNotificationType.NOTIFICATION_TYPE_MAC。public func checkTransaction(userInfo: [AnyHashable : Any]) { let messageType = userInfo["jwtType"] as? String guard let payload = userInfo["jsonWebToken"] as? String else { return } switch messageType { case TokenNotificationType.NOTIFICATION_TYPE_MAC: case TokenNotificationType.NOTIFICATION_TYPE_RECOVERY_START: case TokenNotificationType.NOTIFICATION_TYPE_RECOVERY_CHALLENGE: case TokenNotificationType.NOTIFICATION_TYPE_MTM_CONSENT: case TokenNotificationType.NOTIFICATION_TYPE_LOGIN_BY_TOKEN: default: break }}MACNotificationPayload要获取这些值,可以使用processMACNotification方法:let macNotificationPayload = try TokenFacade.processMACNotification(encodedPayload: encodedPayload, publicKeyModulus: pushModulusKey, publicKeyExponent: serverInfo.publicKeyExponent)

接收到交易后,您需要处理并确认或拒绝交易。如果未采取任何行动,交易将保留在通知箱中,直到处理完成。

以下是确认支付的流程:

try tokenFacade.confirmPayment( serverInfo: config.serverInfo!, applicationName: CharArrayExt.valueOf(string: “MAC_APP”), encodedPayload: encodedPayload, publicKeyModulus: pushModulusKey, publicKeyExponent: config.serverInfo!.publicKeyExponent!, success: { // 处理成功 }, failure: { error in // 处理失败 })注意! 在确认交易时,确保正确使用publicKeyModulus。在推送通知的情况下,通常使用pushKeyModulus进行确认。如果使用二维码确认交易,则使用qrPushModulus。

拒绝支付

当收到推送并解析有效载荷后,应该将交易ID传递给TokenFacade.rejectPayment(transactionId)方法。try tokenFacade.rejectPayment( serverInfo: config.serverInfo!, transactionId: transactionId, success: { // 处理成功 }, failure: { (_) in // 处理失败 })

确认或拒绝同意

同意推送消息的处理与交易通知类似,唯一的区别在于jwtType为TokenNotificationType.NOTIFICATION_TYPE_CONSENT。有效载荷的处理方法是通过调用TokenFacade.processMACNotification来进行。

确认或拒绝同意的方法如下:

TokenFacade.confirmConsent(serverInfo, applicationName, encodedPayload, publicKeyModulus, publicKeyExponent)TokenFacade.rejectConsent(serverInfo, transactionId)通过本教程,您可以了解到如何使用Token SDK进行交易确认的详细流程。从启用推送通知到接收并处理推送消息,再到最终确认或拒绝交易,每一步都需要仔细处理相关的Token信息和安全验证。在实现过程中,确保正确配置并使用,以确保交易的安全性和可靠性。

来源:刺猬科技圈

相关推荐