CCAvenue:“解密应用程序请求时出错!”

2024-03-28

我正在尝试将 CCAvenue 支付网关集成到我用 swift 4 开发的 iOS 应用程序中。 我正进入(状态

“错误!!!解密应用程序请求时出现问题”

我已检查以下网址给出的答案:https://stackoverflow.com/a/37327122/3548469 https://stackoverflow.com/a/37327122/3548469但我的案子并不顺利。

这是我从文档中尝试过的

private func gettingRsaKey(completion: @escaping (_ success: Bool, _ object: AnyObject?) -> ()){

    let serialQueue = DispatchQueue(label: "serialQueue", qos: .userInitiated)

    serialQueue.sync {
        print("access_code=\(CC_AVENUE_ACCESSKEY)")
        print("order_id=\(self.orderId)")
        self.rsaKeyDataStr = "access_code=\(CC_AVENUE_ACCESSKEY)&order_id=\(self.orderId)"
        let requestData = self.rsaKeyDataStr.data(using: String.Encoding.utf8)
        guard let urlFromString = URL(string: CC_AVENUE_RSAURL) else{
            return
        }
        var urlRequest = URLRequest(url: urlFromString)
        urlRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
        urlRequest.httpMethod = "POST"
        urlRequest.httpBody = requestData

        let session = URLSession(configuration: URLSessionConfiguration.default)
        print("session",session)


        session.dataTask(with: urlRequest as URLRequest) {
            (data, response, error) -> Void in

            if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode{

                guard let data = data else{
                    print("No value for data")
                    completion(false, "Not proper data for RSA Key" as AnyObject?)
                    return
                }
                print("data :: ",data)
                completion(true, data as AnyObject?)
            }
            else{
                completion(false, "Unable to generate RSA Key please check" as AnyObject?)
            }
            }.resume()
    }
}

 var request: NSMutableURLRequest?

private func encyptCardDetails(data: Data){

    guard let rsaKeytemp = String(bytes: data, encoding: String.Encoding.ascii) else{
        print("No value for rsaKeyTemp")
        return
    }
    rsaKey = rsaKeytemp
    rsaKey = self.rsaKey.trimmingCharacters(in: CharacterSet.newlines)
    rsaKey =  "-----BEGIN PUBLIC KEY-----\n\(self.rsaKey)\n-----END PUBLIC KEY-----\n"
    print("rsaKey :: ",rsaKey)

    let myRequestString = "amount=\(amount)&currency=\(getCurrency())"
    let ccTool = CCTool()
    var encVal = ccTool.encryptRSA(myRequestString, key: rsaKey)

    encVal = CFURLCreateStringByAddingPercentEscapes(
        nil,
        encVal! as CFString,
        nil,
        "!*'();:@&=+$,/?%#[]" as CFString,
        CFStringBuiltInEncodings.UTF8.rawValue) as String?

    let urlAsString = "https://secure.ccavenue.com/transaction/initTrans"
    let encryptedStr = String(format:"merchant_id=%@&order_id=%@&redirect_url=%@&cancel_url=%@&enc_val=%@&access_code=%@", CC_AVENUE_MERCHANTID, self.orderId, CC_AVENUE_REDIRECTURL, CC_AVENUE_REDIRECTURL, encVal!,CC_AVENUE_ACCESSKEY)
    print("access_code=\(CC_AVENUE_ACCESSKEY)")
    print("order_id=\(self.orderId)")

    let myRequestData = encryptedStr.data(using: String.Encoding.utf8)

    request  = NSMutableURLRequest(url: URL(string: urlAsString)! as URL, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 30)
    request?.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
    request?.setValue(urlAsString, forHTTPHeaderField: "Referer")
    request?.httpMethod = "POST"
    request?.httpBody = myRequestData

    print("\n\n\nwebview :: ",request?.url as Any)
    print("\n\n\nwebview :: ",request?.description as Any)
    print("\n\n\nwebview :: ",request?.httpBody?.description as Any)
    print("\n\n\nwebview :: ",request?.allHTTPHeaderFields! as Any)

    let session = URLSession(configuration: URLSessionConfiguration.default)
    print("session",session)

    session.dataTask(with: request! as URLRequest) {
        (data, response, error) -> Void in

        if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode{

            guard let data = data else{
                print("No value for data")
                return
            }
            DispatchQueue.main.async {
                self.viewWeb.loadRequest(self.request! as URLRequest)
            }
            print("data :: ",data)
        }else{
            print("into else")
            showAlertWithTitleWithMessage(message: "Unable to load webpage currently, Please try again later.")
        }
        }.resume()
}

我能够生成 RSA 密钥,但无法进一步。

Note*

我有真实账户并且正在使用访问代码 and 商户密钥对于帐户 AccessCode 和 orderId 与用于生成 RSA 密钥的相同。


嘿,我遇到了同样的问题。这是因为新的 CCAvenue SDK。 CCAvenue加载页面请求的流程分为三个步骤。

1) 我们从服务器获取 RSA 密钥。

2) 我们使用此 RSA 密钥加密订单详细信息并创建 Web 请求。

3) 在网络视图中打开请求。

当步骤 1 和步骤 3 之间没有延迟时,就会出现此问题。为了克服此问题,新 SDK 引入了一个用于创建延迟的新步骤。

1) 我们从服务器获取 RSA 密钥。

2) 我们使用此 RSA 密钥加密订单详细信息并创建 Web 请求。

3)CCAvenue在这里引入了一个新的URLRequest,只是为了在步骤1和4中进行延迟

4) 在网络视图中打开请求。

这在大多数情况下都有效,但当步骤 3 在毫秒内完成时,或者换句话说,步骤 1 和步骤 4 中没有延迟或延迟很少时,就会失败。

因此,这里的解决方法是在步骤 1 和步骤 4 中创建手动延迟。

因此将您的功能更改为以下:

private func encyptCardDetails(data: Data){

guard let rsaKeytemp = String(bytes: data, encoding: String.Encoding.ascii) else{
    print("No value for rsaKeyTemp")
    return
}
rsaKey = rsaKeytemp
rsaKey = self.rsaKey.trimmingCharacters(in: CharacterSet.newlines)
rsaKey =  "-----BEGIN PUBLIC KEY-----\n\(self.rsaKey)\n-----END PUBLIC KEY-----\n"
print("rsaKey :: ",rsaKey)

let myRequestString = "amount=\(amount)&currency=\(getCurrency())"
let ccTool = CCTool()
var encVal = ccTool.encryptRSA(myRequestString, key: rsaKey)

encVal = CFURLCreateStringByAddingPercentEscapes(
    nil,
    encVal! as CFString,
    nil,
    "!*'();:@&=+$,/?%#[]" as CFString,
    CFStringBuiltInEncodings.UTF8.rawValue) as String?

let urlAsString = "https://secure.ccavenue.com/transaction/initTrans"
let encryptedStr = String(format:"merchant_id=%@&order_id=%@&redirect_url=%@&cancel_url=%@&enc_val=%@&access_code=%@", CC_AVENUE_MERCHANTID, self.orderId, CC_AVENUE_REDIRECTURL, CC_AVENUE_REDIRECTURL, encVal!,CC_AVENUE_ACCESSKEY)
print("access_code=\(CC_AVENUE_ACCESSKEY)")
print("order_id=\(self.orderId)")

let myRequestData = encryptedStr.data(using: String.Encoding.utf8)

request  = NSMutableURLRequest(url: URL(string: urlAsString)! as URL, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringCacheData, timeoutInterval: 30)
request?.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
request?.setValue(urlAsString, forHTTPHeaderField: "Referer")
request?.httpMethod = "POST"
request?.httpBody = myRequestData

print("\n\n\nwebview :: ",request?.url as Any)
print("\n\n\nwebview :: ",request?.description as Any)
print("\n\n\nwebview :: ",request?.httpBody?.description as Any)
print("\n\n\nwebview :: ",request?.allHTTPHeaderFields! as Any)

let session = URLSession(configuration: URLSessionConfiguration.default)
print("session",session)

session.dataTask(with: request! as URLRequest) {
    (data, response, error) -> Void in

    if let response = response as? HTTPURLResponse, 200...299 ~= response.statusCode{

        guard let data = data else{
            print("No value for data")
            return
        }

        // Create the delay here
        DispatchQueue.main.asyncAfter(deadline: .now()+1.0, execute: {
            self.viewWeb.loadRequest(self.request! as URLRequest)
        }
        print("data :: ",data)
    }else{
        print("into else")
        showAlertWithTitleWithMessage(message: "Unable to load webpage currently, Please try again later.")
    }
    }.resume()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CCAvenue:“解密应用程序请求时出错!” 的相关文章

  • 使用 Core Data Swift 对 TableView 和行进行分区

    我在 sqlite 中有两个表 代码由 XCode Generation 生成 class Event NSManagedObject NSManaged var startDate NSDate NSManaged var details
  • Swift 从照片库中获取视频的 NSData

    我使用 UIImagePickerController 从我的库中选择视频 我需要提取视频文件的 NSData 我使用以下操作从我的库中选择视频 但我的数据似乎为零 但是我的 AVPlayer 播放生成的 NSURL 中的视频 所以我知道问
  • 使用 Swift 解析框架

    有人尝试过将 Parse Framework 与 swift 一起使用吗 只要添加桥接文件 您就可以使用 swift 和 Objective C 代码 这是我的查询 从 Parse 返回的 对象 数组正确地包含了我的所有数据 但该方法在将
  • 如何检测文本是否可读?

    我想知道是否有一种方法可以告诉给定的文本是人类可读的 我所说的人类可读的意思是 它有一些含义 格式就像某人写的文章 或者至少是由软件翻译器生成的供人类阅读的文章 这是背景故事 最近我正在制作一个应用程序 允许用户将短文本上传到数据库 在部署
  • 既然 Gradle 和 Maven 都弃用了 http,如何使用 Liferay Mobile SDK 6.2.18 生成 jar 库?

    在我当前的项目中 我们正在维护 开发使用客户网站 liferay 6 2 服务的移动 android iOS 应用程序 每当后端的人员生成新服务 或者只是将现有服务更新为具有新功能的新版本 时 我们需要使用 Liferay Mobile S
  • 如何在 swift 3 中的表视图单元格中实现集合视图的分页?

    在这里 我有一个布局 其中我的表视图单元格之一由集合视图组成 在这个布局中我需要实现分页 但我无法使用func collectionView collectionView UICollectionView willDisplay cell
  • UIButton 未出现在 iPhone 5S 上

    总的来说 我对 iOS 开发和开发还很陌生 我一直在开发时间 记录保存应用程序 但遇到了一个奇怪的问题 在我的一个视图控制器上 我有一个 UITableView 每个单元格都是一个按钮 可通往不同的视图控制器 在第一个单元格上 用户应该能够
  • 更新到 SDK 1.3.1 后未捕获 GMSMapView 上的拖动/平移手势

    我在通过手势识别器捕获 GMSMapView 上的拖动 平移手势时遇到了一个奇怪的问题 此问题仅在从 GMS 1 2 更新到 1 3 1 后才出现 其中 引用文档 https developers google com maps docum
  • UI键盘回避和自动布局

    鉴于 iOS 6 中对自动布局的关注以及 Apple 工程师的推荐 查看 WWDC 2012 视频 我们不再直接操作视图的框架 那么如何仅使用自动布局和 NSLayoutConstraint 来避免键盘呢 Update 这看起来是一个合理的
  • React Native 检查平板电脑或屏幕是否以英寸为单位

    我为平板电脑和移动设备建立了不同的渲染逻辑 我想知道是否有办法获取屏幕尺寸 以英寸为单位 或者甚至可能是任何模块自动检测设备是否是平板电脑 我没有直接使用尺寸 API 来获取屏幕分辨率的原因是 许多 Android 平板电脑的分辨率低于许多
  • NSAttributedString 和表情符号:位置和长度问题

    我正在使用 NSAttributedString 对来自 API 的文本的某些部分 如 Twitter 上的 mention 进行着色 API 为我提供了文本和代表文本中应着色的部分 或链接 标签等 的实体数组 但有时 颜色会因为表情符号而
  • iOS 8 UITableView 分隔符插入 0 不起作用

    我有一个应用程序 其中UITableView的分隔符插入设置为自定义值 右0 Left 0 这完美地适用于iOS 7 x 但是在iOS 8 0我看到分隔符插入设置为默认值15在右侧 即使在 xib 文件中它设置为0 它仍然显示不正确 我该如
  • 在 Objective-C iPad 开发中发布

    我正在尝试发出 POST 请求 但我似乎无法弄清楚出了什么问题 我从服务器收到响应 但我的电子邮件 密码对似乎没有正确发送 读取 由服务器 它告诉我不存在这样的帐户 这是我的代码 它包含在一个函数中 当用户按下我创建的 登录 按钮时调用该函
  • 平滑地将渐变应用于 UIImage

    我正在尝试使用 CoreGraphic 将渐变应用于 UIImage 然而 我得到的结果不是很好 我想在图像底部创建一个黑色到透明的渐变 以便为我放置一些文本创建对比度 然而 我能够实现的渐变与图像不能很好地融合 你可以清楚地看到中心的分离
  • 无法转换“String”类型的值?预期参数类型“URL”

    我正在尝试从主包中的文件加载数据 当我使用这段代码时 let path Bundle main path forResource abc ofType txt let dataTwo try Data contentsOf path err
  • 如果 UIGestureRecognizer 触发,如何取消按钮点击?

    更新 问题似乎是对另一个 GestureRecognizer 的依赖失败 请参阅此问题下面的评论和测试项目 在我的 iPhone 应用程序中 我有一个包含多个 UIButtons 作为子视图的视图 该视图还有一个 UITapGestureR
  • 如何使用 AutoLayout 使 UIView 向上滑动动画?

    this is what I like to achieve 我想执行向上滑动动画 用户可以向上滑动 UIView2 并且 UIView2 将在屏幕上停止一半 我知道如何通过 UIButton 操作以模态方式呈现 UIViewControl
  • NSFetchedResultsController 中的部分名称与托管对象值不匹配

    我正在使用 NSFetchedResultsController 用大约 1500 个实体的中等大小的核心数据存储的结果填充 UITableView 结果控制器相当标准 一些潜在错误的 热点 并不适合此设置 在与其使用的同一 主 线程上创建
  • 当 tableView 的 allowedMultipleSelectionDuringEditing 属性为 YES 时,如何实现滑动删除功能?

    在 iOS 5 中 如果我设置allowsMultipleSelectionDuringEditing在 UITableView 上设置为 YES 然后滑动删除功能不再起作用 内置的邮件应用程序支持滑动删除和编辑模式下的多项选择 我也想这样
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积

随机推荐

  • 获取用于 Azure Web PubSub Rest API 的 JWT 承载令牌进行身份验证

    我正在开发一个项目 其中我通过 Azure Web PubSub 服务构建一个发布 订阅系统 JavaScript 客户端 订阅者 通过套接字连接 能够接收 Hub 上和 Group 中发布的消息 为此 我遵循了本教程 https lear
  • 如何指定浮点数的舍入模式?

    我想将浮点数四舍五入到最接近的整数 当存在 最接近的整数 时 趋向正无穷大 use std num Float fn main assert eq 0 0 0 5 round fails 但是 文档round say 将中途情况舍入到远离
  • Windows XP 性能监视器应用程序 (perfmon) 中缺少处理器/内存计数器

    Perfmon 是一个 Windows 实用程序 可通过测量系统计数器帮助开发人员找到应用程序中的瓶颈 我正在读一本性能监控教程 http adminfoo net 2007 04 windows perfmon top ten count
  • 使用串口通过 Arduino 将多个值发送到 Raspberry

    我有一个关于 Arduino 和 Raspberry Pi 之间串行通信的问题 事实上 我想使用 Arduino 将 2 个变量发送到 Raspberry Pi 并以不同的方式使用它们 这是我的 Arduino 草图 int one 1 i
  • 格式化 HDFS 时出现 UnknownHostException

    我已经使用以下命令在伪分布式模式下在 CentOS 6 3 64 位上安装了 CDH4指示 https ccp cloudera com display CDH4DOC Installing CDH4 on a Single Linux N
  • 如何使用 Python 在网格中创建 10 个随机 x、y 坐标

    我需要创建一个 8x8 网格 并将 10 个硬币分布在网格上的随机位置 我面临的问题是 randint 函数有时会生成相同的随机坐标 因此只生成 9 或 8 个硬币并放置在网格上 我怎样才能确保这种情况不会发生 干杯 这是我到目前为止的代码
  • 在 SpannableStringBuilder 中对齐位图

    如何将位图与 SpannableString 中的文本对齐 SpannableStringBuilder ssb new SpannableStringBuilder arr messages get position String msg
  • CloudFront 分配未显示为 Route53 别名目标

    我正在尝试添加指向我的 Cloudfront 分发的路线 53 记录集 但是 当我在路由 53 中选择 创建记录集 并单击后续面板中的别名目标时 未列出云前端分布 我得到的只是 没有可用的目标 我的发行版已创建并已启用 并且正在运行 我已在
  • ChromeDriver 2.33 的 driver.manage().window().maximize() 问题

    ChromeDriver 2 33 的发行说明表示 修复了导致调整大小 定位窗口命令在 Chrome 62 上失败的错误 但是当我使用 Chrome 62 浏览器时这似乎仍然是一个问题 使用 chrome 驱动程序最大化 chrome 窗口
  • 如何在 PHP 中设置 $PATH?

    我目前正在开发自己的小项目 但有一个小问题 我想将 PATH 环境变量设置为 bin 这样当我使用exec 和类似的功能 它只会搜索该目录中的二进制文件 除非我明确告诉它 我已经尝试过了putenv 除非我启用了安全模式 否则它将无法工作
  • Elasticsearch - 如果术语出现频率越高,得分越高

    我有 2 个文档 正在搜索关键字 Twitter 假设两个文档都是带有 标签 字段的博客文章 文档 A 在 标签 字段中只有 1 个术语 它是 Twitter 文档 B 在 标签 字段中有 100 个术语 但其中 3 个是 Twitter
  • Erlang 代码的持续集成服务器

    您使用什么类型的敏捷工具进行 Erlang 开发 什么持续集成 http en wikipedia org wiki Continuous integration您使用 CI 服务器来构建 Erlang 代码吗 我得到的唯一参考来自 Quo
  • Maven 中央存储库的官方镜像有哪些?

    有谁知道是否有已知 和工作的 Maven 中央存储库 http repo1 maven org maven2 镜像的列表 如果没有 当中央存储库关闭时您使用什么镜像 这是取自 rvxnet 的答案 以及为什么仅链接答案不可取的示例 我从20
  • Tomcat 的接受计数

    我对Tomcat有以下问题acceptCount 它说 当所有传入连接请求的最大队列长度 可能的请求处理线程正在使用中 收到的任何请求 当队列已满时将被拒绝 默认值为 10 我不确定这是如何运作的 我的意思是我知道有一个单独的 TCP 队列
  • QScreenRayCaster 未找到实体。我做错了什么?

    Qt3D 中新 QScreenRayCaster 的描述看起来正是我想要使用的 但我无法让它为我工作 我想在初始化中我需要做一些事情 但我在网上找不到任何示例来为我指明正确的方向 我编写了一个非常简单的程序来测试该功能 它在窗口的中心绘制一
  • Spring Security 将 URL 参数传递给身份验证提供程序

    有没有办法将 URL 参数传递给 Spring Security 3 中的身份验证提供程序 我们的登录页面需要接收电子邮件令牌作为参数 身份验证系统在设置用户状态时需要了解该参数 具体来说 它将允许具有正确令牌的用户登录 否则该用户将无法登
  • Pandas 根据拆分另一列添加新列

    我有一个如下所示的 pandas 数据框 A B US 65 AMAZON 2016 US 65 EBAY 2016 我的目标是看起来像这样 A B country code com US 65 AMAZON 2016 US 65 AMAZ
  • PE 文件中的 OSMajor 和 OSMinor 版本号

    最近我偶然发现了一个奇怪的现象 我正在为 PE 文件构建一个转储程序 很好地阅读了节标题和 可选 节标题 现在 当我到达 OS Major 和 OS Minor 字段时 我注意到一个奇怪的值 WORD OS VERSION major 0x
  • 我应该在 URL 中使用重音字符吗?

    当用英语以外的语言创建网页内容时 搜索引擎优化和用户友好 URL 的问题就会出现 我想知道在 URL 中使用去重音字母是否是最佳实践 冒着某些单词在有或没有某些重音的情况下具有完全不同含义的风险 或者最好坚持使用非英语字符在不太高级的环境
  • CCAvenue:“解密应用程序请求时出错!”

    我正在尝试将 CCAvenue 支付网关集成到我用 swift 4 开发的 iOS 应用程序中 我正进入 状态 错误 解密应用程序请求时出现问题 我已检查以下网址给出的答案 https stackoverflow com a 3732712