本demo基于微信扫码支付退款(扫码支付暂时没放出demo下次有时间补上)

由于只是demo很多东西没有进行封装

需注意这两个参数我使用的是out_trade_no

image.png

请求XML示例

wx2421b1c4370ec43b

10000100

6cefdb308e1e2e8aabd48cf79e546a02

1415701182

1415757673

1

1

FE56DD4AA85C0EECA82C35595A69E153

逻辑代码

public static void main(String[] args) {

try {

//构建参数

Map dataMap = new HashMap<>();

dataMap.put("appid","wx#################");

dataMap.put("mch_id","137#############");

//自行实现该随机串

dataMap.put("nonce_str",Core.MD5("12344"));

dataMap.put("out_trade_no","P190808170038402889c5318502");

dataMap.put("out_refund_no","P190808170038402889c5318502");

dataMap.put("total_fee","1");

dataMap.put("refund_fee","1");

dataMap.put("refund_desc","退款");

//生成签名

String sign = WXPayUtil.generateSignature(dataMap, "rv4###################");

dataMap.put("sign", sign);

//map数据转xml

String xmlString = XMLBeanUtil.map2XmlString(dataMap);

//发起退款

doRefund("137####", "https://api.mch.weixin.qq.com/secapi/pay/refund", xmlString);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

*

* @param mchId 商户ID

* @param url 请求URL

* @param data 退款参数

* @return

* @throws Exception

*/

public static String doRefund(String mchId, String url, String data) throws Exception {

/**

* 注意PKCS12证书 是从微信商户平台-》账户设置-》 API安全 中下载的

*/

KeyStore keyStore = KeyStore.getInstance("PKCS12");

//这里自行实现我是使用数据库配置将证书上传到了服务器可以使用 FileInputStream读取本地文件

ByteArrayInputStream inputStream = FileUtil.getInputStream("https://############################.p12");

try {

//这里写密码..默认是你的MCHID

keyStore.load(inputStream, mchId.toCharArray());

} finally {

inputStream.close();

}

SSLContext sslcontext = SSLContexts.custom()

//这里也是写密码的

.loadKeyMaterial(keyStore, mchId.toCharArray())

.build();

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(

sslcontext,

SSLConnectionSocketFactory.getDefaultHostnameVerifier());

CloseableHttpClient httpclient = HttpClients.custom()

.setSSLSocketFactory(sslsf)

.build();

try {

HttpPost httpost = new HttpPost(url);

httpost.setEntity(new StringEntity(data, "UTF-8"));

CloseableHttpResponse response = httpclient.execute(httpost);

try {

HttpEntity entity = response.getEntity();

//接受到返回信息

String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");

EntityUtils.consume(entity);

return jsonStr;

} finally {

response.close();

}

} finally {

httpclient.close();

}

}

微信签名工具类

/**

* 生成签名

* @param data 待签名数据

* @param key API密钥

* @return 签名

*/

public static String generateSignature(final Map data, String key) throws Exception {

return generateSignature(data, key, SignType.MD5);

}

/**

* 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。

* @param data 待签名数据

* @param key API密钥

* @param signType 签名方式

* @return 签名

*/

public static String generateSignature(final Map data, String key, SignType signType) throws Exception {

Set keySet = data.keySet();

String[] keyArray = keySet.toArray(new String[keySet.size()]);

Arrays.sort(keyArray);

StringBuilder sb = new StringBuilder();

for (String k : keyArray) {

if (k.equals(WXPayConstants.FIELD_SIGN)) {

continue;

}

if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名

sb.append(k).append("=").append(data.get(k).trim()).append("&");

}

sb.append("key=").append(key);

if (SignType.MD5.equals(signType)) {

return MD5(sb.toString()).toUpperCase();

}

else if (SignType.HMACSHA256.equals(signType)) {

return HMACSHA256(sb.toString(), key);

}

else {

throw new Exception(String.format("Invalid sign_type: %s", signType));

}

}

map转XML工具类

public static String map2XmlString(Map map) {

String xmlResult = "";

StringBuffer sb = new StringBuffer();

sb.append("");

for (String key : map.keySet()) {

String value = "";

sb.append("" + value + "" + key + ">");

System.out.println();

}

sb.append("");

xmlResult = sb.toString();

return xmlResult;

}

退款java_微信支付-退款操作(JAVA版)相关推荐

  1. java 微信转账 ca_error_java,微信支付退款_微信支付退款接口调用证书出现错误,java,微信支付退款,ssl - phpStudy...

    微信支付退款接口调用证书出现错误 PS:代码是copy腾讯提供的demo,但运行有问题,望大拿能够帮忙解决 加载证书时间出现如下错误: java.io.IOException: DER input, ...

  2. 微信批量退款php,微信支付退款接口详解

    微信支付有2个退款相关的接口,分别是申请退款API和查询退款API,这2个接口在实际微信支付开发中都会用到.其中申请退款API因为安全性,需要使用证书,证书在商户平台后台下载. 申请退款接口支持一年以 ...

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

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

  4. 微信小程序开发实战11_4 微信支付退款流程

    当交易发生之后一年内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付金额退还给买家,微信支付将收到退款请求并且验证成功之后,将支付款按原路退还至买家账号上.使用该接口时的一些注意事项如下 ...

  5. Java 微信小程序笔记 二、 微信支付退款案例

    一.前期准备工作: 上篇博客配置的一些参数和文件Jar包 都要用到 微信支付需要小程序和商户绑定 APP绑定微信商户平台获取商户id(mchID). 证书(商户后台下载). 支付签名密钥(商户后台设置 ...

  6. java 微信退款配置_微信支付退款配置

    微信支付退款配置 1.微信支付配置 第一步,登录商城后台,设置->交易设置->支付配置 ,选择微信支付,点击配置进入到微信支付参数配置界面. 从应用ID和应用密钥下面的提示可以看出,微信支 ...

  7. 微信接口java解密_java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式...

    1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 org.bouncycastle bcprov-jdk15on 1. ...

  8. java 中实现微信支付退款功能案例

    微信支付功能做了太多,今天又做了支付.退款.查询.提现等等,顺便把支付和退款代码贴出来,希望对初学者有点帮助. 首先调用微信支付退款 API 地址 https://pay.weixin.qq.com/ ...

  9. 微信支付退款 java_Java后台实现微信支付和微信退款

    微信支付流程 都是我自己工作中开发的,亲测可用,不喜勿喷. controller中我是这么写的,你们需要根据自己的业务需求改动.ResponseBean是我自己封装的,你们可以改成你们想要的形式. / ...

最新文章

  1. 4.MySQL连接并选择数据库(SQL C)
  2. 7篇Nature,2篇Science!这所985高校迎来顶刊大丰收
  3. angular——更多按钮的上拉菜单(路由跳转)
  4. golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...
  5. spring jpa 流式_从响应式Spring Data存储库流式传输实时更新
  6. Android深入源代码分析理解Aidl总体调用流程(雷惊风)
  7. 的称重在哪里_如何申请条形码,条形码在哪里申请办理
  8. 8个前端技术学习网站
  9. PMBOK(第六版) PMP笔记——《六》第六章(项目进度管理)
  10. 华硕aura完全卸载_GeForce RTX元气满满萌娘来袭 华硕天选游戏本开箱评测
  11. Android平台Camera实时滤镜实现方法探讨(八)--滤镜基本制作方法(二)简单美颜滤镜...
  12. Multi-Task 多任务学习, 那些你不知道的事
  13. Integer和String必问知识点,面试字节跳动Java工程师该怎么准备
  14. 知网caj转pdf格式的方法
  15. HCNP——DR和BDR的概念
  16. 在计算机领域,美国信息交换标准代码的缩写符号是.,计算机基础在线作业.docx...
  17. 七、傻妞对接公众号教程
  18. 论文笔记:Revisiting Temporal Modeling for Video Super-resolution(重新审视视频超分辨率的时间建模) Part1 系咁嘅啦
  19. 调试数字音量等级的方法
  20. 几年前之所预言,其人不死言之依然

热门文章

  1. 黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具...
  2. 固态硬盘掉电保护测试原理及要点
  3. ObjectARX-给cad实体贴图
  4. 流量生意新玩法:线下抓流量、线上去消费
  5. 2018,Lucky year,Challenging year!
  6. 联想计算机怎么进pe,联想进pe按哪个键
  7. 基于Quick-cocos2d-x的资源更新方案
  8. 自己做量化交易软件(24)小白量化增强仿通达信财务基本数据公式
  9. Redis集群的主从切换研究
  10. 【前端小点】ElementUI-Dialog标题添加图标