SpringBoot集成支付宝沙箱支付(支付、退款)

时间:2021-05-20

前言

支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到Spring Boot项目呢,其实很简单

简单配置请参照支付宝沙箱支付开发文档

一、支付部分

AlipayConfig配置:我使用的是页面跳转同步通知,返回路径return_url为公网访问地址,也可以使用localhost,且不能携带参数,APPID、商户私钥、支付宝公钥和支付宝网关换为自己的。

public class AlipayConfig{ // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 public static String app_id = "2016091600523365"; // 商户私钥,您的PKCS8格式RSA2私钥 public static String merchant_private_key = "商户私钥"; // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 public static String alipay_public_key = "支付宝公钥"; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String notify_url = "http://工程公网访问地址"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String return_url = "http://工程公网访问地址"; // 签名方式 public static String sign_type = "RSA2"; // 字符编码格式 public static String charset = "utf-8"; // 支付宝网关 public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do"; // 支付宝网关 public static String log_path = "C:\\"; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ /** * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) * @param sWord 要写入日志里的文本内容 */ public static void logResult(String sWord) { FileWriter writer = null; try { writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt"); writer.write(sWord); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }}

支付请求接口:

@RequestMapping("ali") public void ali(HttpServletResponse response, HttpServletRequest request) throws IOException, AlipayApiException { ordersService.ali(response,request); }

ServiceImpl层:

@Overridepublic void ali(HttpServletResponse response, HttpServletRequest request) throws AlipayApiException, IOException{ //设置编码 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest(); aliPayRequest.setReturnUrl(AlipayConfig.return_url); aliPayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,后台可以写一个工具类生成一个订单号,必填 String order_number = new String(订单号); //付款金额,从前台获取,必填 String total_amount = new String(付款金额); //订单名称,必填 String subject = new String("支付宝沙箱支付(名称随便起)"); aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 String result = alipayClient.pageExecute(aliPayRequest).getBody(); //输出 out.println(result);//以下写自己的订单代码}

其中:

PrintWriter out = response.getWriter();out.println(result);

是将支付宝请求输出在页面上。

二、退款

ServiceImpl层:

//退款@Overridepublic void refund(HttpServletResponse response,HttpSession session) throws IOException, AlipayApiException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //设置请求参数 AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest(); //商户订单号,必填 String out_trade_no = new String(订单号); //需要退款的金额,该金额不能大于订单金额,必填 String refund_amount = new String(退款金额); //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传 String out_request_no = new String(UUID.randomUUID().toString()); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"refund_amount\":\""+ refund_amount +"\"," + "\"out_request_no\":\""+ out_request_no +"\"}"); //请求 String result = alipayClient.execute(alipayRequest).getBody(); //输出 out.println(result);以下写自己的订单退款代码}

退款可按照订单号或者支付宝订单号进行退款,博主采用的是按订单号退款。

结语

以上是沙箱接入的简要步骤,希望能帮到其他人。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章