文章目录

  • 一、引入jar包
  • 二、yml里面配置支付
  • 三、java 实现支付的步骤
    • (1)在controller里面写一个支付接口
    • (2) EntPayReq 的实体类对象
    • (3)业务层 WxEntPayService
    • (4) RandomUtil方法
    • (5) 业务层 WxEntPayServiceImpl 实现方法

基于新创建的企业微信支付号,企业支付到零钱的功能改成了企业转账到零钱的功能,我们来实践操作一下,下面上步骤。

一、引入jar包

        <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-pay-spring-boot-starter</artifactId><version>4.3.7.B</version></dependency>

二、yml里面配置支付

wx:# 微信公众号mp:app-id: 微信公众号appidsecret: 微信公众号密钥token: arecatoken# 微信企业支付pay:appId: 微信公众号appidmchId: 微信企业商户号apiv3-key: api3key密钥private-key-path: 证书apiclient_keyprivate-cert-path: 证书apiclient_cert

三、java 实现支付的步骤

**该案例是微信公众号+微信支付,切齐一定要微信公众号关联微信商户号才可以**

(1)在controller里面写一个支付接口

public class WxEntPayController {@Autowiredprivate WxEntPayService wxEntPayService;/*** 支付接口** @param entPayReq* @return*/@AutoLog(value = "支付接口")@ApiOperation(value = "支付接口", notes = "支付接口")@PostMapping(value = "/entPay")public Result<?> entPay(@RequestBody EntPayReq entPayReq) {wxEntPayService.entPay(entPayReq);return Result.OK("支付成功!");}
}

(2) EntPayReq 的实体类对象

@ApiModel("企业支付请求")
@Data
public class EntPayReq {/*** <pre>* 字段名:金额.* 变量名:amount* 是否必填:是* 示例值:10099* 类型:int* 描述:企业付款金额, 单位为分* </pre>*/@NotNull(message = "金额不能为空")@Min(value = 30, message = "最小金额30分")@ApiModelProperty(value = "金额(单位分)", required = true)private Integer amount;/*** <pre>* 字段名:校验用户姓名选项.* 变量名:check_name* 是否必填:是* 示例值:OPTION_CHECK* 类型:String* 描述:NO_CHECK:不校验真实姓名 * FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账) * OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)* </pre>*/@ApiModelProperty(value = "校验用户姓名选项 [NO_CHECK:不校验真实姓名,FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账),OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)]")private String checkName;/*** <pre>* 字段名:收款用户姓名.* 变量名:re_user_name* 是否必填:可选* 示例值:马花花* 类型:String* 描述:收款用户真实姓名。* 如果check_name设置为FORCE_CHECK或OPTION_CHECK,  则必填用户真实姓名* </pre>*/@ApiModelProperty("收款用户真实姓名")private String reUserName;/*** <pre>* 字段名:设备号.* 变量名:device_info* 是否必填:否* 示例值:13467007045764* 类型:String(32)* 描述:微信支付分配的终端设备号* </pre>*/@ApiModelProperty("设备号")private String deviceInfo;/*** <pre>* 字段名:Ip地址.* 变量名:spbill_create_ip* 是否必填:是* 示例值:192.168.0.1* 类型:String(32)* 描述:调用接口的机器Ip地址* </pre>*/@NotBlank(message = "不能为空")@ApiModelProperty(value = "Ip地址", required = true)private String spbillCreateIp;/*** 支付订单号*/@ApiModelProperty(value = "支付订单号[非必填]")private String partnerTradeNo;/*** 批次订单号*/@ApiModelProperty(value = "批次订单号")private String batchTradeNo;
}

(3)业务层 WxEntPayService

public interface WxEntPayService {/*** 微信支付** @param entPayReq*/void entPay(EntPayReq entPayReq);
}

(4) RandomUtil方法

import org.apache.commons.lang3.RandomStringUtils;public class RandomUtil
{private static char[] chars  = new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U','V', 'W', 'X', 'Y', 'Z'};private static char[] nubers = new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};/*** 生成随机字符串,包含数字和字母* @param length 长度* @return* @author zmr*/public static String randomStr(int length){return RandomStringUtils.random(length, chars);}/*** 生成随机字符串,只包含数字* @param length 长度* @return* @author zmr*/public static String randomInt(int length){return RandomStringUtils.random(length, nubers);}
}

(5) 业务层 WxEntPayServiceImpl 实现方法

@Service
@Slf4j
public class WxEntPayServiceImpl implements WxEntPayService {@Autowiredprivate WxPayService wxPayService;/*** 不校验真实姓名.*/public static final String NO_CHECK = "NO_CHECK";/*** 微信支付** @param req*/@Overridepublic void entPay(EntPayReq req) {log.info("开始企业支付到零钱 [req:{}]",req);req.setCheckName(StringUtils.isBlank(req.getCheckName()) ? NO_CHECK : req.getCheckName());//商户订单号String partnerTradeNo = StringUtils.isNotBlank(req.getPartnerTradeNo()) ? req.getPartnerTradeNo() : RandomUtil.randomInt(20);req.setPartnerTradeNo(partnerTradeNo);//随机获取批次号  切记仅用于测试String s =  RandomNumber.GetRandom();req.setBatchTradeNo(s);TransferService transferService = wxPayService.getTransferService();//获取appIdString appId = wxPayService.getConfig().getAppId();//创建批次对象TransferBatchesRequest transferBatchesRequest=new TransferBatchesRequest();transferBatchesRequest.setAppid(appId);//设置批次名称 可不写transferBatchesRequest.setBatchName("测试批次");//设置批次备注 可不写transferBatchesRequest.setBatchRemark("测试");//设置该批次编号transferBatchesRequest.setOutBatchNo(s);//设置该批次总个数transferBatchesRequest.setTotalNum(1);//设置该批次总金额transferBatchesRequest.setTotalAmount(req.getAmount());//创建收款人请求对象ArrayList<TransferBatchesRequest.TransferDetail> transferDetails = new ArrayList<>();TransferBatchesRequest.TransferDetail transferDetail=new TransferBatchesRequest.TransferDetail();//转账的编号transferDetail.setOutDetailNo(req.getPartnerTradeNo());//转账的金额transferDetail.setTransferAmount(req.getAmount());//转账的注释transferDetail.setTransferRemark("转账金额");//以实际微信公众号那边的openid为准transferDetail.setOpenid("获取到用户的openid");//把收款人对象放到批次里面transferDetails.add(transferDetail);transferBatchesRequest.setTransferDetailList(transferDetails);TransferBatchesResult transferBatchesResult=null;try {transferBatchesResult = transferService.transferBatches(transferBatchesRequest);log.info("企业支付完成:[msg:{}]",transferBatchesResult);} catch (WxPayException e) {e.printStackTrace();log.info("企业支付失败:[msg:{}]",e.getMessage());}}

这样就可以实现单个人转账到零钱,该方法仅用于测试
批量转账到零钱是为了实现一批次转账到多个账户的方法,这里我只用了一个用户转账。


如果对你有所帮助,感谢点赞支持,谢谢

Java微信企业(批量)转账到零钱(超详细)相关推荐

  1. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...

  2. 微信企业支付发送到零钱

    微信企业支付发送到零钱 企业微信付款到零钱,是微信提供的一个支付接口. 一下是代码的具体实现 前置条件 已开通微信应用(服务号或者小程序),主要用到APPID+OPENID 已开通微信商户,并且开通企 ...

  3. Java 微信企业付款到个人钱包

    Java 微信企业付款到个人钱包 希望可以帮助到你 文章目录 **Java 微信企业付款到个人钱包** 前言 一.需要准备的配置 二.开发 总结 前言 微信企业付款到个人钱包,此功能模块需要提前在微信 ...

  4. PHP微信支付 “商家转账到零钱”一文概述

    PHP微信支付 商家转账到零钱 这里有个坑 1:转账低于5毛会失败 2:转账金额需要自己取整一下,微信官方金额是 分 为单位,换算成 元 时可能会除不尽 { "code":&quo ...

  5. 服务器里微信怎么多开,电脑上如何多开微信?三个微信多开方法分享,超详细步骤!...

    原标题:电脑上如何多开微信?三个微信多开方法分享,超详细步骤! 在我们日常工作和日常生活中,有时我们在电脑办公室时经常使用微信,但我们知道电脑上微信不能像QQ一样同时登陆多个账号.但是对很多营销人员来 ...

  6. java实现微信企业付款到个人零钱(微信红包)

    今天公司打算做一个活动,就是可以让用户领取平台发送的红包,根据微信官方文档实现微信企业付款到零钱(因为商户号不满足一些条件无法使用红包,红包跟零钱实现方法基本一样),然后又加入了一些简单的红包算法.微 ...

  7. 微信商户平台转账到零钱功能接入实战

    1.背景说明      2.实现过程          2.1 接入之前的准备工作          2.2 代码实现      3.注意事项以及相关说明          3.1 参数组装说明    ...

  8. 微信支付 商家转账到零钱 Api 过程

    企业付款到零钱,已经限额500以内,完全不够用 商家转账到零钱,限额20000单笔,需要申请要按不通过原因修改多试几次 准备前提: 1,平台证书,商家证书,一共2个: 2,设置APIv3密钥: 正文: ...

  9. java微信--企业付款到银行卡

    企业付款到银行卡其实就是企业付款到到零钱的进价版,只不过比到零钱多了一个RSA加密.只要加密好了,根据官方提供的参数,直接请求即可. 首先就是通过官方提供的接口https://fraud.mch.we ...

最新文章

  1. 控制面版中文件服务器属性,《服务器配置与管理》第3章基本配置.pptx
  2. 数仓和mysql的区别_数据库和数据仓库的区别和联系
  3. ALAssetsLibrary获取相册列表
  4. 【bzoj2555】Substring【后缀平衡树入门】
  5. Spring集成:轻量级集成方法
  6. [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]
  7. linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!
  8. 聚焦业务价值:分众传媒在 Serverless 上的探索和实践
  9. 微软Azure首席架构师John Gossman就微软加入Linux基金会一事答疑
  10. 项目经验少的怎么社招_想创业,但资金少,不知如何找项目?看看这些经验,你就知道了...
  11. ECharts使用—折线图动态加载
  12. Linux nohup 关闭终端的时候,程序依然能在后台运行( linux重定向及nohup不输出的方法)...
  13. 在Win10上安装VC6
  14. [疑难解答]MSN常见问题及回答(转)
  15. Canto助力金融衍生品市场持续、健康、快速发展
  16. unity 常见的置灰处理
  17. iOS打包导出时出现Missing iOS Distribution signing identity问题
  18. 曹德旺的商业哲学:如果你对谁都不相信,必将一事无成
  19. 找出连续最长数字串python_在Python中查找最长的连续字母和数字子字符串
  20. UIView Animation 动画学习总结

热门文章

  1. 全新WayOS 配置文件保存工具支持蓝色界面路由版本
  2. cad在线转换_CAD如何转换?一招教你在线免费将CAD转成多种格式
  3. 计算机网络重点题型总结
  4. 计算机三级网络技术第四章(第一轮)
  5. 如何降低程序员的工资?【你中招没】
  6. 献给30岁之前为前途迷茫彷徨的男人们的忠告
  7. 百度搜索引擎优化指南2.0
  8. java qlv转mp4 代码_独家的kux如何转成常用的mp4格式?快速将kux转mp4的技巧
  9. lifekeeper +DR+windows for sql 双机
  10. 高可用集群软件--LifeKeeper