您的位置:首页 > 编程语言 > Java开发

java对接支付宝(四)-即时到账无秘退款

2018-01-25 16:35 357 查看
写在前面:看懂单笔交易关闭,首先得看完即时到账支付文章

1、即时到账退款接口

Controller层代码

/**
* @Description: 支付宝退款
* @author lc
* @param orderNo 订单号
* @param refundAmount 退款金额
* @param refundReason 退款原因
* @return
*/
@RequestMapping("/alipayTradeRefund")
public void alipayTradeRefund() {
try {
String orderNo = getString_UrlDecode_UTF8("orderNo");
String refundAmount = getString_UrlDecode_UTF8("refundAmount");
String refundReason = getString_UrlDecode_UTF8("refundReason");
String mId = getString_UrlDecode_UTF8("mId");
String refundType = getString_UrlDecode_UTF8("refundType");
String channel = getString_UrlDecode_UTF8("channel");
String source = getString_UrlDecode_UTF8("source");
orderNo = "1510795680802";
refundAmount = "0.1";
refundReason = "协商退款";
mId = "1";
String timestamp = DateUtil.format(new Date());

// 把请求参数打包成数组
Map<String, String> sParaTemp = new HashMap<String, String>();
sParaTemp.put("service", "refund_fastpay_by_platform_nopwd");
//    		sParaTemp.put("out_trade_no", orderNo);
sParaTemp.put("partner", AlipayConfigUtil.partner);
sParaTemp.put("_input_charset", AlipayConfigUtil.input_charset);
sParaTemp.put("notify_url", AlipayConfigUtil.refund_notify_url);// 异步通知地址
sParaTemp.put("dback_notify_url", AlipayConfigUtil.dback_notify_url);// 充值通知地址
sParaTemp.put("refund_date", timestamp);//退款请求时间
sParaTemp.put("refund_reason", refundReason);//退款原因
//              sParaTemp.put("trade_no", trade_no);
//退款批次号:回调的时候根据此字段修改退款申请的状态
sParaTemp.put("batch_no",DateUtil.currentTime());
sParaTemp.put("batch_num", "1");//退款总笔数
// 支付宝交易号 ^金额 ^协商退款
String detail_data = "2018012521001004290271183144" + "^" + refundAmount + "^" + refundReason;
sParaTemp.put("detail_data", detail_data);//单笔数据集
// 建立请求
String sHtmlText = AlipaySubmit.buildRequest("", "", sParaTemp);
System.out.println(sHtmlText);
} catch (Exception e) {
 logger.error("alipayTradeRefund:支付宝退款异常!" + e.getMessage());
e.printStackTrace();
}
}


2、退款返回参数说明

   T:查询成功

   F:查询失败

   p:处理中

3、异步通知

/** pc支付宝和微信退款异步通知
* @param payWayCode
* @param httpServletRequest
* @param httpServletResponse
* @throws Exception
*/
@RequestMapping("/refundNotify/{payWayCode}")
public void refundNotify(@PathVariable("payWayCode")String payWayCode , HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse) throws Exception {
String encoding ="";
Map<String , String> notifyMap = new HashMap<String , String >();
Map<String, String[]> requestParams = httpServletRequest.getParameterMap();
notifyMap = this.parseNotifyMsg(requestParams);
String str = "fail";
// 签名
if(AlipayNotify.verify(resultMap) {
logger.debug("支付宝签名成功返回结果:" + resultMap);
// 异步通知业务操作

// 回馈信息
str = "success";
}else {
logger.debug("签名失败返回结果:" + notifyMap);
}
httpServletResponse.getWriter().print(str);
}
/**
* @Description: 解析支付宝发来的请求
* @author lc
* @param requestParams
* @param
*/
public static Map<String , String> parseNotifyMsg(Map<String, String[]> requestParams){
Map<String,String> params = new HashMap<String,String>();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";
}
params.put(name, valueStr);
}
return params;
}
注意:太懒了,没有写请求jsp,直接在请求地址写Controller层地址查询了。

吊袜带
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: