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);以下写自己的订单退款代码 }
退款可按照订单号或者支付宝订单号进行退款,博主采用的是按订单号退款。
结语
以上是沙箱接入的简要步骤,希望能帮到其他人。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。