支付宝支付 - 构建支付表单填并提交

    科技2025-04-21  26

    /** * * @Description: 前往支付宝进行支付 * @return * @throws Exception */ @ResponseBody @RequestMapping(value="/goAlipay") public JSONResult goAlipay(String merchantOrderId, String merchantUserId) throws Exception{ // 查询订单详情 Orders waitPayOrder = paymentOrderService.queryOrderByStatus(merchantUserId, merchantOrderId, PaymentStatus.WAIT_PAY.type); //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(aliPayResource.getGatewayUrl(), aliPayResource.getAppId(), aliPayResource.getMerchantPrivateKey(), "json", aliPayResource.getCharset(), aliPayResource.getAlipayPublicKey(), aliPayResource.getSignType()); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(aliPayResource.getReturnUrl()); alipayRequest.setNotifyUrl(aliPayResource.getNotifyUrl()); // 商户订单号, 商户网站订单系统中唯一订单号, 必填 String out_trade_no = merchantOrderId; // 付款金额, 必填 单位元 String total_amount = CurrencyUtils.getFen2YuanWithPoint(waitPayOrder.getAmount()); // String total_amount = "0.01"; // 测试用 1分钱 // 订单名称, 必填 String subject = "天天吃货-付款用户[" + merchantUserId + "]"; // 商品描述, 可空, 目前先用订单名称 String body = subject; // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 String timeout_express = "1d"; alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"timeout_express\":\""+ timeout_express +"\"," + "\"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 alipayForm = ""; try { alipayForm = alipayClient.pageExecute(alipayRequest).getBody(); } catch (AlipayApiException e) { e.printStackTrace(); } log.info("支付宝支付 - 前往支付页面, alipayForm: \n{}", alipayForm); return JSONResult.ok(alipayForm); } //@Configuration @Component @ConfigurationProperties(prefix="alipay") @PropertySource("classpath:alipay.properties") public class AliPayResource { private String appId; private String merchantPrivateKey; private String alipayPublicKey; private String notifyUrl; private String returnUrl; private String signType; private String charset; private String gatewayUrl; public String getAppId() { return appId; } public void setAppId(String appId) { this.appId = appId; } public String getMerchantPrivateKey() { return merchantPrivateKey; } public void setMerchantPrivateKey(String merchantPrivateKey) { this.merchantPrivateKey = merchantPrivateKey; } public String getAlipayPublicKey() { return alipayPublicKey; } public void setAlipayPublicKey(String alipayPublicKey) { this.alipayPublicKey = alipayPublicKey; } public String getNotifyUrl() { return notifyUrl; } public void setNotifyUrl(String notifyUrl) { this.notifyUrl = notifyUrl; } public String getReturnUrl() { return returnUrl; } public void setReturnUrl(String returnUrl) { this.returnUrl = returnUrl; } public String getSignType() { return signType; } public void setSignType(String signType) { this.signType = signType; } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public String getGatewayUrl() { return gatewayUrl; } public void setGatewayUrl(String gatewayUrl) { this.gatewayUrl = gatewayUrl; } } # 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 alipay.appId=2109000001011231 # 商户私钥,您的PKCS8格式RSA2私钥 (这里我用的商户应用私钥,也就是支付宝RSA签名验签工具) alipay.merchantPrivateKey=MIAt5jdP8Kk1mcM/QYyZnXXKO/C2pCNg/qIwhxQ4criC/cNWCaqQRKemL/Lgjh # 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 alipay.alipayPublicKey=Bgkq164UdIS4/T3XamGmxPX/VUgxikfvLav6N/O+EA85Pm4Mb/ujg8IDAQAB # 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 #alipay.notifyUrl=http://2r49yp.natappfree.cc/payment/notice/alipay alipay.notifyUrl=http://payment.t.xuexi.com/payment/payment/notice/alipay # 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 alipay.returnUrl=http://payment.t.xuexi.com/payment/alipayResult #alipay.returnUrl=http://shop.t.xuexi.com/payment # 签名方式 alipay.signType=RSA2 # 字符编码格式 alipay.charset=utf-8 # 支付宝网关 alipay.gatewayUrl=https://openapi.alipay.com/gateway.do

     

    Processed: 0.011, SQL: 8