- 复制这段代码,然后粘贴到本地项目的Handler方法处
- 在pom.xml文件中导入依赖。
-
<!--支付宝支付接口需要导入的依赖--> <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.9.124.ALL</version> </dependency>
- 修改页面的接口
- 复制AlipayConfig.java的代码
- 然后在对应的代码中导入包即可。
-
package com.bookstore.utils; import java.io.FileWriter; import java.io.IOException; /** * @version 1.0 * @Author:sly * @Date:2020/5/1 16:36 */ public class AlipayConfig { //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 public static String app_id = "2016102400750282"; // 商户私钥,您的PKCS8格式RSA2私钥 public static String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCcp/MefYUYzA24LVb29YXhAI6V1XTfepi49AcHJrDsKy58mfAA9RGTkm3x7FsQ1v6qUcdfsRyL6EObEV6Fg9SCBFV1w1KXA2OqNrYrG0bk2C8RD3OPCATzZq1p+hM/vmhlXMcryzNPs/17nDKFRwUfl2+zJHjixbQ1iW3Bc0NvXXCSsWKwCws9PnGrbYyp1LuWQad54315vprg99LBqxbWYqWpzEZNJu1nNoEyEbTOXD+TV0aH4ZQAP4ka4Q49LDpi9zrv6vK6teYRZgOQW1OIj4eK/y9cePLjs9KxGawzAMAdkKHWC6qkv70JV5ugXiuyyTaaJGMnPiuCnQNjRiz5AgMBAAECggEAEpqjdcCEWPCKxI+l30hDMPhm9oZWDeA6WOSqHQBMTI/IQoXpicOQ5cyi//MI0ZQmxEVX/xZChJ79wGGsrwB78UDggU7D9Sky4dkDg1UG81B1Lnp+R8M1C07rU0WemZhcP4VoJdxI6LNAbDidi1Rm2FycqFKxhITkJOOARFQS8xudxXk2R1xbr+A50KCNI9nj3JxMrbBhrOxq+4aCLpcWcgjgFpbQcFNws/j47Axz6Lb1W6X70LGV4pvtmVTH6OtMYcbq7D4mOEpKiFatU6pJH+Xg71JzaG9KD61ihfPJFZzcWpTAa9XTscsH9g2+LjQZ+j4FWTAwRz8JfQ/6osxhPQKBgQD90x+txTRchTtrfMyYKj62FTPjOa/zIDjxRAzD8dOQW9jSgPrkcg9XSVN1MbfZFbdeKVeneljgsCjcWelRdYbYq+ljtS4eCk/mALoB1b+qLrQ9bgtftcOH8LWPGy+NMmhe6Vr9BVQ8WgBmCHVkJGijt+oZwfU+O++BqfT9y8/RCwKBgQCd/6TK1myrWyj1grjXq+x4ve6TRlE6563cIyKW6qPiJSwtPGRX+8p8cn8O3L/TVAf7ekTYGTr9cgoaaGjQGPLdpn/a4A0r1sRO2qfwapgVTBMc8gxbi6X5mpB2lx8TivEO5KPMuiTxxkyvi+VVc2XaIiUWfUkMRMOBWk1QqLKEiwKBgQC0N+bSNqbK2j4qP1303GnSVpOUzizDbyl/BFYb+ePBJ7V3IOUCtol17DY5i6eBlw2u6aO24gOg5PLeIWir0cqApO79QHMSGThJklJ/YwjHCIoo461ns2K1bo86oI7Ore+1E/Lqm5IHl8+YooDXLZKuS7MHvtMl8OBJLCcq3D8dqQKBgBgTtAYhBPBb9PLs18Qt89w2fVu+FHTYh1sLk6LR4OV+aqv+DwCFY0bxn8EhDK5kmM7OxBz2Q1IKBdYeYRKNKr1yOPuetwMeOE4X7g2qAMEGFceMbyuoLUPLNQaNYvP0cWWmm/t/xk99u4Po2qrZ6gSCvYoez3nqJKzamPuYqZOfAoGBAPNDXtlOFvKasWZGNGlms6PrQIwnOWjsDwIs39Pztjh/jUEmi8DYvFy75ozwRAzrC3orTumSzFjGBfw5FWoQCzVMK8QNxEstGVeA8yG2IwerqX5nzDXScdTJBm7bYqeDZU2l8cZ8fcn60mFixnEIWVSxMg/sg1XEgbK2aWJO3hdf"; // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm1gzowmU2p27dhGP3reDpHxIrzpOd8NuwcOs9q94d6NBTNQmph6aMPQLOww7DBG0ggYB6NY4yOiHPJVoAHOuz4vR2r2tzNrxfFan5/Nu5kWmYExTuAITdweXxh7F+zgtGBIEal7/32R+5NbzbU8LbVeOOhqHq2JenTaDgQ0PmICYHyuGmxcvJOgxmIy5bJj1j7wGOpe2d+gsqAVLxvxOIE4Eh8wbv/NX8FcXzKsx8l6CSD+/smI5S+GvSD+4bSzIKDa3kd1aIGblkHXSQWgDvBfGpxEgEwB/GONOHgk1lkJcTNkaw1ExMLHQluUa6LnrZUG03EBFUV6lDx/z8EuUEwIDAQAB"; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String return_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp"; // 签名方式 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("/pay") public String pay(){ //获得初始化的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 out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金额,必填 String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8"); //订单名称,必填 String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //商品描述,可空 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明 //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," // + "\"total_amount\":\""+ total_amount +"\"," // + "\"subject\":\""+ subject +"\"," // + "\"body\":\""+ body +"\"," // + "\"timeout_express\":\"10m\"," // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节 //请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); //输出 out.println(result); }
修改报错:
-
-
增加input输入框如图:
-
<%--第一次为text可看到参数传递,之后设置为hidden隐藏标签,不在页面显示--%> <input type="hidden" name="id" value="${order.id}"> <input type="hidden" name="money" value="${order.money}">
-
修改这里
-
@RequestMapping("/pay") public void pay(String id, String money, ServletResponse response) throws AlipayApiException, IOException { //获得初始化的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 out_trade_no = id; //付款金额,必填 String total_amount = money; //订单名称,必填 //本项目中没有订单的名称,所以用id代替。 String subject = id; //商品描述,可空 String body = ""; alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明 //alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," // + "\"total_amount\":\""+ total_amount +"\"," // + "\"subject\":\""+ subject +"\"," // + "\"body\":\""+ body +"\"," // + "\"timeout_express\":\"10m\"," // + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节 //请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); //输出 //out.println(result); response.setContentType("text/html"); //作为html页面输出 response.getWriter().println(result); }
-
再次运行项目:查看可以跳转到支付页面并且支付成功。
-
但是如何跳转回到本地项目呢?修改这里的路径
-
-
-
之后可以继续修改数据库。
-