Комплект интеграции CCAvenue Gateway для приложения ios

Привет,
Я разработал приложение, которое нуждается в платежном шлюзе. Я уже работал над "Paypal". Это было успешно, и теперь мне нужно интегрировать другой платежный шлюз, который является "ccavenue". Может ли кто-нибудь помочь мне в интеграции этого?
Спасибо.

Ответ 1

Поскольку CCAvenue показывает параметры на стороне сервера, нам нужно подключиться к веб-просмотру и загрузить шлюз ccavenue, который совместим с экранами iphone. Здесь, в нашем приложении, мы должны делать небольшие вещи следующим образом

Сначала создайте html файл и параметры, связанные с вашим шлюзом ccavenue

<html>

<body>

    <form name='form2' method='post' action='UR URL HERE'>

        <input type="text" name='Merchant_Id'><br>
        <input type="text" name='Amount'><br>
        <input type="text" name='Order_Id'><br>
        <input type="text" name='Redirect_Url'><br>
        <input type="text" name='Checksum'><br>
        <input type="text" name='billing_cust_name'><br>
        <input type="text" name='billing_cust_address'><br>
        <input type="text" name='billing_cust_address'><br>
        <input type="text" name='billing_cust_tel'><br>
        <input type="text" name='billing_cust_email'><br>
        <input type="text" name='delivery_cust_name'><br>
        <input type="text" name='delivery_cust_address'><br>
        <input type="text" name='delivery_cust_tel'><br>
        <input type="text" name='delivery_cust_notes'><br>
        <input type="text" name='Merchant_Param'><br>

        </form>

</body>

После этого загрузите веб-представление на экране

  NSURL *url = [NSURL URLWithString: @"https://www.ccavenue.com/shopzone/cc_details.jsp"];

webView.delegate = self;
webView.scalesPageToFit = YES;

NSString *strUsername = [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"];

   NSString *body = [NSString stringWithFormat: @"Merchant_Id=%@&Amount=%@&Order_Id=%@&Redirect_Url=%@&Checksum=%@&billing_cust_name=%@&billing_cust_address=%@&billing_cust_country=%@&billing_cust_tel=%@&billing_cust_email=%@&delivery_cust_name=%@&delivery_cust_address=%@&delivery_cust_tel=%@&delivery_cust_notes=%@&Merchant_Param=%@",@"XXXXX",@"10",@"123456",@"http://us2guntur.com/us2guntur/CCAvenueredirecturl.jsp",@"1234567890",@"Test",@"Hyderabad",@"India",@"1357896437",@"Test1000",@"Guntur",@"234567896",@"",@""];

NSLog(@"%@",body);

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL: url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]];
[webView loadRequest: request];

Ответ 2

Я искал SDK, поскольку они упомянули здесь, что доступны IOS/Android/Windows SDK. Но ничего не нашел. Наконец, я составил письмо на CCAvenue tech. поддержки.

Затем позвонил с ними, и вот что они сказали:

  • Нам нужна фактическая учетная запись продавца, чтобы получить учетные данные для загрузки SDK.
  • Они не предоставляют среду тестирования тестовой среды.
  • Процесс заключается в проверке учетной записи продавца на веб-сайте продавца и других введенных данных.
  • Как только они будут выполнены с проверкой, они отправят электронное письмо активации на зарегистрированный электронный адрес продавца.
  • Когда торговец активирует свою учетную запись, он получит учетные данные для входа в SDK.
  • Существует два типа подписки: бесплатный и привилегированный. (Обратитесь на свой веб-сайт, чтобы узнать больше)
  • С SDK, если у торговца есть бесплатный план, поддерживаются только валюты INR и USD. Если продавец хочет добавить поддержку для любой другой валюты, тогда ему придется запросить CCAvenue для этого. Команда CCAvenue проверит с заинтересованными банками для нее, если банки разрешают транзакции, тогда новая валюта может быть активирована путем оплаты Rs. 5000 для каждого.
  • Если у торговца есть привилегированный план, тогда наряду с INR, продавец может выбрать любые 4 валюты из поддерживаемых 27 валют. Если продавец хочет больше, то он может купить валюту, заплатив Rs. 5000 для каждого.

Ответ 3


Интеграция шлюза CCAvenue Payment Gateway в Swift 3


Сначала проверьте эту ссылку " https://www.ccavenue.com/inapp_payments.jsp" для интеграции, что обеспечивает CCAvenue.

Пожалуйста, следуйте приведенным ниже инструкциям по внедрению Платёжного шлюза в своем мобильном приложении методом Non Seamless:

1. Пожалуйста, убедитесь, что ваш общедоступный/исходящий IP-адрес включен в конец CCAvenue.

2. Поместите файлы GetRSA и ccavResponseHandler на свой сервер.

3. В своем приложении укажите путь к файлу GetRSA, хранящемуся на вашем сервере

4. Вызовите GetRSA из вашего приложения, которое хранится на вашем сервере для получения открытого ключа RSA.

5. Использование купленного публичного ключа будет шифровать параметры (сумма, валюта). Чтобы зашифровать ключ RSA, выполните следующие шаги (от шага 1 до этапа 8).

Шаг 1: вам необходимо загрузить CCAvenue SDK с веб-сайта CCAvenue, и для загрузки вам необходимо войти в систему, используя учетные данные торгового аккаунта.

Шаг 2: после входа в систему, чтобы загрузить SDK, перейдите в раздел Ресурсы- > Мобильный интеграционный комплект. См. Следующий снимок экрана.

введите описание изображения здесь

Шаг 3. Чтобы загрузить, нажмите "Загрузить комплекты интеграции", как показано на следующем снимке экрана. Перед загрузкой выберите "Бесшовные" или "Не-бесшовные". (Проверьте сведения об этом в документе, предоставленном CCAvenue)

Бесшовные: если торговый объект настроен как бесшовный, то все данные фактуры/доставки, включая варианты оплаты, принимаются на странице продавца.

Непрозрачный. Если продавец настроен как не-бесшовный, то данные о платежах/доставке, включая параметры оплаты, принимаются на странице мобильной связи CCAvenue.

введите описание изображения здесь

Шаг 4: После загрузки SDK-набора вам нужно скопировать папку "OpenSSL" в ваш проект, иначе вы также сможете установить "openssl" с помощью модулей.

Шаг 5: вы найдете 2 папки и lib под папкой Openssl/openssl-1.0.1i-iOS. Также в разделе "Настройки сборки" перейдите к "Пути поиска" → "Библиотека", "Пути поиска", удалите все, что предоставляется. Пользователи /test/desktop/.... и перетаскивание включают/и lib/эту две папки. Также вы должны сделать то же самое для Paths- > Path Search Paths.

Stop6: скопируйте эти два файла (файлы, доступные в вашем загруженном SDK `s), вам проект" CCTOOL и BASE64.

Шаг7: Использование импорта заголовка моста "CCTool.h".

Шаг 8. Наконец, зашифруйте ключ RSA с помощью метода, который присутствует в файле CCTool.

6.. После шифрования параметров вы отправляете зашифрованное значение вместе с другими данными о доставке биллинга (если есть) на сервер CCAvenue через сообщение браузера (встроенное webview). (Если вы не смогли преобразовать весь код из objective-c в swift, используйте objective-c файл CCWEBVIEWCONTROLER)

7. Пользователь будет перенаправлен на страницу доставки биллинга CCAvenue, где он заполнит необходимые данные, включая опцию оплаты.

8. После заполнения необходимых деталей он будет перенаправлен на банковскую страницу, где он разрешит себя.

9. После авторизации он будет перенаправлен на CCAvenue и ответ, то есть успех или сбой будут отправлены на страницу продавца, которая была настроена как возвращаемый url во время регистрации.

10. Затем вы должны расшифровать ответ, который затем может быть проанализирован для получения статуса транзакции.

Примечание:

  • Код доступа и идентификатор заказа должны быть такими же, как и во время вызова RSA.

  • Идентификатор заказа всегда должен быть уникальным

  • Транзакция должна попасть на сервер CCAvenue в течение 60 секунд после получения ключа RSA.

  • Рабочий ключ, отправленный в файле ccavResponseHandler, должен соответствовать порядку доступа к CCAvenue.

Ответ 4

Страница интеграции CCAvenue показывает только варианты на стороне сервера.

Итак, вам придется реализовать это самостоятельно. Вы можете интегрировать платежный шлюз CCAvenue на свой сервер и открыть страницу платежа в веб-представлении на устройстве. Поскольку реализация на стороне сервера находится под вашим контролем, вы можете отправить данные подтверждения платежа через файлы cookie способами, которые это делается в OAuth.

Ответ 5

Я следил за всеми шагами Сагара Сукоде и интегрировал CCAvenue SUCCESSFULLY.

Если кому-то нужен CCWEBVIEWCONTROLER в swift 2.3: -

В ViewDidLoad:

    let rsaKey = getRsaKeyForCCAvenue()

    //Encrypting Card Details
    let myRequestString = "amount=\(AMOUNT)&currency=\(CURRENCY)"

    let ccTool = CCTool()

    var encVal = ccTool .encryptRSA(myRequestString, key: rsaKey)

    let charset = NSCharacterSet(charactersInString: "!*'();:@&=+$,/?%#[]").invertedSet
    encVal = encVal.stringByAddingPercentEncodingWithAllowedCharacters(charset)

    //Preparing for a webview call
    let urlAsString = TRANS_URL

    let encryptedStr = "\(KEY_MERCHANT_ID)=\(MERCHANT_ID)&\(KEY_ORDER_ID)=\(ORDER_ID)&\(KEY_REDIRECT_URL)=\(REDIRECT_URL)&\(KEY_CANCEL_URL)=\(CANCEL_URL)&\(KEY_ENC_VAL)=\(encVal)&\(KEY_CC_ACCESS_CODE)=\(CC_ACCESS_CODE)&\(KEY_BILLING_NAME)=""&\(KEY_BILLING_ADDRESS)=""&\(KEY_BILLING_ZIP)=""&\(KEY_BILLING_CITY)=""&\(KEY_BILLING_STATE)=""&\(KEY_BILLING_COUNTRY)=""&\(KEY_BILLING_TEL)=""&\(KEY_BILLING_EMAIL)="""

    let myRequestData = encryptedStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    let request = NSMutableURLRequest(URL: NSURL(string: urlAsString)!)

    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")

    request.setValue("https://secure.ccavenue.com/", forHTTPHeaderField: "Referer")

    request.HTTPMethod = "POST"

    request.HTTPBody = myRequestData

    ccWebView .loadRequest(request)

Метод Чтобы получить rsaKey:

    func getRsaKeyForCCAvenue() -> String {

    //Getting RSA Key
    let rsaKeyDataStr = "\(KEY_CC_ACCESS_CODE)=\(CC_ACCESS_CODE)&\(KEY_ORDER_ID)=\(ORDER_ID)"

    let requestData = rsaKeyDataStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

    let rsaRequest = NSMutableURLRequest(URL: NSURL(string: RSA_KEY_URL)!)

    rsaRequest .setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")

    rsaRequest.HTTPMethod = "POST"

    rsaRequest.HTTPBody = requestData

    let rsaKeyData: NSData? = try? NSURLConnection.sendSynchronousRequest(rsaRequest, returningResponse: nil)

    var rsaKey =  NSString(data: rsaKeyData!, encoding: NSASCIIStringEncoding)

    let strNewRSA = rsaKey as! String

    let range: Range<String.Index> = strNewRSA.rangeOfString("<")!
    let index: Int = strNewRSA.startIndex.distanceTo(range.startIndex)

    rsaKey = strNewRSA.substringToIndex(range.startIndex)

    rsaKey = rsaKey?.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())

    rsaKey = "-----BEGIN PUBLIC KEY-----\n\(rsaKey!)\n-----END PUBLIC KEY-----\n"

    return rsaKey as! String
}

Метод представления в виде веб-представления для чтения ответа:

    func webViewDidFinishLoad(webView: UIWebView) {

    let webString = webView.request?.URL?.absoluteString
    if (webString! as NSString).containsString("PaymentCCAvenue/ReturnAPI") {

        let html = webView .stringByEvaluatingJavaScriptFromString("document.documentElement.outerHTML")          
        if (html! as NSString).containsString("Success") {
        }
        else if (html! as NSString).containsString("Failure") {  
        }
        else {
        }
    }

}

Просто проверьте строки ответов от разработчиков, чтобы добавить условия в webViewDidFinishLoad.

Ответ 6

Для тех, кому нужен ответ для Swift 3.2, приведен код. Потребовал мне время, чтобы преобразовать его. Но здесь вы идете. До этого позвольте мне объяснить, если все еще неясно.

(1) вы поместите файл GetRSA на сервер, а затем скопируйте и вставьте эту ссылку в свое приложение как "rsaKeyUrl".

(2) Функция getRsaKeyForCCAvenue() выполняет вызов этого файла, размещенного на сервере, IP-адрес которого должен быть включен в белый список заранее.

(3) Файл "getRSA" отправляет запрос в CCavenue по уже существующей ссылке (это важно, поскольку CCAvenue принимает запросы только из белого списка, и это позволяет отправлять все запросы только с одного IP-адреса.

(4) CCAvenue проверяет детали и обрабатывает запрос и отправляет ответ и перенаправляет на страницу оплаты, если все проверяет.

(5) URL-адрес перенаправления должен быть ссылкой файла "ccavResponseHandler", который имеет ваш код доступа и переводит ответ.

КОД В SWIFT 3.2

1) Получить ключ RSA

func getRsaKeyForCCAvenue() -> String {

    //Getting RSA Key
    let rsaKeyDataStr = "access_code=\(accessCode)&order_id=\(orderId)"

    let requestData = rsaKeyDataStr.data(using: String.Encoding.utf8, allowLossyConversion: false)

    var request = URLRequest(url: URL(string: rsaKeyUrl)!)


    let rsaRequest =  NSMutableURLRequest(url: URL(string: rsaKeyUrl)!)

    rsaRequest .setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")

    rsaRequest.httpMethod = "POST"

    rsaRequest.httpBody = requestData

    let rsaKeyData: NSData? = try? NSURLConnection.sendSynchronousRequest(rsaRequest as URLRequest, returning: nil) as NSData

    var rsaKey =  NSString(data: rsaKeyData! as Data, encoding: String.Encoding.ascii.rawValue)
    rsaKey = rsaKey?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) as NSString?


    //   rsaKey = rsaKey?.trimmingCharacters(in: NSCharacterSet.newlines) as? NSString

    rsaKey = "-----BEGIN PUBLIC KEY-----\n\(rsaKey!)\n-----END PUBLIC KEY-----\n" as NSString
    print(rsaKey)
    return rsaKey! as String
}

2) Код после super.viewDidLoad()

    let rsaKey = getRsaKeyForCCAvenue()

    //Encrypting Card Details
    let myRequestString = "amount=\(VQ_MOUNT)&currency=\(currency)"

    let ccTool = CCTool()

    var encVal :NSString = ccTool.encryptRSA(myRequestString, key: (rsaKey as NSString) as String!) as NSString

    let charset : String = "!*'();:@&=+$,/?%#[]"

    encVal = CFURLCreateStringByAddingPercentEscapes(nil, encVal as CFString, nil, (charset as CFString), CFStringBuiltInEncodings.UTF8.rawValue) as String as NSString


    //Preparing for a webview call
    let urlAsString = TRANS_URL

    var encryptedStr = "merchant_id=\(merchantId)&order_id=\(orderId)&redirect_url=\(redirectUrl)&cancel_url=\(cancelUrl)&enc_val=\(encVal)&access_code=\(accessCode)"

    let myRequestData = NSData.init(bytes: encryptedStr.cString(using: .utf8), length: encryptedStr.characters.count) as Data

    let request = NSMutableURLRequest(url: URL(string: urlAsString)!)


    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")

    request.setValue(TRANS_URL, forHTTPHeaderField: "Referer")

    request.httpMethod = "POST"

    request.httpBody = myRequestData

    viewWeb.loadRequest(request as URLRequest)

3) Наконец, реализация webViewDidFinishLoad()

    func webViewDidFinishLoad(_ webView: UIWebView) {
    let webString = webView.request?.url?.absoluteString
    if ((webString as NSString?)?.range(of: "/ccavResponseHandler.jsp"))?.location != NSNotFound {
        let html: String? = webView.stringByEvaluatingJavaScript(from: "document.documentElement.outerHTML")
        var transStatus = "Not Known"
        if (((html as NSString?)?.range(of: "Aborted"))?.location != NSNotFound) || (((html as NSString?)?.range(of: "Cancel"))?.location != NSNotFound) {
            transStatus = "Transaction Cancelled"
        }
        else if (((html as NSString?)?.range(of: "Success"))?.location != NSNotFound) {
            transStatus = "Transaction Successful"
        }
        else if (((html as NSString?)?.range(of: "Fail"))?.location != NSNotFound) {
            transStatus = "Transaction Failed"
        }
        var controller = storyboard?.instantiateViewController(withIdentifier: "CCResultViewController") as? CCResultViewController
        controller?.transStatus = transStatus
        controller?.modalTransitionStyle = .crossDissolve
        present(controller ?? UIViewController(), animated: true)
    }else {
        print("Something went wrong...")
    }
}