SpringBoot集成支付宝沙箱支付(支付、退款)
前言
支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到SpringBoot项目呢,其实很简单
简单配置请参照支付宝沙箱支付开发文档
一、支付部分
AlipayConfig配置:我使用的是页面跳转同步通知,返回路径return_url为公网访问地址,也可以使用localhost,且不能携带参数,APPID、商户私钥、支付宝公钥和支付宝网关换为自己的。
publicclassAlipayConfig{
//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
publicstaticStringapp_id="2016091600523365";
//商户私钥,您的PKCS8格式RSA2私钥
publicstaticStringmerchant_private_key="商户私钥";
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm对应APPID下的支付宝公钥。
publicstaticStringalipay_public_key="支付宝公钥";
//服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
publicstaticStringnotify_url="http://工程公网访问地址";
//页面跳转同步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
publicstaticStringreturn_url="http://工程公网访问地址";
//签名方式
publicstaticStringsign_type="RSA2";
//字符编码格式
publicstaticStringcharset="utf-8";
//支付宝网关
publicstaticStringgatewayUrl="https://openapi.alipaydev.com/gateway.do";
//支付宝网关
publicstaticStringlog_path="C:\\";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
/**
*写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
*@paramsWord要写入日志里的文本内容
*/
publicstaticvoidlogResult(StringsWord){
FileWriterwriter=null;
try{
writer=newFileWriter(log_path+"alipay_log_"+System.currentTimeMillis()+".txt");
writer.write(sWord);
}catch(Exceptione){
e.printStackTrace();
}finally{
if(writer!=null){
try{
writer.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
支付请求接口:
@RequestMapping("ali")
publicvoidali(HttpServletResponseresponse,HttpServletRequestrequest)throwsIOException,AlipayApiException{
ordersService.ali(response,request);
}
ServiceImpl层:
@Override
publicvoidali(HttpServletResponseresponse,HttpServletRequestrequest)throwsAlipayApiException,IOException{
//设置编码
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();
//获得初始化的AlipayClient
AlipayClientalipayClient=newDefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset,AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequestaliPayRequest=newAlipayTradePagePayRequest();
aliPayRequest.setReturnUrl(AlipayConfig.return_url);
aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商户订单号,后台可以写一个工具类生成一个订单号,必填
Stringorder_number=newString(订单号);
//付款金额,从前台获取,必填
Stringtotal_amount=newString(付款金额);
//订单名称,必填
Stringsubject=newString("支付宝沙箱支付(名称随便起)");
aliPayRequest.setBizContent("{\"out_trade_no\":\""+order_number+"\","
+"\"total_amount\":\""+total_amount+"\","
+"\"subject\":\""+subject+"\","
+"\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
Stringresult=alipayClient.pageExecute(aliPayRequest).getBody();
//输出
out.println(result);//以下写自己的订单代码
}
其中:
PrintWriterout=response.getWriter(); out.println(result);
是将支付宝请求输出在页面上。
二、退款
ServiceImpl层:
//退款
@Override
publicvoidrefund(HttpServletResponseresponse,HttpSessionsession)throwsIOException,AlipayApiException{
response.setContentType("text/html;charset=utf-8");
PrintWriterout=response.getWriter();
//获得初始化的AlipayClient
AlipayClientalipayClient=newDefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset,AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
//设置请求参数
AlipayTradeRefundRequestalipayRequest=newAlipayTradeRefundRequest();
//商户订单号,必填
Stringout_trade_no=newString(订单号);
//需要退款的金额,该金额不能大于订单金额,必填
Stringrefund_amount=newString(退款金额);
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
Stringout_request_no=newString(UUID.randomUUID().toString());
alipayRequest.setBizContent("{\"out_trade_no\":\""+out_trade_no+"\","
+"\"refund_amount\":\""+refund_amount+"\","
+"\"out_request_no\":\""+out_request_no+"\"}");
//请求
Stringresult=alipayClient.execute(alipayRequest).getBody();
//输出
out.println(result);以下写自己的订单退款代码
}
退款可按照订单号或者支付宝订单号进行退款,博主采用的是按订单号退款。
结语
以上是沙箱接入的简要步骤,希望能帮到其他人。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。