项目中需要使用到微信和支付宝的退款功能,在这两天研究了一下这两个平台的退款,有很多坑,在开发中需要留意

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版)的更多相关文章

  1. 【转载】关于Alipay支付宝接口(Java版)

    转载自:http://blog.163.com/lai_chao/blog/static/70340789201412724619514/ 1.alipay 双功能支付简介 2.alipay 提交支付 ...

  2. 模板短信接口调用java,pythoy版(二) 阿里大于

    说明 功能:短信通知发送 + 短信发送记录查询,所有参数我没有改动,实测有效! 请自行参考 + 官方API! 短信模板示例:尊敬的${name},您的快递已在飞奔的路上,将在今天${time}送达您的 ...

  3. 模板短信接口调用java,pythoy版(一) 网易云信

    说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...

  4. 关于Alipay支付宝接口(Java版)

    支付宝开发文档:https://b.alipay.com/order/techService.htm 1.alipay 双功能支付简介 2.alipay 提交支付订单 3.alipay 整合双功能支付 ...

  5. 微信公众号对接JS-SDK接口 调用微信内置地图

    微信js-sdk开发文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 1.页面配置 引用微信js- ...

  6. 微信小程序如何把接口调用成功的回调函数返回的参数return出去?(promise就可以解决)

    举个栗子//获取应用实例 //const app = getApp() //const util = require('../../utils/util.js') //const sign = uti ...

  7. 微信公众号支付开发全过程(Java 版)

    一.微信官方文档微信支付开发流程(公众号支付) 首先我们到微信支付的官方文档的开发步骤部分查看一下需要的设置. [图片上传失败...(image-5eb825-1531014079742)] 因为微信 ...

  8. ZEROC ICE 跨平台间程序调用 java版

    前言: 本来建博客是为了和大家分享一些前端的开发经验和心得呢,但是阴差阳错,第一篇技术博客确实关于跨平台,跨语言服务端调用的解决方案---ZEROC ICE. 最近一个项目涉及到java.python ...

  9. 最详细的 paypal 支付接口开发--Java版

    做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台.买家只需知道你的paypal账号,即可在 ...

随机推荐

  1. 修改sharepoint列表样式

    1.将sharepoint 的样式修改为阴影 2.用designer打开列表的AllItems.aspx文件,将下面的样式拷贝到里面     <style type="text/css ...

  2. Ajax前端调后台方法

    后台对当前页面类进行注册 Ajax.Utility.RegisterTypeForAjax(typeof(Login));//Login 当前类名 在方法上面加 [Ajax.AjaxMethod(Aj ...

  3. idea崩溃导致的svn插件丢失问题, maven dependencies视图丢失问题

    Idea丢失Svn解决办法 今天打开Idea,习惯用ctrl+t来更新svn,杯具出现了,快捷键失效了,我觉得可能是其他的什么软件占用了这个快捷键,于是重启了一下,发现还是不行,svn信息怎么没了,c ...

  4. [matlab]机器学习及SVM工具箱学习笔记

    机器学习与神经网络的关系: 机器学习是目的,神经网络是算法.神经网络是实现机器学习的一种方法,平行于SVM. 常用的两种工具:svm tool.libsvm SVM分为SVC和SVR,svc是专门用来 ...

  5. ubuntu上runsv/runit小记

    一个偶然的原因,在研究git使用时,发现有个自动启动的git-daemon进程: wellbye@AY130622174524343529Z:~$ ps aux|grep git root ? Ss ...

  6. Java堆分析

  7. sklearn正规化(Normalization或者scale)

    from sklearn import preprocessing import numpy as np a = np.array([[10,2.7,3.6],[-100,5,-2],[120,20, ...

  8. Hibernate存储date/datetime问题,解决java的date与mysql的datetime不兼容

    主要原因是出在Hibernate的配置文件中. 症状 1. java文件类型java.util.Date,数据库类型datetime,Hibernate配置文件用date,存储进数据库的时间只有年月日 ...

  9. 在Ionic Framework 退出APP

    使用以下代码: ionic.Platform.exitApp(); 在控制器中增加: $scope.Quit = function(){ ionic.Platform.exitApp(); }

  10. 又见GCD (HDU 2504)

    这个题真的很水,但我竟然连错,在此警醒自己!!! 写代码改了东边,忘了西边,“认真”这两个字又被我吃了,打脸啪啪啪啪. #include<iostream> using namespace ...