java 微信申请退款的开发
一、接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
二、请求字段
三、注意事项
(1)需要证书:
(2)证书来源:
(3)证书获取
四、代码开发
/**
* 微信退款
* @throws Exception
*/
public static String refundFunction(Map<String, Object> map) throws Exception {
//这里的map主要有两个参数(商户号mchId和订单金额totalFee)
String result = "";//这里用于返回处理返回结果
//xml转换为map,这里用于方便自己后面取出打印结果
XmlToMap xmlToMap = new XmlToMap();
//这里是自己封装的一些配置文件,大家可以跳过这一步,下面用到这里会和大家说明
MyConfig config = null;
try {
//加载配置
config = new MyConfig();
} catch (Exception e) {
e.printStackTrace();
}
//获取商户订单号和订单金额
String mchId = map.get("mchId").toString();
//获取订单金额(退款金额默认全部)
//这里是自己做的一些格式的转换,有点笨拙,希望不影响大家的思路
String a = map.get("totalFee")+"";
String b = Double.valueOf(a) + "";
int lastindex = b.indexOf(".");
b = b.substring(0 , lastindex);
int c = Integer.parseInt(b);
// String d = c + "";
// System.out.println("refundMoney--------->"+refundMoney);
String totalFee = c + "";
//获取微信订单号
// String transactionId = map.get("transactionId").toString();
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appid", config.getAppID());//appid
parameters.put("mch_id", config.getMchID());//商户号
parameters.put("nonce_str", CreateNoncestr());//随机数
// parameters.put("transaction_id", transactionId);//微信支付单号
parameters.put("out_trade_no", mchId);//商户订单号
parameters.put("out_refund_no", CreateNoncestr());//我们自己设定的退款申请号,约束为UK
parameters.put("total_fee", totalFee) ;//订单金额 单位为分!!!这里稍微注意一下
parameters.put("refund_fee", totalFee);//退款金额 单位为分!!!
parameters.put("op_user_id", config.getMchID());//操作人员,默认为商户账号
String sign = createSign("utf-8", parameters);
System.out.println("sign---->"+sign);//签名
parameters.put("sign", sign);
//xml和map之间的转换
String reuqestXml = getRequestXml(parameters);
Map<String, Object> xmlMap = XmlToMap.xmlStr2Map(reuqestXml);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream instream = new FileInputStream(new File(config.certPath));//放商户证书的路径
try {
keyStore.load(instream, config.getMchID().toCharArray());//商户号
} finally {
instream.close();
}
//这里导包注意一下,可能会冲突
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, config.getMchID().toCharArray()).build();//商户号
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
new String[] { "TLSv1" },
null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
try {
HttpPost httpPost = new HttpPost(config.refund_url);//退款接口
System.out.println("executing request" + httpPost.getRequestLine());
StringEntity reqEntity = new StringEntity(reuqestXml);
// 设置类型
reqEntity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(reqEntity);
CloseableHttpResponse response = httpclient.execute(httpPost);
try {
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent(),"UTF-8"));
System.out.println("bufferedReader.readLine()--->"+bufferedReader.readLine());
String text;
//这里是自己做的输出结果,方便查看错误原因
while ((text = bufferedReader.readLine()) != null) {
System.out.println(text);
if(!text.startsWith("</xml>")) {
text = "<xml>"+text+"</xml>";
Map<String, Object> xmlResultMap = XmlToMap.xmlStr2Map(text);
if(xmlResultMap.get("result_code") != null) {
result = xmlResultMap.get("result_code")+"";
}
}
}
}
EntityUtils.consume(entity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
return result;
}
转载于:https://www.cnblogs.com/qqzhulu/p/10311189.html
java 微信申请退款的开发相关推荐
- java 微信申请退款,退款回调通知,解密,V2版
下载微信官方提供的SDK,转 https://blog.csdn.net/qq_40506288/article/details/110918650 博客查看下载流程 微信退款说明,官方提供:http ...
- php做一个微信退款,PHP实现微信申请退款流程实例代码
前面讲了怎么实现微信支付,详见博文:php实现微信支付(jsapi支付)流程 和ThinkPHP中实现微信支付(jsapi支付)流程.由于业务需求,还需要有微信退款,经过研究和摸索,也终于搞定了. ...
- php 微信支付退款接口开发,微信支付退款功能开发
第一次做微信的退款处理,特此标记一下 准备 appId 微信分配的公众账号ID(企业号corpid即为此appId) mch_id 微信支付分配的商户号 pay_secret 商户平台设置的秘钥:微信 ...
- java 微信转账 ca_error_java,微信支付退款_微信支付退款接口调用证书出现错误,java,微信支付退款,ssl - phpStudy...
微信支付退款接口调用证书出现错误 PS:代码是copy腾讯提供的demo,但运行有问题,望大拿能够帮忙解决 加载证书时间出现如下错误: java.io.IOException: DER input, ...
- 微信退款php参数格式错误,PHP实现微信申请退款功能
前期准备: 搞定微信支付,不然怎么退款,官方的demo. 当然网上可能也有很多大神自己重写和封装了demo,或许更加好用简洁,但是我还是不提倡用,安全考虑,涉及到支付涉及到金钱,必须要非常安全.官方S ...
- Java微信服务号的开发(简单入门)
进行微信服务号开发的步骤 一个别人已经搭建好的项目参考地址:下载链接 1.搭建微信服务号的服务器 项目配置maven <dependency><groupId>com.soec ...
- java微信公众号支付开发平台_Java微信公众平台开发之公众号支付(微信内H5调起支付)...
官方文档 准备工作:已通过微信认证的公众号,必须通过ICP备案域名(否则会报支付失败) 借鉴了很多大神的文章,在此先谢过了 整个支付流程,看懂就很好写了 一.设置支付目录 在微信公众平台设置您的公众号 ...
- JAVA微信公众号后台开发 接口接入
前期准备 注册一个公众号,完成认证,阅读开发手册,选取开发工具,配置环境等等. 微信公众号开发标准 通过阅读文档我们了解到微信服务器向开发者提供接口,具体的流程如下 由上图可以看出,开发者需要做的:接 ...
- java微信公众号支付开发平台_微信公众号支付demo,微信公众号支付Java DEMO
1.5.4微信验证的控制方法: /** * 微信验证 * 请填写接口配置信息,此信息需要你有自己的服务器资源,填写的URL需要正确响应微信发送的Token验证 * 验证服务器地址的有效性 * 开发者提 ...
最新文章
- 使用List中的remove方法遇到的坑,不信你没有踩过!
- Oracle Gateway使用分享
- sharepoint 不同路径下 COOKIE找不到
- Android开发中的控件--ProgressBar和ListView
- keras终止训练后显存不释放_Keras实现Large-scale Bisample Learning on ID vs. Spot Face Recognition...
- 深层神经网络中的前向传播
- 常微分方程I ODE的例子1 弹簧的振动、RLC电路与单摆
- 项目实战-linux下安装activeMQ
- 27.CSS3文本效果
- 剑指offer之二叉搜索树的第K个节点
- OnKeyPress事件和Javascript检测键盘输入
- 三层交换及DHCP中继配置
- Java 8 Stream
- Cortex-M3 (NXP LPC1788)之UART用法
- 智渔课堂官方免费教程二十六:Java基础教程之数组
- linpack性能测试记录
- mongoose 入门(四)使用aggregate 聚合管道、使用 populate 实现关联查询
- 设置typora标题、目录、大纲自动编号
- 2022年终总结与展望
- 如何解决Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]