2013-10-31 2 views
1

Ruby on Rails/EmberJS 응용 프로그램에서 SagePay의 양식 통합 방법을 사용하고 있습니다. 레일스의 복잡한 지불 구조를 다 처리하고 있습니다.Ruby on Rails와 SagePay 양식 통합 구현

즉, SagePay에는 암호화 된 암호화 된 'crypt'문자열이 필요합니다.이 문자열에는 사용자의 청구서 수신 주소, 금액, 후불 리다이렉트 및 기타 거래 데이터가 포함됩니다.

SagePay는 테스트 환경에서 암호화 암호을 제공합니다. 양식 통합 안내서는 crypt를 문자열로 작성한 다음 AES-256과 암호화 암호를 사용하여 암호화 한 다음 Base64가 Sage 테스트 지불 서버로 POSTing 용 문자열을 인코딩하도록합니다. 여기

내가 (암호기 보석 사용)을 구현 한 방법은 다음과 같습니다

string 트랜잭션 데이터가 포함 된 인코딩되지 않은, 암호화되지 않은 크립트 문자열이
def encryptandencode(string) 
    salt = Time.now.to_i.to_s 
    secret_key = 'test-server-secret-key-from-sage' 
    iv = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv 
    encrypted_value = Encryptor.encrypt(string, :key => secret_key, :iv => iv, :salt => salt) 

    encoded = Base64.encode64(encrypted_value).encode('utf-8') 
    return encoded 
end 

.

문제

암호 화기는 주어진 비밀 키를 사용 거부합니다. 열쇠가 너무 짧다고합니다.

무엇이 여기에 있습니까?

답변

1

ASP.NET에서 동일한 작업을 수행하기 위해 애 쓰고 있습니다. 나는 그들이 웹 사이트에서 제공하는 예제 '통합 키트'가 왜 그렇게 복잡한 지 모르겠습니다. 그들은 우아한 코드 조각을 그 자체로 나타낼 수 있지만 함수 호출 함수가 web.config 파일의 설정을 사용하여 메서드를 호출하도록함으로써 상황이 어떻게 작동하는지 알기 어렵습니다. 이 API를 처음 접하는 개발자의 경우 한 곳에서 모든 코드를 사용하는 간단한 예가 도움이됩니다.

어쨌든 여전히 작동하지는 않지만 내가 가지고있는 문제를 극복 할 수는 있지만 ASP.NET에서 작업 한 이후로는 내 방법이 도움이되지 않을 수도 있습니다. 난 기능

SagePay.IntegrationKit.Cryptography.EncryptAndEncode(<name=value collection>, <Encryption Password>)

지금 Sagepay를에 보낼 유효한 암호화 된 문자열을 얻을 것으로 보인다에게 전화를 할 수 있었다 후 내 프로젝트에 SagePay.IntegrationKit.DotNet.dll에 대한 참조를 추가 내 문제는 웹 사이트에 암호화가 잘못되었다고되어있어 아직 진행중인 작업입니다.

+0

나는 동일한 방법을 사용했는데, 암호화 방법이 V3.00에 적합하지 않습니다. 결국, 나는 클라이언트가 스트라이프로 전환하도록 설득했다. 자신의 문서는 포괄적이고 쉽게 (많은 코드 예제) 따라 할 수있을뿐만 아니라 자연스러운 예측 및 개요 기능을 제공합니다. 수수료가 0.7 % 증가했지만 상인 수수료는 없었습니다. 사방 당선자. – sjmog

0

테스트 및 라이브 암호화 암호가 서로 다른 경우에도 암호화 암호의 길이가 16 자인지 확인하십시오.

세이지 급여 지원

+0

개발자 문서는 끔찍한 ... 2 년 후 그들은 더 나아지지 않습니다. – simonmorley

1

나도이 고민과 같은 오류 메시지를 수신했다.

필자는 마침내 Encryptor gem에서 각 줄을 직접 시도해보고 더 이상 그 오류 메시지를받지 않기로 결정했습니다. 그러므로 나는 내 보석에서 그 보석을 버렸다.BTW

, 몇 귀하의 예제에서 잘못된 일이 : 128 비트 암호화가 아닌 기본을 사용할 필요가

  • 을 256 : :algorithm => 'aes-128-cbc' 초기화 벡터는 키와 동일 할 필요가
  • : :iv => secret_key
  • 당신은
  • 결과 16 진수가되지
Base64로로 인코딩 할 필요가 염을 사용해서는 안 0

result = encrypted_value.split('').map { |c| "%02X" % c.ord }.join