陈昶聿
3 天以前 50443fef22aaa77a1456e1981b51c10e69618b34
smartor/src/main/java/com/smartor/common/MtSubmitSmUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.smartor.common;
import com.alibaba.fastjson2.JSON;
import com.smartor.domain.MtSubmitSmResp;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * MT消息发送工具类(SP向行业汇聚平台提交MT消息)
 * æŽ¥å£åœ°å€ï¼šhttp://ip:port/submitsm
 * ç¼–码:UTF-8,鉴权算法:MD5
 */
@Slf4j
@Component
public class MtSubmitSmUtil {
    private static final RestTemplate restTemplate = new RestTemplate();
    @Value("${sms_password}")
    private String password;
    @Value("${sms_accountName}")
    private String accountName;
    @Value("${sms_url}")
    private String url;
    @Value("${sms_sourceAddr}")
    private String sourceAddr;
    @Value("${sms_serviceCode}")
    private String serviceCode;
    @Value("${sms_appkey}")
    private String appKey;
    @Value("${sms_flag}")
    private String smsFlag;
    /**
     * å‘送MT消息
     *
     * @param destAddr ç›®æ ‡å·ç 
     * @param content  çŸ­ä¿¡å†…容
     * @return MtSubmitSmResp å“åº”结果
     */
    public Map<String, Object> submitSm(String destAddr, String content) {
        try {
            log.info("南华附一发送短信,destAddr:{},content:{}", destAddr, content);
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
            String hashHex = buildHashHex(accountName, password, date);
            Map<String, Object> authMap = new HashMap<>();
            authMap.put("Algorithm", "MD5");
            authMap.put("Date", date);
            authMap.put("HASHHEX", hashHex);
            Map<String, Object> reqMap = new HashMap<>();
            reqMap.put("accountName", accountName);
            reqMap.put("Authorization", authMap);
            reqMap.put("DestAddr", destAddr);
            reqMap.put("SourceAddr", sourceAddr);
            reqMap.put("Content", smsFlag + content);
            reqMap.put("ServiceCode", serviceCode);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
            headers.set("Accept-Language", "UTF-8");
            headers.set("app-key", "ak-BFq4NN0TMf92J7KAioNYGz74");
            HttpEntity<String> entity = new HttpEntity<>(JSON.toJSONString(reqMap), headers);
            log.info("MtSubmitSm è¯·æ±‚地址:{},请求参数:{}", url + "/submitsm", JSON.toJSONString(reqMap));
            ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class);
            log.info("MtSubmitSm å“åº”结果:{}", response.getBody());
            return JSON.parseObject(response.getBody(), Map.class);
        } catch (Exception e) {
            log.error("MtSubmitSm å‘送失败,url:{},destAddr:{},error:{}", url, destAddr, e.getMessage(), e);
            Map<String, Object> resp = new HashMap<>();
            resp.put("code", -1);
            resp.put("message", "发送异常:" + e.getMessage());
            return resp;
        }
    }
    /**
     * è®¡ç®—HASHHEX:MD5(Algorithm:帐号名:密码:Date)
     * ä¾‹ï¼šMD5:95555:12345:2016-10-09 16:19:43
     */
    private static String buildHashHex(String accountName, String password, String date) throws Exception {
        String plain = "MD5:" + accountName + ":" + password + ":" + date;
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(plain.getBytes(StandardCharsets.UTF_8));
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}