Files
gitlink-forgeplus/app/services/sms/ucloud_service.rb
T
2022-11-24 11:09:58 +08:00

113 lines
3.9 KiB
Ruby

class Sms::UcloudService < ApplicationService
attr_reader :phone, :code, :send_type
def initialize(phone, code, send_type)
@phone = phone
@code = code
@send_type = send_type
end
def call
public_key = EduSetting.get("ucloud_public_key") || "4Z7QYDY0SumplMtmNmd9PERgPPFiMpR1R"
private_key = EduSetting.get("ucloud_private_key") || "7wxMoGoaQ1DtcQjDxgJrOGOXnIiZq4amEWvmi7eBtm2d"
project_id = "org-3ozbh2"
sign_params = {
"Action" => "SendUSMSMessage",
"ProjectId" => project_id,
"TemplateId" => get_template_id(@send_type),
"PublicKey" => public_key,
"PhoneNumbers.0" => @phone,
"TemplateParams.0" => "#{@code}",
"SigContent" => "GitLink确实开源"
}
sequence = sign_params.sort.map { |k, v| "#{k}#{v}" }.join('')
# Rails.logger.info("create_signature=========#{sequence}#{private_key}")
req_params = sign_params.merge("Signature" => Digest::SHA1.hexdigest("#{sequence}#{private_key}"))
uri = URI("https://api.ucloud.cn")
uri.query = req_params.map { |k, v| "#{k}=#{URI.escape(v.to_s)}" }.join('&')
# Rails.logger.info("uri.query=========#{uri.query}")
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
req = Net::HTTP::Get.new uri.request_uri
response = http.request(req)
# Rails.logger.info("ucloud sms response.body=========#{response.body}")
result = ActiveSupport::JSON.decode(response.body)
result['RetCode']
end
end
def send_by_params(opt={})
public_key = "4Z7QYDY0SumplMtmNmd9PERgPPFiMpRR"
private_key = "7wxMoGoaQ1DtcQjDxgJrOGOXnIiZq4amEWvmi7eBtmd"
project_id = "org-3ozbh2"
sign_params = {
"Action" => "SendUSMSMessage",
"ProjectId" => project_id,
"TemplateId" => "#{opt[:TemplateId]}",
"PublicKey" => public_key,
"PhoneNumbers.0" => "#{opt[:PhoneNumbers]}",
"TemplateParams.0" => "#{opt[:TemplateParams]}",
"SigContent" => "GitLink确实开源"
}
sequence = sign_params.sort.map { |k, v| "#{k}#{v}" }.join('')
# Rails.logger.info("create_signature=========#{sequence}#{private_key}")
req_params = sign_params.merge("Signature" => Digest::SHA1.hexdigest("#{sequence}#{private_key}"))
uri = URI("https://api.ucloud.cn")
uri.query = req_params.map { |k, v| "#{k}=#{URI.escape(v.to_s)}" }.join('&')
# Rails.logger.info("uri.query=========#{uri.query}")
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
req = Net::HTTP::Get.new uri.request_uri
response = http.request(req)
# Rails.logger.info("ucloud sms response.body=========#{response.body}")
ActiveSupport::JSON.decode(response.body)
end
end
def send_sms(template_id)
end
def GetProjectList
public_key = "4Z7QYDY0SumplMtmNmd9PERgPPFiMpRR"
private_key = "7wxMoGoaQ1DtcQjDxgJrOGOXnIiZq4amEWvmi7eBtmd"
sign_params = {
"Action" => "GetProjectList",
"PublicKey" => public_key
}
sequence = sign_params.sort.map { |k, v| "#{k}#{v}" }.join('')
Rails.logger.info("create_signature=========#{sequence}#{private_key}")
req_params = sign_params.merge("Signature" => Digest::SHA1.hexdigest("#{sequence}#{private_key}"))
uri = URI("https://api.ucloud.cn")
uri.query = req_params.map { |k, v| "#{k}=#{URI.escape(v.to_s)}" }.join('&')
Rails.logger.info("uri.query=========#{uri.query}")
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
req = Net::HTTP::Get.new uri.request_uri
response = http.request(req)
Rails.logger.info("ucloud sms response.body=========#{response.body}")
response.body
end
end
# 1:注册手机验证码 2:找回密码手机验证码 4:绑定手机 9:验证手机号有效
def get_template_id(send_type)
case send_type
when 1, 2, 9
"UTA221114S2MGTY"
when 4
"UTA22112486FXLZ"
else
"UTA221114S2MGTY"
end
end
end