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:点击直达

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

  1. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  2. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  3. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  4. 微信公众号开发系列教程一(调试环境部署)

    http://www.cnblogs.com/zskbll/p/4074855.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  5. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示

    微信公众号开发系列-13.基于RDIFramework.NET框架整合微信开发应用效果展示 1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为 ...

  6. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    C#微信公众号开发系列教程五(接收事件推送与消息排重) 原文:C#微信公众号开发系列教程五(接收事件推送与消息排重) 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续 ...

  7. .NET微信公众号开发系列 - 项目介绍

    由于业务需要,需要开发微信公众号.不过没有查询到比较有用的信息,只能自己摸索前进. 写这个微信公众号开发系列,希望能提供一些帮助. 需要的功能有创建订单.查看订单.还有基本的用户管理. 由于团队人员有 ...

  8. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  9. php公众号客服消息图文,微信公众号开发系列-发送客服消息(示例代码)

    下面是做微信公众号开发用到最多的两个客服消息发送类型,文本信息和图文信息. 1.发送文本消息{ "touser":"OPENID", "msgtype ...

最新文章

  1. 回头看医疗行业信息化,怎一个乱字了得
  2. rest spring_Spring的REST服务发现性,第5部分
  3. oracle pl/sql 游标,Oracle PL/SQL 关于游标的介绍
  4. 开发WCF/Silverlight须知
  5. pthread_cond_timedwait方法Linux时间编程
  6. 2022年java开发面试题整理合集
  7. 00006__WindowsAPI 之 CreatePipe、CreateProcess
  8. CrossApp 0.3.8 发布,跨平台移动App开发引擎
  9. Windows_解决win7开机画面变成vista画面的方法
  10. 同城信息发布小程序开发制作
  11. 智慧公厕擦手纸洗手液余量实时在线统计
  12. 网络编程的TCP和UDP实现(Python)
  13. LDP中的UE(一元编码)和LATENT中方法UER实现
  14. 04夯实基础之MySQL基础
  15. 【概念】权限管理模型(RBAC、ABAC、ACL)
  16. 喜马拉雅-处世人生-老炮儿崔哥侃美国(完结)
  17. 企业云邮箱申请,TOM企业邮箱,2021不见不散
  18. Python基础学习之”基础语法5
  19. python朋友圈教程_Python 生成你的朋友圈九宫格图片
  20. java开发规范--编程规约--集合处理

热门文章

  1. GaitGAN: Invariant Gait Feature Extraction Using Generative Adversarial Networks论文翻译以及理解
  2. 达芬奇科学特展《穿越·创新·达芬奇:超越时代的创新者》
  3. 国际工业自动化技术及装备展(导电滑环应用领域)
  4. 针对移动手机漏洞与安全支付现状分析
  5. 如何彻底删除Edge浏览器
  6. 一名UI设计师眼中的用户体验
  7. KU060板卡设计资料原理图第636篇:基于FMC的KU060高性能 PCIe 载板
  8. 揭示生命奥秘,促进疫苗研发,生物物理学有望掀起下一轮医学革命
  9. 使用Focus for Mac怎样阻止应用程序?
  10. 远程台式机接入销售管理系统crm销售管理软件