微信公众号开发系列之发送红包-java版本

tips:代码我已经上传到github上了:https://github.com/sangbobo/WeChatSendRedPack

在文章的最后也推荐了一个微信java开发工具包WxJava,如果有需求的话,可自取。

转载请注明出处: SangBigYe:http://blog.csdn.net/cutelittlebo/article/details/53874450

首先是罗列一下基本的开发步骤。

前期准备

1、有一个公众号
2、开通微信支付功能
3、进入产品中心、开通红包 功能(随便选一个渠道,后面能再更改)
4、进入账户中心-账户设置-API安全-下载证书(这里只用到里面的apiclient_cert.p12证书)。
5、进入账户中心-账户设置-API安全-设置API密钥(输入一个32的密钥,随便输入一个,但是自己一定要记住,设置后是不能查看的。)。
6、充值一定的金额(红包最少发送一块钱。。。)

开发阶段准备

参考:微信的红包发放接口:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3

用到的jar包: | jar包说明
-------- |
commons-lang3-3.4.jar | 文本处理
httpcore-4.4.jar | https相关
json-20090211.jar | json相关
okhttp-3.5.0.jar | http请求相关
okio-1.11.0.jar | okhttp依赖

正式开发阶段


    public static void main(String[] args) throws Exception {


        //具体参数查看具体实体类,实体类中的的参数参考微信的红包发放接口,这里你直接用map,进行设置参数也可以。。。
        SendRedPack sendRedPack = new SendRedPack(
                "随机字符串不超过32位",
                "随机订单号,不超过32位",
                "商户号",
                "公众号appid",
                "桑博",
                "填写接受人的openid",
                100,
                1,
                "萌萌哒",
                "127.0.0.1",
                "桑博红包",
                "桑博",
                "PRODUCT_5"
        );


        //将实体类转换为url形式
        String urlParamsByMap = Tool.getUrlParamsByMap(Tool.toMap(sendRedPack));
        //拼接我们再前期准备好的API密钥,前期准备第5条
        urlParamsByMap += "&key=填写API密钥";
        //进行签名,需要说明的是,如果内容包含中文的话,要使用utf-8进行md5签名,不然会签名错误
        String sign = Tool.parseStrToMd5L32(urlParamsByMap).toUpperCase();
        sendRedPack.setSign(sign);
        //微信要求按照参数名ASCII字典序排序,这里巧用treeMap进行字典排序
        TreeMap treeMap = new TreeMap(Tool.toMap(sendRedPack));
        //然后转换成xml格式
        String soapRequestData = Tool.getSoapRequestData(treeMap);
        //发起请求前准备
        RequestBody body = RequestBody.create(MediaType.parse("text/xml;charset=UTF-8"), soapRequestData);
        Request request = new Request.Builder()
                .url("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack")
                .post(body)
                .build();
        //为http请求设置证书
        SSLSocketFactory socketFactory = getSSL().getSocketFactory();
        X509TrustManager x509TrustManager = Platform.get().trustManager(socketFactory);
        OkHttpClient okHttpClient = new OkHttpClient.Builder().sslSocketFactory(socketFactory, x509TrustManager).build();
        //得到输出内容
        Response response = okHttpClient.newCall(request).execute();
        String content = response.body().string();
        System.out.println(content);

1、关于total_amout,此处略坑,100 == 1元钱 ,也就是说 这里的 1 相当于1分钱,所以大家做好处理。微信发送红包不少于1元钱。

2、关于使用中文签名错误,一定要使用utf-8进行md5。

    public static SSLContext getSSL() throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {
        KeyStore keyStore = KeyStore.getInstance("PKCS12");
        //证书位置自己定义
        FileInputStream instream = new FileInputStream(new File("D:/soft/apiclient_cert.p12"));
        try {
            keyStore.load(instream, "填写证书密码,默认为商户号".toCharArray());
        } finally {
            instream.close();
        }
        SSLContext sslcontext = SSLContexts.custom()
                .loadKeyMaterial(keyStore, "填写证书密码,默认为商户号".toCharArray())
                .build();
        return sslcontext;
    }

总结

详细的代码我已经上传到github上了:点击直达

推荐

WxJava:点击直达

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值