2016-09-17 3 views
0

Я не могу получить подтверждение валидации торгового агента с Ruby. Пробовал HTTParty и RestClient, и я получаю:Apple Pay on the web merchant session in ruby ​​

OpenSSL :: SSL :: SSLError (SSL_connect возвращаемые = 1 ERRNO = 0 состояние = SSLv3 читать закончил: сертификат SSLv3 предупреждения истек):

Я попробовал то же самое сертификат с этим примером сервера узлов, https://github.com/tomdale/apple-pay-merchant-session-server, и он работал нормально, поэтому это должно быть что-то в моем ruby-коде.

Неужели кому-то удалось получить эту работу?

ответ

4

У меня была такая же проблема. С помощью примера, на который вы ссылались, и осуществления на https://github.com/norfolkmustard/ApplePayJS (см. Также обсуждение реализации на https://forums.developer.apple.com/thread/51580), я смог заставить его работать.

Ключ для меня проходил в правильном сертификата (сертификат Apple, Pay Merchant Идентичность) так же, как Apple, обеспечивает его и получить ключ CERT, как так:

После того, как у Вас есть свой идентификатор продавца (сеанс) сертификат от Apple, импортируйте его в keychain.app на свой Mac, дважды щелкнув по нему, щелкните правой кнопкой мыши по сертификату в цепочке ключей и экспортируйте объединенный закрытый ключ и сертификат в виде файла .p12, затем в терминал: -

openssl pkcs12 -in your_merchant_identity_cert_name.p12 -out ApplePay.key.pem -nocerts -nodes 

После добавления приложения ле Pay Merchant Identification сертификат от компании Apple и содержимое файла ApplePay.key.pem к переменной окружения я был в состоянии построить следующий запрос с помощью Net :: HTTP класс Руби ...

class YourControllerName < ApplicationController 

    def apple_pay_validation 
    respond_to do |format| 
     format.json { render json: start_apple_session(params[:url]) } if params[:url].include?('apple.com') 
    end 
    end 

    private 

    def start_apple_session(url) 
    uri = URI.parse(url) # the url from event.validationURL 
    data = {'merchantIdentifier' => "merchant.com.your_site_name", 'domainName' => "your_doamin", 'displayName' => "your_company_name"} 
    pem = File.read('path/to/your/merchant_id.cer') 
    key = ENV['APPLE_PAY_MERCHANT_ID_ KEY'] 
    passphrase = 'passphrase set up when exporting certificate in keychain' # Should be an environment variable 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    http.ssl_version = :TLSv1_2 
    http.ciphers = ['ECDHE-RSA-AES128-GCM-SHA256'] 
    http.cert = OpenSSL::X509::Certificate.new(pem) 
    http.key = OpenSSL::PKey::RSA.new(key, passphrase) 
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
    request = Net::HTTP::Post.new(uri.request_uri, 'Content-Type' => 'application/json') 
    request.body = data.to_json 
    response = http.request(request) 
    response.body 
    end 

end 

Это была вызвана моей performValidation функции (с изменениями от ApplePayJS репо, перечисленной выше), который выглядит следующим образом ..

performValidation = (valURL) -> 
    new Promise((resolve, reject) -> 
    xhr = new XMLHttpRequest 
    xhr.open 'GET', '/your_controller_name/apple_pay_validation?url=' + valURL 
    xhr.onerror = reject 
    xhr.onload = -> 
     data = JSON.parse(@responseText) 
     resolve data 
    xhr.send() 
) 

Надеется, что помогает сохранить кому-то какое-то время и седые волосы!

 Смежные вопросы

  • Нет связанных вопросов^_^