微信退款和支付宝退款接口调用(java版)
项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意
1、微信退款接口
相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可;
/**
*
* @方法名称:payRefund
* @内容摘要: <退款>
* @param transaction_id
* 微信支付订单号
* @param out_refund_no
* 商户订单号
* @param total_fee
* 总金额
* @param refund_fee
* 退款金额
* @param op_user_id
* 操作人
* @return String
* @exception
* @author:鹿伟伟
* @创建日期:2016年4月11日-上午11:07:04
*/
public String wxPayRefundRequest(String transaction_id, String out_refund_no,
int total_fee, int refund_fee, String op_user_id) {
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;
String strResponse = null;
try {
httpclient = ClientCustomSSL.getCloseableHttpClient();
// 构造HTTP请求
HttpPost httpPost = new HttpPost(Configure.PAY_REFUND_API);
// PayRefundReqData wxdata = new PayRefundReqData(
// "1004720096201602263541023415", "16371", 30, 30, "19417");
PayRefundReqData wxdata = new PayRefundReqData(transaction_id,
out_refund_no, total_fee, refund_fee, op_user_id);
String requestStr = Util.ConvertObj2Xml(wxdata);
StringEntity se = new StringEntity(requestStr.toString());
httpPost.setEntity(se);
// 发送请求
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
if (entity != null) {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(entity.getContent());
Element rootElt = document.getRootElement();
// 结果码
String returnCode = rootElt.elementText("return_code");
String resultCode = rootElt.elementText("result_code");
if ("SUCCESS".equals(returnCode)&&"SUCCESS".equals(resultCode)) {
strResponse=returnCode;
}else {
strResponse=rootElt.elementText("err_code_des");
}
}
EntityUtils.consume(entity);
} catch (Exception e) {
Logger.getLogger(getClass()).error("payRefundRequest", e);
} finally {
try {
response.close();
httpclient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
Logger.getLogger(getClass()).error("payRefundRequest关闭异常:", e);
}
}
return strResponse;
}
报错的话请检查加密的sign是否正确,还有就是调用的接口地址是否正确,有问题找我。
2、支付宝退款接口
支付宝直接导入支付宝封装好的jar包直接调用即可,官网下载地址:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
在弄支付宝退款的时候有一个插曲:就是支付宝调用时是客户端直接调用的,当时没有通过后台,后台只做了一个回调地址的使用,本来想着按照微信的思路写一个支付出来的,没想到怎么也调试不通,直接通过网址可以访问,在方法里面不行,后来只好使用支付宝的jar了。
调用方法:
/**
*
* @方法名称:alipayRefundRequest
* @内容摘要: <支付宝退款请求>
* @param out_trade_no 订单支付时传入的商户订单号,不能和 trade_no同时为空。
* @param trade_no 支付宝交易号,和商户订单号不能同时为空
* @param refund_amount 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
* @return
* String
* @exception
* @author:鹿伟伟
* @创建日期:2016年4月12日-下午4:53:30
*/
public String alipayRefundRequest(String out_trade_no,String trade_no,double refund_amount){
// 发送请求
String strResponse = null;
try {
AlipayClient alipayClient = new DefaultAlipayClient
(AlipayConfig.alipayurl,AlipayConfig.appid,
AlipayConfig.private_key,AlipayConfig.content_type,AlipayConfig.input_charset,AlipayConfig.ali_public_key);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
AlipayRefundInfo alidata= new AlipayRefundInfo();
alidata.setOut_trade_no(out_trade_no);
alidata.setRefund_amount(refund_amount);
alidata.setTrade_no(trade_no);
request.setBizContent(JsonUtils.convertToString(alidata));
AlipayTradeRefundResponse response = alipayClient.execute(request);
strResponse=response.getCode();
if ("10000".equals(response.getCode())) {
strResponse="退款成功";
}else {
strResponse=response.getSubMsg();
}
} catch (Exception e) {
Logger.getLogger(getClass()).error("alipayRefundRequest", e);
}
return strResponse;
}
不管怎么滴吧,搞定了,还有一个疑问就是官网上文档里面也没有具体说返回的状态码code的含义,网上找了一遍也没有找到,哪位大神知道的话发我一份。小弟在此谢过了。
微信下单接口
支付宝错误码:
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.Z87Tfg&treeId=58&articleId=103599&docType=1
微信退款和支付宝退款接口调用(java版)的更多相关文章
- 【转载】关于Alipay支付宝接口(Java版)
转载自:http://blog.163.com/lai_chao/blog/static/70340789201412724619514/ 1.alipay 双功能支付简介 2.alipay 提交支付 ...
- 模板短信接口调用java,pythoy版(二) 阿里大于
说明 功能:短信通知发送 + 短信发送记录查询,所有参数我没有改动,实测有效! 请自行参考 + 官方API! 短信模板示例:尊敬的${name},您的快递已在飞奔的路上,将在今天${time}送达您的 ...
- 模板短信接口调用java,pythoy版(一) 网易云信
说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...
- 关于Alipay支付宝接口(Java版)
支付宝开发文档:https://b.alipay.com/order/techService.htm 1.alipay 双功能支付简介 2.alipay 提交支付订单 3.alipay 整合双功能支付 ...
- 微信公众号对接JS-SDK接口 调用微信内置地图
微信js-sdk开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 1.页面配置 引用微信js- ...
- 微信小程序如何把接口调用成功的回调函数返回的参数return出去?(promise就可以解决)
举个栗子//获取应用实例 //const app = getApp() //const util = require('../../utils/util.js') //const sign = uti ...
- 微信公众号支付开发全过程(Java 版)
一.微信官方文档微信支付开发流程(公众号支付) 首先我们到微信支付的官方文档的开发步骤部分查看一下需要的设置. [图片上传失败...(image-5eb825-1531014079742)] 因为微信 ...
- ZEROC ICE 跨平台间程序调用 java版
前言: 本来建博客是为了和大家分享一些前端的开发经验和心得呢,但是阴差阳错,第一篇技术博客确实关于跨平台,跨语言服务端调用的解决方案---ZEROC ICE. 最近一个项目涉及到java.python ...
- 最详细的 paypal 支付接口开发--Java版
做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台.买家只需知道你的paypal账号,即可在 ...
随机推荐
- JAVAWeb SSH框架 上传文件,如2007的EXCEL
下面的代码是上传EXCEL的代码,其实,就是在上传文件到服务器,代码都差不多,只是接收的文件的类型改一下即可. 1.jsp 用的是struts2 标签 代码: <s:file name=&quo ...
- 第七篇 elasticsearch 链接mysql不会更新
这是我键的索引 "settings":{ "number_of_shards":3, "number_of_replicas":2 }, & ...
- Jmeter进行简单mysql数据库测试
1.环境准备: mysql: mysql-5.7.17.msi jdbc驱动: 自己百度一下即可 Jmeter: 3.2 2.打开Jmeter,创建测试计划, 点击浏览,添加jdbc驱动 3.添 ...
- hdu1051
#include<iostream> #include<algorithm> using namespace std; struct SIZE { int l; int w; ...
- netty对http协议解析原理解析(转载)
本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述 标示 ...
- .Net Core WebApi返回日期格式的问题
环境:.net core 2.1 webapi 问题简介: 返回DateTime,前端接收到的字符有时候为2018-01-01T12:01:01,有时候为2018-01-01T01:01:01.722 ...
- Linux ubi子系统原理分析
本文思维导图总纲: 综述 关于ubi子系统,早已有比较正式的介绍,也提供非常形象的介绍ubi子系统ppt 国内的前辈 alloysystem 不辞辛劳为我们提供了部分正式介绍的中文译文,以及找不到原文 ...
- Codeforces - 102222A - Maximum Element In A Stack - 模拟
https://codeforc.es/gym/102222/problem/F 注意到其实用unsigned long long不会溢出. #include<bits/stdc++.h> ...
- HBase HA + Hadoop HA 搭建
HBase 使用的是 1.2.9 的版本. Hadoop HA 的搭建见我的另外一篇:Hadoop 2.7.3 HA 搭建及遇到的一些问题 以下目录均为 HBase 解压后的目录. 1. 修改 co ...
- 2017-10-13 NOIP模拟赛
入阵曲 #include<iostream> #include<cstdio> #define maxn 401 #ifdef WIN32 #define PLL " ...