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