Helius
2020-07-15 edf211029ca6b07962d1fb37a18bb184bf89acdd
modify
2 files modified
2 files added
278 ■■■■■ changed files
pom.xml 34 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/utils/RequestEncoder.java 71 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/utils/SubMailSend.java 169 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/Sms106Send.java 4 ●●● patch | view | raw | blame | history
pom.xml
@@ -214,6 +214,40 @@
            <artifactId>xml-apis</artifactId>
            <version>1.4.01</version>
        </dependency>
        <!-- submail邮件 start -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ezmorph</groupId>
            <artifactId>ezmorph</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.2.3</version>
            <classifier>jdk15</classifier>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.3.5</version>
        </dependency>
        <!-- submail邮件 end -->
    </dependencies>
    <build>
src/main/java/com/xcong/excoin/common/utils/RequestEncoder.java
New file
@@ -0,0 +1,71 @@
package com.xcong.excoin.common.utils;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
 * 处理请求数据
 * @author submail
 *
 */
public class RequestEncoder {
    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
    public static final String MD5 = "MD5";
    public static final String SHA1 = "SHA1";
    /**
     * 编码的字符串
     *
     * @param algorithm
     * @param str
     * @return String
     */
    public static String encode(String algorithm, String str) {
        if (str == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
            messageDigest.update(str.getBytes("UTF-8"));
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     *获取原始字节并将其格式化。
     * @param bytes
     *            the raw bytes from the digest.
     * @return the formatted bytes.
     */
    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        for (int j = 0; j < len; j++) {             buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }
    public static String formatRequest(Map<String, Object> data){
        Set<String> keySet = data.keySet();
        Iterator<String> it = keySet.iterator();
        StringBuffer sb = new StringBuffer();
        while(it.hasNext()){
            String key = it.next();
            Object value = data.get(key);
            if(value instanceof String){
                sb.append(key + "=" + value + "&");
            }
        }
        if(sb.length() != 0){
            return sb.substring(0, sb.length() - 1);
        }
        return null;
    }
}
src/main/java/com/xcong/excoin/common/utils/SubMailSend.java
New file
@@ -0,0 +1,169 @@
package com.xcong.excoin.common.utils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
/**
 * 邮件发送
 *
 * @author wzy
 * @date 2020-05-27
 **/
public class SubMailSend {
    /**
     * 时间戳接口配置
     */
    public static final String TIMESTAMP = "https://api.mysubmail.com/service/timestamp";
    /**
     * API 请求接口配置
     */
    private static final String URL = "https://api.mysubmail.com/mail/xsend";
    public static final String TYPE_MD5 = "md5";
    public static final String TYPE_SHA1 = "sha1";
    private static final String APP_ID = "16082";
    private static final String APP_KEY = "f34c792a1112c16c190ed7190d386c4f";
    private static final String FROM = "biue@submail.biue.me";
    private static final String SIGN_TYPE = "";
    /**
     * 发送验证码邮件
     *
     * @param to   对象
     * @param code 验证码
     * @return true or false
     */
    public static boolean sendMail(String to, String code) {
        JSONObject vars = new JSONObject();
        vars.put("code", code);
        String project = "zoKVB";
        return request(vars, project, to);
    }
    /**
     * 发送充值成功邮件
     *
     * @param to      对象
     * @param time    成功时间
     * @param orderNo 订单编号
     * @return true or false
     */
    public static boolean sendRechargeMail(String to, String time, String orderNo) {
        JSONObject vars = new JSONObject();
        vars.put("time", time);
        vars.put("orderNo", orderNo);
        String project = "x820C2";
        return request(vars, project, to);
    }
    public static boolean sendWithdrawalMail(String to, String time) {
        JSONObject vars = new JSONObject();
        vars.put("time", time);
        String project = "e3BO91";
        return request(vars, project, to);
    }
    private static boolean request(JSONObject vars, String project, String to) {
        TreeMap<String, Object> requestData = new TreeMap<String, Object>();
        requestData.put("appid", APP_ID);
        requestData.put("project", project);
        requestData.put("to", to);
        requestData.put("from", FROM);
        if (!vars.isEmpty()) {
            requestData.put("vars", vars.toString());
        }
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        @SuppressWarnings("deprecation")
        ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
        for (Map.Entry<String, Object> entry : requestData.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            if (value instanceof String) {
                builder.addTextBody(key, String.valueOf(value), contentType);
            }
        }
        if (SIGN_TYPE.equals(TYPE_MD5) || SIGN_TYPE.equals(TYPE_SHA1)) {
            String timestamp = getTimestamp();
            requestData.put("timestamp", timestamp);
            requestData.put("sign_type", SIGN_TYPE);
            String signStr = APP_ID + APP_KEY + RequestEncoder.formatRequest(requestData) + APP_ID + APP_KEY;
            builder.addTextBody("timestamp", timestamp);
            builder.addTextBody("sign_type", SIGN_TYPE);
            builder.addTextBody("signature", RequestEncoder.encode(SIGN_TYPE, signStr), contentType);
        } else {
            builder.addTextBody("signature", APP_KEY, contentType);
        }
        HttpPost httpPost = new HttpPost(URL);
        httpPost.addHeader("charset", "UTF-8");
        httpPost.setEntity(builder.build());
        try {
            CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
            HttpResponse response = closeableHttpClient.execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                String jsonStr = EntityUtils.toString(httpEntity, "UTF-8");
                if ("success".equals(JSONObject.fromObject(jsonStr).getString("status"))) {
                    return true;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 获取时间戳
     *
     * @return
     */
    private static String getTimestamp() {
        CloseableHttpClient closeableHttpClient = HttpClientBuilder.create().build();
        HttpGet httpget = new HttpGet(TIMESTAMP);
        try {
            HttpResponse response = closeableHttpClient.execute(httpget);
            HttpEntity httpEntity = response.getEntity();
            String jsonStr = EntityUtils.toString(httpEntity, "UTF-8");
            if (jsonStr != null) {
                JSONObject json = JSONObject.fromObject(jsonStr);
                return json.getString("timestamp");
            }
            closeableHttpClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args) {
//        System.out.println(sendMail("546766039@qq.com", "123456"));
        System.out.println(sendRechargeMail("546766039@qq.com", DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN), "123456"));
    }
}
src/main/java/com/xcong/excoin/modules/Sms106Send.java
@@ -44,7 +44,9 @@
        String content = StrUtil.format(msg, time, orderNo);
        return request(phone, content, "提现");
    }
    public static boolean sendWithdrawalCoinMsg(String phone, String time) {
    public static boolean
    sendWithdrawalCoinMsg(String phone, String time) {
        String msg = "尊敬的用户,您的帐号于{}有一笔成功提现订单,如有疑问请联系客服。";
        String content = StrUtil.format(msg, time);
        return request(phone, content, "提币");