退款java_微信支付-退款操作(JAVA版)
本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版)相关推荐
- java 微信转账 ca_error_java,微信支付退款_微信支付退款接口调用证书出现错误,java,微信支付退款,ssl - phpStudy...
微信支付退款接口调用证书出现错误 PS:代码是copy腾讯提供的demo,但运行有问题,望大拿能够帮忙解决 加载证书时间出现如下错误: java.io.IOException: DER input, ...
- 微信批量退款php,微信支付退款接口详解
微信支付有2个退款相关的接口,分别是申请退款API和查询退款API,这2个接口在实际微信支付开发中都会用到.其中申请退款API因为安全性,需要使用证书,证书在商户平台后台下载. 申请退款接口支持一年以 ...
- java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)
我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...
- 微信小程序开发实战11_4 微信支付退款流程
当交易发生之后一年内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付金额退还给买家,微信支付将收到退款请求并且验证成功之后,将支付款按原路退还至买家账号上.使用该接口时的一些注意事项如下 ...
- Java 微信小程序笔记 二、 微信支付退款案例
一.前期准备工作: 上篇博客配置的一些参数和文件Jar包 都要用到 微信支付需要小程序和商户绑定 APP绑定微信商户平台获取商户id(mchID). 证书(商户后台下载). 支付签名密钥(商户后台设置 ...
- java 微信退款配置_微信支付退款配置
微信支付退款配置 1.微信支付配置 第一步,登录商城后台,设置->交易设置->支付配置 ,选择微信支付,点击配置进入到微信支付参数配置界面. 从应用ID和应用密钥下面的提示可以看出,微信支 ...
- 微信接口java解密_java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式...
1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 org.bouncycastle bcprov-jdk15on 1. ...
- java 中实现微信支付退款功能案例
微信支付功能做了太多,今天又做了支付.退款.查询.提现等等,顺便把支付和退款代码贴出来,希望对初学者有点帮助. 首先调用微信支付退款 API 地址 https://pay.weixin.qq.com/ ...
- 微信支付退款 java_Java后台实现微信支付和微信退款
微信支付流程 都是我自己工作中开发的,亲测可用,不喜勿喷. controller中我是这么写的,你们需要根据自己的业务需求改动.ResponseBean是我自己封装的,你们可以改成你们想要的形式. / ...
最新文章
- 4.MySQL连接并选择数据库(SQL C)
- 7篇Nature,2篇Science!这所985高校迎来顶刊大丰收
- angular——更多按钮的上拉菜单(路由跳转)
- golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...
- spring jpa 流式_从响应式Spring Data存储库流式传输实时更新
- Android深入源代码分析理解Aidl总体调用流程(雷惊风)
- 的称重在哪里_如何申请条形码,条形码在哪里申请办理
- 8个前端技术学习网站
- PMBOK(第六版) PMP笔记——《六》第六章(项目进度管理)
- 华硕aura完全卸载_GeForce RTX元气满满萌娘来袭 华硕天选游戏本开箱评测
- Android平台Camera实时滤镜实现方法探讨(八)--滤镜基本制作方法(二)简单美颜滤镜...
- Multi-Task 多任务学习, 那些你不知道的事
- Integer和String必问知识点,面试字节跳动Java工程师该怎么准备
- 知网caj转pdf格式的方法
- HCNP——DR和BDR的概念
- 在计算机领域,美国信息交换标准代码的缩写符号是.,计算机基础在线作业.docx...
- 七、傻妞对接公众号教程
- 论文笔记:Revisiting Temporal Modeling for Video Super-resolution(重新审视视频超分辨率的时间建模) Part1 系咁嘅啦
- 调试数字音量等级的方法
- 几年前之所预言,其人不死言之依然