微信支付之现金红包 - Java 开发

本文章是此菜鸡首次接触微信支付所写下,如果对您有帮助希望点个赞~~

基本原理就是调用微信现金红包接口,传入参数,获取响应

  • 接口url:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack
  • 入参:WxRedpackSdkVo
  • 出参:WxRedpackSdkRes
  • 入参和出参均为 xml格式

另外 binarywang的WxJava开源项目已经把这些都封装好了,可以直接食用https://gitee.com/binary/weixin-java-tools

产品简介

现金红包,是营销工具之一,受广大商户与用户的喜爱

商户可以通过公众号或者服务通知向用户发放现金红包

用户领取红包后,资金到达用户零钱

若用户未领取,资金将会在24小时后退回商户的微信支付账户中

必备要素

【对照官网进行准备】

  1. 有一个正常的微信商户号
  2. 需要开通现金红包权限
  3. 有一个公众号(服务号)并且绑定到该商户号
  4. 在商户平台下载 API证书
  5. 给你的商户充上两块钱(确保资金充足)
  6. 在微信平台设置一些必要参数

支付接口核心代码

SSL 请求调用 微信的现金红包接口

// xian'j Url 地址
private static final SENDREDPACK_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
// 证书存放地址
private static final PKCS12_FILE_PATH = "../../apiclient_cert.p12";/*** ssl 请求** @param url * @param reqXmlData xml 格式请求参数* @param mchId 商户 ID* @return*/
private static String ssl(String url, String reqXmlData, String mchId) {// 证书准备char[] password = mchId.toCharArray();KeyStore ks = KeyStore.getInstance("PKCS12");FileInputStream instream = new FileInputStream(WXPayConstants.CERT_PATH_SERVER);ks.load(instream, password);log.info("Load keyStore success");// 实例化密钥库 & 初始化密钥工厂 && 创建 SSL 连接KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());kmf.init(ks, password);BasicHttpClientConnectionManager connManager = getBasicHttpClientConnectionManager(kmf);log.info("nit keyManagerFactory success。Create SSLContext & connManager init success");// 准备 POST 请求HttpPost httpPost = new HttpPost(url);RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(8 * 1000).setConnectTimeout(6 * 1000).build();httpPost.setConfig(requestConfig);httpPost.addHeader("Content-Type", "text/xml");httpPost.addHeader("User-Agent", USER_AGENT + " " + mchId);httpPost.setEntity(new StringEntity(reqXmlData, "UTF-8"));log.info("Create httpClient & httpPost success");// 通过 HttpClient 发起 POST 请求,HttpResponse 接收请求结果HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connManager).build();HttpResponse httpResponse = httpClient.execute(httpPost);// 返回响应体内容 xml(String)return EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
}

请求 xml 示列

<xml><mch_id>8888888888</mch_id><wxappid>wxappid88888888888</wxappid><re_openid>oPPyl1cjU8fcOps-qKwIOY9XuyI8</re_openid><total_num>1</total_num><total_amount>1000</total_amount><wishing>恭喜发财,大吉大利</wishing><send_name>白嫖不对哦</send_name><sign>00OSD69724074UI982867A1607A87UF2V</sign><nonce_str>DmTGX1VZ9KoJirLKwo86HnnKhFo0BtLH</nonce_str><mch_billno>8888888888202212128888888888</mch_billno><act_name>快快要请好友一起领取现金红包吧</act_name><scene_id>PRODUCT_3</scene_id><client_ip>118.122.18.168</client_ip><remark>感谢支持现金红包</remark><risk_info/>
</xml>

响应 xml 示列

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[发放成功]]></return_msg><result_code><![CDATA[SUCCESS]]></result_code><err_code><![CDATA[SUCCESS]]></err_code><err_code_des><![CDATA[发放成功]]></err_code_des><mch_billno><![CDATA[8888888888202212128888888888]]></mch_billno><mch_id><![CDATA[8888888888]]></mch_id><wxappid><![CDATA[wxappid88888888888]]></wxappid><re_openid><![CDATA[oPPyl1cjU8fcOps-qKwIOY9XuyI8]]></re_openid><total_amount>1000</total_amount><send_listid><![CDATA[1000041701202212053666666888888]]></send_listid>
</xml>

接口请求入参类

WxRedpackSdkVo.class

package com.lcl.redpacket.config.wx;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.io.Serializable;/*** 微信发放红包接口 sdkVo** @author lichenglong* @date 2022-11-24 10:24*/
@Data
@Component
@ConfigurationProperties(prefix = "wx.redpack")
public class WxRedpackSdkVo implements Serializable {private String nonce_str;private String sign;private String mch_billno;private String mch_id;private String wxappid;private String send_name;private String re_openid;private int total_amount;private int total_num;private String wishing;private String client_ip;private String act_name;private String remark;private String scene_id;private String risk_info;
}

接口响应结果类

WxRedpackSdkRes.class

package com.lcl.redpacket.config.wx;import java.io.Serializable;/*** 微信现金红包接口 sdkRes** @author lichenglong* @date 2022-11-24 10:24*/
@Data
public class WxRedpackSdkRes implements Serializable {/*** 返回状态码 SUCCESS/FAIL*/private String return_code;/*** 返回信息*/private String return_msg;// ===== 以下字段在return_code为SUCCESS的时候有返回 =====/*** 业务结果 SUCCESS/FAIL* 注意:当状态为FAIL时,存在业务结果未明确的情况。所以如果状态是FAIL,请务必再请求一次查询接口[请务必关注错误代码(err_code字段),通过查询得到的红包状态确认此次发放的结果。],以确认此次发放的结果。*/private String result_code;/*** 错误码信息* 注意:出现未明确的错误码(SYSTEMERROR等)时,请务必用原商户订单号重试,或者再请求一次查询接口以确认此次发放的结果。*/private String err_code;/*** 错误代码描述*/private String err_code_des;// ===== 以下字段在return_code和result_code都为SUCCESS的时候有返回 =====/*** 商户订单号:必须唯一* 组成:mch_id+yyyymmdd+10位一天内不能重复的数字*/private String mch_billno;/*** 商户号*/private String mch_id;/*** 公众账号 appid*/private String wxappid;/*** 接受收红包的用户*/private String re_openid;/*** 付款金额,单位分*/private int total_amount;/*** 红包订单的微信单号*/private String send_listid;
}

1.1微信支付之现金红包 - Java 开发相关推荐

  1. 微信支付-超详细java开发-小程序对接

    文章目录 前言 微信支付接入前准备 1.思路介绍 2.如何注册小程序账号? 3.如何接入微信支付,需要准备哪些东西? 4.小程序接入前的准备(APPID及mchid以上两步已拿到,只需配置一下API ...

  2. 微信支付发放现金红包

    微信支付发放现金红包 转载:https://blog.csdn.net/qq_36025814/article/details/111263998 1.商户平台证书下载并上传至服务器 2.微信官方文档 ...

  3. 微信公众号后台java开发实现自动回复机器人

    1.注册微信公众号.(简单) 2.注册图灵机器人.(自己百度) 1)注册后可以拿到key  (注意  api接入里的钥匙不要打开,否则要加解密,麻烦) 3.配置微信公众号服务器验证. 1)在开发的基本 ...

  4. 现金红包 java开发_微信现金红包开发1(JAVA)

    参数3 : 商户订单号  mch_billno String mch_billno = mch_id + GenerateSequenceUtil.generateSequenceNo(); 些一个G ...

  5. 微信小程序开发笔记 支付篇④——基于微信支付SDK实现Java后端接口使用

    文章目录 一.前文 二.微信支付 Java SDK 三.示例 一.前文 微信小程序开发笔记--导读 微信支付-SDK与DEMO下载 先看README.md 二.微信支付 Java SDK 对微信支付开 ...

  6. php 微信红包支付开发文档,【微信支付】现金红包开发者文档

    1.登录微信支付商户平台下载证书以及充值 在调用接口前,请商户使用微信支付商户号登录微信支付商户平台完成下述工作: 备注: 微信支付商户平台地址为pay.weixin.qq.com.微信支付商户号会在 ...

  7. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

  8. 小程序微信支付实践案例-JAVA

    微信支付接入总让我产生一种很容易的幻觉,但自己又不知道从何下手.平时每次去买东西,点击支付后拉起来的支付界面,我很好奇,想自己玩一下. 如果你从来没有过微信支付相关实践经验,你肯定会去看微信官方文档, ...

  9. 小程序微信支付V3版本Java集成

    一.简介 1.关于API v3 相较于之前的微信支付API,主要区别是: 遵循统一的REST的设计风格 使用JSON作为数据交互的格式,不再使用XML 使用基于非对称密钥的SHA256-RSA的数字签 ...

  10. 谈谈Google与微信H5牛牛的Java开发规范

    多年前,Google发布微信H5牛牛搭建平台(h5.fanshubbs.com)来定义Java编码时应遵循的微信牛牛Q_1687054422规范:今年年初阿里则发布阿里巴巴Java 开发手册,并随后迭 ...

最新文章

  1. MyBatis构建sql时动态传入表名以及字段名
  2. solrcloud集群搭建
  3. 子图同构算法——Ullmann算法(1)不包含refine procedure的简单穷举算法。
  4. CentOS 5.X用第三方源安装PHP MySQL Apache等
  5. 利用Excel或LibreOffice的业务输入进行单元测试约束
  6. 深挖“窄带高清”的实现原理
  7. SQL Server需要监控哪些计数器 ---指尖流淌
  8. JavaScript 常用工具函数
  9. Redis教程:事件、客户端和服务器
  10. 解决Intellij中的一些bug
  11. Sql server 2008 Express 下载
  12. Java 项目中使用 TongLink/Q 实现消息队列传输
  13. python中add方法_python中add函数怎么用
  14. VtigerCRM 点击拨号和来电弹屏 PBX Manager Module
  15. JVM--基础--19.4--垃圾收集器--Parallel Scavenge
  16. 印度市场救不了苹果手机,也救不了库克
  17. R语言使用glm函数构建拟泊松回归模型(quasi-Poisson regression)、family参数设置为quasipoisson、summary函数获取拟泊松回归模型汇总统计信息
  18. 城市之眼视觉计算技术
  19. 11s到1s,性能优化之首屏加载
  20. ECCV22 最新54篇论文分方向整理|包含Transformer、图像处理、人脸等(附下载)...

热门文章

  1. 浏览器打开JSP文件只显示源代码的问题
  2. 张开翅膀,放飞梦想,让光彩无限绽放!
  3. python爬取京东商品价格走势_用python编写的抓京东商品价格的爬虫
  4. 联想笔记本电脑安装Ubuntu18.04系统
  5. 电脑出问题解决办法(Win7)
  6. Linux基础-日志管理
  7. 计算机语言排行榜2015,2015年3月编程语言排行榜:F#排名达到11
  8. 语料库mysql_基于PHP+MySQL的小型语料库程序设计解决方案
  9. 什么是 IP 欺骗?
  10. 菜鸟日记(yzy):初见opencMS