· 7 years ago · May 26, 2018, 07:14 PM
1## gate_controller_test.rb
2
3require File.dirname(__FILE__) + "/../test_helper"
4require 'gate_controller'
5class GateController; def rescue_action(e) raise e end; end
6class GateControllerTest < ActionController::TestCase
7def setup
8 @controller = GateController.new
9 @request = ActionController::TestRequest.new
10 @response = ActionController::TestResponse.new
11end
12
13
14 def simple_test
15 get :process_ifree_request
16 assert_response :success
17 end
18 # Replace this with your real tests.
19 def test_truth
20 assert true
21 end
22end
23
24## gate_controller.rb
25class GateController < ApplicationController
26 def process_ifree_request
27 require 'preference'
28 evt_id, phone, abonent_id, country, service_number, operator, operator_id, sms_text, now, md5key, test, retry_num, debug = String.new,
29 String.new,String.new,String.new,String.new,String.new,String.new,String.new,String.new,String.new,String.new,String.new,String.new,
30 String.new
31 #параметры Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ ÑмÑ
32 evt_id ||= params[:evtId] # Уникальный ID SMS-запроÑа
33 phone ||= params[:phone] # MSISDN абонента
34 abonent_id ||= params[:abonentId] # Уникальный ID абонента в ÑиÑтеме I-Free Partners
35 country ||= params[:country] # Страна, к которой принадлежит MSISDN. Возможные значениÑ: ru, ua, kz,... (ÑоглаÑно ISO-Ñтандарту)
36 service_number ||= params[:service_Number] # СервиÑный номер, на который был произведен запроÑ
37 operator ||= params[:operator] # Оператор Ñотовой ÑвÑзи, к которому принадлежит абонент
38 operator_id ||= params[:operatorId] # ID оператора Ñотовой ÑвÑзи
39 sms_text ||= params[:smsText] # Формат Base64. Кодировка UTF-8. При передаче по http протоколу данное значение передаетÑÑ ÐºÐ°Ðº UrlEncoded.
40 # параметры обеÑпечивающие безопаÑноÑть
41 now ||= params[:now] #Текущее значение времени Формат yyyyMMddHHmmss в UTC на Ñервере I-Free Partners (Мировое времÑ).
42 md5key ||= params[:md5key] # Контрольное значение. md5key = md5(serviceNumber + smsText + country + abonentId + SecretKey + now [+retry] [+ debug [+ DebugSecretKey]])
43 # ÑиÑтемные параметры
44 test ||= params[:test] # Флаг теÑтового запроÑа
45 retry_num ||= params[:retry] #Ðомер повторного вызова
46 debug ||= params[:debug] # debug=1 Флаг отладочного запроÑа
47 # внутренние наÑтройки ÑервиÑа
48 secret_key = get_setting("Secret Key") # ключ ÑервиÑа указанный в наÑтройках
49
50 is_hash_valid = validate_hash(md5key, (service_number + sms_text + country + abonent_id+secret_key + now + retry_num + debug))
51 #render :text => is_hash_valid
52 end
53 private
54 def validate_hash(hash, string_to_check)
55 require 'digest/md5'
56 if Digest::MD5.hexdigest(string_to_check) == hash
57 return true
58 else
59 return false
60 end
61 end
62end
63
64## preference.rb
65def get_setting(setting)
66 return Preference.get_setting(setting)
67end
68class Preference < ActiveRecord::Base
69 def Preference.get_setting(setting)
70 result = Preference.find_by_setting( setting )
71 unless result.nil?
72 return result["value"]
73 end
74 return nil
75 end
76end