使用第三方类库支持微信退款

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 微信退款相关推荐

  1. 【java】微信退款结果通知解密

    整理了一份较为完整的java关于微信退款结果通知解密 (1)对加密串A做base64解码,得到加密串B (2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.w ...

  2. java实现微信退款

    微信退款之前需要在常量中配置退款地址,退款的地址必须是可以直接访问的.(之前的申请商户平台及在开放平台申请账号不在描述)在调起之前需要下载商户平台上的证书将其放在项目src下. 微信退款回调url : ...

  3. 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 ...

  4. weixin java tools_weixin-java-tools(微信开发工具包)

    weixin-java-tools是一款非常好用的微信开发工具包,SDK支持包括微信支付.微信开放平台.小程序.企业号/企业微信.公众号(包括服务号和订阅号)等的后端开发.有需要的朋友可以下载.. 相 ...

  5. 微信退款流程实现整理(java)

    前言 此处整理为简便,将所有应用到的方法都整理到了一起,实际开发中尽量将controller,service,mapper,工具类分开.此文章着重注意退款回调,其中应用了数据解密(作者一开始困扰在此处 ...

  6. java ssm框架调用微信_Java开发SSM框架微信退款的实现

    这篇文章是Java微信退款的教程,退款之前用户需要先进行支付,支付之后才可以使用退款.做到退款的同学应该已经是完成了支付了,我写的退款和支付的流程很相似只是所需的参数有所不同. String outT ...

  7. Java实现微信的申请退款功能

    一,问题 今天要将微信的最后一个功能给做完了,这个功能就是申请退款.刚开始我先看了一下文档,发现它跟那个企业付款到零钱特别相似,然后就自己模仿企业付款到零钱把它给实现了. 二,解决方法 申请退款官方文 ...

  8. java微信退款接口demo_微信公众平台开发(6) 微信退款接口

    接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给 ...

  9. 售后退款的java代码_SpringBoot 微信退款功能的示例代码

    一:微信支付证书配置 二:证书读取以及读取后的使用 package com.zhx.guides.assistant.config.wechatpay; import org.apache.commo ...

  10. 微信退款及退款通知结果 java

    下面的评论有很多想看我的postSSL的源码,这里奉上 public static String postSSL(String url, String data, String certPath, S ...

最新文章

  1. Anaconda 环境下 R 包 ggraph_1.0.2 安装小记
  2. 【php】php编译pcntl以支持多进程
  3. 使用Google、百度等搜索引擎完全匹配指定内容搜索
  4. android根据mac地址连接耳机,Android获取设备IMEI和Mac地址
  5. OpenCV学习笔记(一):Win10(x64)+Qt5.8(MSVC2013)+OpenCV3.1.0配置过程
  6. 字段定义_ArcGIS开发amp;gdb、shapefile创建与投影定义,字段创建
  7. python2还是3好_学Python2还是python3 究竟哪个好
  8. oracle 的用户是什么,User 用户 还是 Role 角色 - Oracle 的 Public 是什么?
  9. 华硕主板bios通电自启设置_求各种主板通电自动开启的设置?
  10. HTML显示波形,CSS3波形loading动画特效
  11. 衡量失败检测算法的指标
  12. (附源码)python 在线办公系统 毕业设计 071116
  13. html好看鼠标光标特效
  14. 2022年起重机司机(限桥式起重机)考试模拟100题及答案
  15. 在传统软件公司十年深恶痛绝的感受(转)
  16. php模拟IP请求,如何在php中利用curl对ip进行模拟
  17. 指定gpu训练模型却依然使用了cpu问题解决
  18. IO流_IO流小结图解
  19. 6 生僻字_又双叒叕,火炎焱燚......神曲《生僻字》原唱来了!
  20. python输入矩形的长和宽、输出矩形的面积_c语言,输入长方形的长和宽,计算长方形的周长和面积,并输出,输出结果保留2位小数...

热门文章

  1. linux——基本指令(2)
  2. 途乐证券|A股自动驾驶概念“夏日躁动”
  3. 展技术实力,筑元宇宙安全,零时科技成为首批湾区元宇宙联盟成员!
  4. Windows 10——远程桌面无法复制粘贴问题解决方案
  5. golang excel导出 style样式和所有流程
  6. HTTP 502问题总结
  7. matlab cic插值与抽取,CIC抽取滤波器和插值滤波器
  8. 有关苹果证书介绍(Certificates, Identifiers Profiles)
  9. Darwin-XNU 内核架构浅析
  10. 解决ValueError: not values to unpack (expected 2, got 1)