Java调用支付宝支付接口
2、点击确认支付后Java调用支付宝支付接口,通过ajax请求后台,返回的html代码直接放在上面网上支付英语,自动提交表单。
[javascript] 查看纯副本
$(函数(){
$("#sbumitBtn").on('点击', function(){
$.ajax({
类型:“发布”,
数据:{
WIDout_trade_no : $('#out_trade_no').val(),
WIDsubject : $('#WIDsubject').val(),
WIDtotal_fee : $('#WIDtotal_fee').val(),
WIDbody : $('#WIDbody').val()
},
网址:“${ctx}/aliPay/open”,
成功:函数(数据){
$('#returnAli').append(data.sHtmlText);
},
错误:函数(da){
}
});
})
});
3、在后台控制器中网上支付英语,基本是直接使用demo中的alipayapi.jsp。不同的是,参数传递是自己定义的,返回方式符合apringmvc的要求网上支付英语,根据业务需求订单信息保存状态未付。
[javascript] 查看纯副本
@RequestMapping("打开")
public ResponseEntity open(Model model, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee,
字符串 WIDbody) {
///////////////////////////请求参数///////////// /////////////////////
//商户订单号,商户网站订单系统中唯一的订单号,必填
字符串 out_trade_no = WIDout_trade_no;
//订单名称,必填
字符串主题 = WIDsubject;
//付款金额,必填
字符串total_fee = WIDtotal_fee;
//产品描述,可以为空
字符串体 = WIDbody;
// 将请求参数打包成一个数组
Map sParaTemp = new HashMap();
sParaTemp.put("service", AlipayConfig.service);
sParaTemp.put("partner", AlipayConfig.partner);
sParaTemp.put("seller_id", AlipayConfig.seller_id);
sParaTemp.put("_input_charset", AlipayConfig.input_charset);
sParaTemp.put("payment_type", AlipayConfig.payment_type);
sParaTemp.put("notify_url", AlipayConfig.notify_url);
sParaTemp.put("return_url", AlipayConfig.return_url);
sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);
sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);
sParaTemp.put("out_trade_no", out_trade_no);
sParaTemp.put("主题", 主题);
sParaTemp.put("total_fee", total_fee);
sParaTemp.put("body", body);
//其他业务参数根据在线开发文档添加。文件地址:
// 如sParaTemp.put("参数名称", "参数值");
//创建请求
String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get", "Confirm");
model.addAttribute("sHtmlText", sHtmlText);
//保存支付记录
hysWebMeetingAliService.insertSelective(sParaTemp);
return new ResponseEntity(model, HttpStatus.OK);
}
4、回调:DEMO中notify_url.jsp中的java代码也是直接修改,加上业务代码(修改状态等);
[javascript] 查看纯副本
@RequestMapping("通知")
@ResponseBody
公共字符串通知(HttpServletRequest 请求){
//获取支付宝POST来反馈信息
映射参数 = new HashMap();
映射 requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
字符串名称 = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//垃圾处理,出现乱码时使用此码。如果mysign和sign不相等,也可以使用这段代码进行转换
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
params.put(name, valueStr);
}
//获取支付宝的通知返回参数请参考技术文档中的页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号
String out_trade_no = request.getParameter("out_trade_no");
//支付宝交易号
String trade_no = request.getParameter("trade_no");
//交易状态
String trade_status = request.getParameter("trade_status");
//获取支付宝的通知返回参数请参考技术文档中的页面跳转同步通知参数列表(以上仅供参考)//
if(AlipayNotify.verify(params)){//验证成功
////////////////////////////////////// ////////////////////////////////////////p>
//请在此处添加商户的业务逻辑程序代码
//——请根据你的业务逻辑编写程序(以下代码仅供参考)——
布尔值 = false;
if(trade_status.equals("TRADE_FINISHED")){
//判断订单是否已在商家网站处理
//如果还没有处理,根据订单号(out_trade_no)在商户网站的订单系统中查看订单详情,执行商户的业务流程
//请确保请求时的total_fee和seller_id与通知时得到的total_fee和seller_id一致
//如果已经处理,则商户的业务程序将不被执行
//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统会发送交易状态通知
} else if (trade_status.equals("TRADE_SUCCESS")){
//判断订单是否已在商家网站处理
//如果还没有处理,根据订单号(out_trade_no)在商户网站的订单系统中查看订单详情,执行商户的业务流程
//请确保请求时的total_fee和seller_id与通知时得到的total_fee和seller_id一致
//如果已经处理网上支付英语,则商户的业务程序将不被执行
//注意:
//支付完成后,支付宝系统会发送交易状态通知
//将订单状态和支付宝记录表中的状态改为根据订单号支付
flg = hysWebMeetingAliService.changeOrderAndAliStatusSuccess(out_trade_no);
}
//——请根据你的业务逻辑编写程序(以上代码仅供参考)——
//out.print("成功"); //请勿修改或删除
如果(flg){
返回“成功”;
}其他{
返回“失败”;
}
////////////////////////////////////// ////////////////////////////////////////p>
}else{//身份验证失败
//out.print("失败");
返回“失败”;
}
}
5、return_url:页面跳转同步通知页面路径,是支付宝支付成功后跳转回来的页面。 “需要格式的全路径,不能添加?id=123等自定义参数,外网必须能正常访问。”支付宝明确规定在跳转页面后不能自定义任何自定义参数,所以我们有的基于一些类型。判断跳跃有点棘手。我这里做了个小技巧:先把return_url.jsp中的java代码直接搬过去,稍微修改一下(用springmvc代替),我的跳转地址是IP/aliPay/returnUrl,然后new ModelAndView("redirect:/meeting/ info") 重定向到我们想到的url,(参数问题见下文第四点)。
[javascript] 查看纯副本
@RequestMapping("returnUrl")
public ModelAndView returnUrl(HttpServletRequest request){
ModelAndView mv = new ModelAndView("redirect:/meeting/info");
本文由佚名发布,不代表阿卡索英语培训 - 英语一对一线上外教培训!立场,转载联系作者并注明出处:/fudao/974.html