weixin-java-pay 微信退款
使用第三方类库支持微信退款
jdk1.8
maven3.8.1
weixin-java-pay4.2.0
spring-cloud Hoxton.SR8
spring-cloud-alibaba 2.2.3.RELEASE
前言
本文仅做记录,遇到其他接口使用问题参考[weixin-java](https://gitee.com/binary/weixin-java-pay-demo)官方文档
第一次对接微信支付相关接口,遇到很多问题,记录一下
一、获取证书
从微信商户支付平台下载安全证书放在本地目录,不需要安装可以直接使用
二、配置支付yml文件
微服务项目需要在配置中心里配置一份
application.yam中配置wx.pay
代码如下(示例):
wx:pay:mp-app-id: wx1111111111app-app-id: wx1111111111mch-id: 111111111mch-key: 234lkjlhkh34hjhjkl45hk45hk34kkey-path: D:/apiclient_cert.p12 # 你自己的p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)notify-url: https://xx.com/etonkids.wonder.box.teacher.user/wonderBoxClassTeacher/refundCallback # 退款回调地址,必须是公网可访问的https请求地址,不能携带参数
三、编写配置类
@Data
@Component
@ConfigurationProperties(prefix = "wx.pay")
public class WechatPayConfig {private static Logger logger = LoggerFactory.getLogger(WechatPayConfig.class);/*** app appId*/private String appAppId;/*** 公众号 appId*/private String mpAppId;/*** 商户号*/private String mchId;/*** 商户密钥*/private String mchKey;/*** 证书*/private String keyPath;/*** 支付成功的回调地址*/private String notifyUrlRefund;@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);}@Bean@ConditionalOnMissingBeanpublic WxPayConfig wxPayConfig() {logger.info("======================开始初始化微信支付参数======================");WxPayConfig payConfig = new WxPayConfig();payConfig.setAppId(maAppId);payConfig.setMchId(mchId);payConfig.setMchKey(mchKey);payConfig.setKeyPath(keyPath);payConfig.setNotifyUrl(notifyUrlRefund);logger.info(this.toString());logger.info("======================初始化微信支付参数完成======================");return payConfig;}@Beanpublic WxPayService wxPayService(WxPayConfig wxPayConfig) {logger.info("======================初始化微信支付接口服务开始======================");WxPayService wxPayService = new WxPayServiceImpl();wxPayService.setConfig(wxPayConfig);logger.info("======================初始化微信支付接口服务完成======================");return wxPayService;}
}
四、Service层注入WxPayService调用退款
@Override@Transactional(rollbackFor = Exception.class)public synchronized Result refund(RefundDto applicationRecord) throws Exception {// 你的业务代码// 调用申请退款接口WxPayConfig config = wxPayService.getConfig();WxPayRefundRequest wxPayRefundRequest = WxPayRefundRequest.newBuilder().outRefundNo(outRefundNo).outTradeNo(String.valueOf(id)).refundFee(payAmount).totalFee(amount).notifyUrl(config.getNotifyUrl()).build();log.info(">>>>>wxPayRefundRequest={}", wxPayRefundRequest.toString());wxPayService.refundV2(wxPayRefundRequest);return Result.OK();}@Override@Transactional(rollbackFor = Exception.class)public synchronized String refundCallback(String xmlData) throws Exception {// 回调函数中处理你的业务即可return WxPayNotifyResponse.success("SUCCESS");}
需要注意
1.微信支付分V2和V3版本,我用的是V2,不能使用JSONObject.toJSONString(config)打印日志,否则会走initApiV3HttpClient方法,提示缺少参数
2.发起退款传入的退款单号要不同,不能使用相同的退款单号
3.退款回调的地址必须是公网可访问的https请求
weixin-java-pay 微信退款相关推荐
- 【java】微信退款结果通知解密
整理了一份较为完整的java关于微信退款结果通知解密 (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.w ...
- java实现微信退款
微信退款之前需要在常量中配置退款地址,退款的地址必须是可以直接访问的.(之前的申请商户平台及在开放平台申请账号不在描述)在调起之前需要下载商户平台上的证书将其放在项目src下. 微信退款回调url : ...
- weixin java tools_微信工具weixin-java-tools的使用总结
1.使用jar(maven) me.chanjar weixin-java-mp 1.3.3 2.创建weixin包,添加类 package com.weixin; import java.io.In ...
- weixin java tools_weixin-java-tools(微信开发工具包)
weixin-java-tools是一款非常好用的微信开发工具包,SDK支持包括微信支付.微信开放平台.小程序.企业号/企业微信.公众号(包括服务号和订阅号)等的后端开发.有需要的朋友可以下载.. 相 ...
- 微信退款流程实现整理(java)
前言 此处整理为简便,将所有应用到的方法都整理到了一起,实际开发中尽量将controller,service,mapper,工具类分开.此文章着重注意退款回调,其中应用了数据解密(作者一开始困扰在此处 ...
- java ssm框架调用微信_Java开发SSM框架微信退款的实现
这篇文章是Java微信退款的教程,退款之前用户需要先进行支付,支付之后才可以使用退款.做到退款的同学应该已经是完成了支付了,我写的退款和支付的流程很相似只是所需的参数有所不同. String outT ...
- Java实现微信的申请退款功能
一,问题 今天要将微信的最后一个功能给做完了,这个功能就是申请退款.刚开始我先看了一下文档,发现它跟那个企业付款到零钱特别相似,然后就自己模仿企业付款到零钱把它给实现了. 二,解决方法 申请退款官方文 ...
- java微信退款接口demo_微信公众平台开发(6) 微信退款接口
接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给 ...
- 售后退款的java代码_SpringBoot 微信退款功能的示例代码
一:微信支付证书配置 二:证书读取以及读取后的使用 package com.zhx.guides.assistant.config.wechatpay; import org.apache.commo ...
- 微信退款及退款通知结果 java
下面的评论有很多想看我的postSSL的源码,这里奉上 public static String postSSL(String url, String data, String certPath, S ...
最新文章
- Anaconda 环境下 R 包 ggraph_1.0.2 安装小记
- 【php】php编译pcntl以支持多进程
- 使用Google、百度等搜索引擎完全匹配指定内容搜索
- android根据mac地址连接耳机,Android获取设备IMEI和Mac地址
- OpenCV学习笔记(一):Win10(x64)+Qt5.8(MSVC2013)+OpenCV3.1.0配置过程
- 字段定义_ArcGIS开发amp;gdb、shapefile创建与投影定义,字段创建
- python2还是3好_学Python2还是python3 究竟哪个好
- oracle 的用户是什么,User 用户 还是 Role 角色 - Oracle 的 Public 是什么?
- 华硕主板bios通电自启设置_求各种主板通电自动开启的设置?
- HTML显示波形,CSS3波形loading动画特效
- 衡量失败检测算法的指标
- (附源码)python 在线办公系统 毕业设计 071116
- html好看鼠标光标特效
- 2022年起重机司机(限桥式起重机)考试模拟100题及答案
- 在传统软件公司十年深恶痛绝的感受(转)
- php模拟IP请求,如何在php中利用curl对ip进行模拟
- 指定gpu训练模型却依然使用了cpu问题解决
- IO流_IO流小结图解
- 6 生僻字_又双叒叕,火炎焱燚......神曲《生僻字》原唱来了!
- python输入矩形的长和宽、输出矩形的面积_c语言,输入长方形的长和宽,计算长方形的周长和面积,并输出,输出结果保留2位小数...
热门文章
- linux——基本指令(2)
- 途乐证券|A股自动驾驶概念“夏日躁动”
- 展技术实力,筑元宇宙安全,零时科技成为首批湾区元宇宙联盟成员!
- Windows 10——远程桌面无法复制粘贴问题解决方案
- golang excel导出 style样式和所有流程
- HTTP 502问题总结
- matlab cic插值与抽取,CIC抽取滤波器和插值滤波器
- 有关苹果证书介绍(Certificates, Identifiers Profiles)
- Darwin-XNU 内核架构浅析
- 解决ValueError: not values to unpack (expected 2, got 1)