腾讯云 兑换码 查询软件类商品兑换码信息

11 篇文章 0 订阅

import java.io.IOException;
import java.net.URLEncoder;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.util.EntityUtils;

import sun.misc.BASE64Encoder;

/**
 * 腾讯云  兑换码 查询软件类商品兑换码信息
 * 
 */
public class Tenxunyun {
    private static final String MAC_NAME = "HmacSHA1";  //加密方式
    private static final String ENCODING = "UTF-8"; //编码
    private static final String secreId = "******"; //个人 API 密钥 secreId
    private static final String secretKey = "******";//个人 API 密钥 secretKey

    public static void main(String[] args) throws ClientProtocolException, IOException {
        Tenxunyun t = new Tenxunyun();
        t.redeem("jsfg542g222hdkk541sdf");
    }

    /**
     * 验证
     * @Title: redeem   
     * @param: @param code
     * @param: @throws ClientProtocolException
     * @param: @throws IOException      
     * @return: void      
     * @throws
     */
    public void redeem(String code) throws ClientProtocolException, IOException{
        //unix时间戳 
        long stamp =  System.currentTimeMillis()/1000L;

        //随机数
        String Nonce = (stamp+1463)+"";
        Nonce = Nonce.substring(4,Nonce.length());


        //  拼接签名原文字符串    对参数排序   拼接请求字符串  公共参数及接口方法参数 
        String srcStr = "GETmarket.api.qcloud.com/v2/index.php?Action=QueryVoucherData&Nonce=" + Nonce
                + "&Region=bj&SecretId="+secreId+"&Timestamp=" + stamp
                + "&voucherCode="+code;

        //生成签名串
        String encode = "";
            try {
                encode = base64Encode(HmacSHA1Encrypt(srcStr, secretKey));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        //签名串编码
        String keyWord =  URLEncoder.encode(encode,ENCODING);

        String url = "https://market.api.qcloud.com/v2/index.php?Action=QueryVoucherData&Nonce=" +Nonce
                + "&Region="+"bj"+"&SecretId="+secreId+"&Timestamp=" + stamp + "&Signature="
                + keyWord + "&voucherCode="+code;

        HttpGet get = new HttpGet(url);
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = httpclient.execute(get, new BasicHttpContext());
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == HttpStatus.SC_OK) {
            String resBody = EntityUtils.toString(response.getEntity());
            System.out.println(resBody);

            //resBody 转成json 获取 code  判断是否可用
        }

    }



    /**
     * base 64 encode
     * 
     * @param bytes
     *            待编码的byte[]
     * @return 编码后的base 64 code
     */
    public static String base64Encode(byte[] bytes) {
        return new BASE64Encoder().encode(bytes);
    }

    /**
     * HmacSHA1 加密
     * @param: @param encryptText
     * @param: @param encryptKey
     * @param: @return
     * @param: @throws Exception      
     * @return: byte[]      
     * @throws
     */
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }


}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ma_xs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值