아리운 문자 인터페이스 구현 템플릿

19032 단어 마이크로 서비스
1. 우선 우리는 전방에서 전송하는 핸드폰 번호인 아이폰을 필요로 한다. 인터페이스를 요청할 때마다 리디스 캐시에서 아이폰을 키로 삼아 대응하는 코드가 있는지 확인하고 존재하면 검증 메시지를 보내지 않는다.코드가 비어 있으면 자동으로 네 자리 인증코드를 생성하고send() 방법을 호출합니다. 그 중에서 'SMS 154161' 은 아리운에서 생성한templateCode입니다. 그리고 아이폰과 코드는 키,value 형식으로 리디스 캐시에 저장하고 만료 시간을 설정합니다.
import com.aliyuncs.utils.StringUtils;
import com.sms.service.SendSms;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@RestController
@CrossOrigin //    
public class SendSmsController {
     

    @Autowired
    private SendSms sendSms;

    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("/send/{phone}")
    public String code(@PathVariable("phone") String phone){
     
            String code = redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)){
     
            return phone + ":" +code + "   ,     ";
        }
        //         redis 
        code = UUID.randomUUID().toString().substring(0,4);
        HashMap<String,Object> param = new HashMap<>();
        param.put("code",code);
        boolean isSend = sendSms.send(phone,"SMS_154161",param);
        if(isSend){
     
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.SECONDS);
            return phone + ":" + code + "    !";
        }else {
     
            return "    !";
        }

    }

}

2. 서비스 계층
import java.util.Map;
public interface SendSmsService {
     

    public boolean send(String phoneNum, String templateCode, Map<String,Object> code);
}

3. 서비스 Impl 실현층
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.sms.service.SendSms;
import org.springframework.stereotype.Service;
import java.util.Map;

@Service
public class SendSmsServiceImpl  implements SendSmsService {
     
    @Override
    public boolean send(String phoneNum, String templateCode, Map<String, Object> code) {
     
        //         ,   Client、     
        DefaultProfile profile = DefaultProfile.getProfile(
                "cn-hangzhou",          //   ID
                "  ",      // RAM   AccessKey ID
                "  "); // RAM  AccessKey Secret
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest addSmsTemplateRequest = new CommonRequest();
        addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com");//   
        addSmsTemplateRequest.setSysVersion("2017-05-25");//   
        addSmsTemplateRequest.setSysAction("SendSms");

        //      (   ,   ,  ,  !)
        addSmsTemplateRequest.putQueryParameter("PhoneNumbers", phoneNum);
        addSmsTemplateRequest.putQueryParameter("SignName", "  ,     ");
        addSmsTemplateRequest.putQueryParameter("TemplateCode", templateCode);
        addSmsTemplateRequest.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));

        try {
     
            CommonResponse response = client.getCommonResponse(addSmsTemplateRequest);
            return response.getHttpResponse().isSuccess();
        }catch (ServerException e){
     
            e.printStackTrace();
        }
        catch (ClientException e) {
     
            e.printStackTrace();
        }
        return false;
    }
}

좋은 웹페이지 즐겨찾기