
pom.xml
com.alipay.sdk
alipay-sdk-java
3.7.26.ALL
controller层
package com.wen.controller;
import com.alipay.api.AlipayApiException;
import com.wen.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/alipay")
public class AlipayController {
@Autowired
@Qualifier("alipayService")
private AlipayService alipayService;
@RequestMapping("/getPagePay")
public Map
AlipayConfig
package com.wen.config;
import java.io.FileWriter;
import java.io.IOException;
public class AlipayConfig {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String APP_ID = "2021000117693332";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String MERCHANT_PRIVATE_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHObS89y6mHKVY1WpLenvlUEWhqXAb5zAFqm9LOsOUEmqsgezF05B5QDAy/I7exAiKaanu2ciikCodlBnY/B0JH90JC6MzzSihs2v2MY0wEeANLStP6bTjkCuSDLwObZxNTPEF0VBlqi4jzLSG2XJvkczI2strK8jI06tnAMUY1cS9CIe1ICmHLkd55ABwn4WDuoyQo589/Qm646KUmkcAeYfFo5EbaRZtvJlKcCuFQMWvlAOBRG1JJm5Tnfg3XJ41698+BNxQplbVr7XIxUoWnHqBffEJE5/HSuZUpcQv75SMbAa0DT3Lf6W3cEdIdSGznP+UMH9e9NizgCVrwlmzAgMBAAECggEAYcejXmSqUakzEro3Q17NCfLydsRLcZHJUr97/H0AgSiUBCtqp12lAVgdwjCHqqM7vcJMA49tGcd+/KZjzlf3MurcbLcCiumVsN9JeNs5yYGTblO0FvPaPha4usIElbZCqE6zlc5WAT1+YZqbC0tfCTf3SWGUZ+lgJX+RWEjhPGP/MJrDsazEz1JVXnCuNwVrWpdP4IdnmA5EX8UGwIHhxOlZ46JB4maj4g9h9YQftbfgX4aopJtwuAoXJmti7toy1UzguSnP/MvxOaMIQebUh9f9y3roUOaFLSOt2R/xJX3rRMJrWkdj+qytdMYGiLg1FgHRWWBC53CE2OcMfk5GOQKBgQDWiBT8lkZj7Vssgkw7kfUK7aez0tBCmOax/Ba9JDLZLflRyVPF0IMiJQvFqbEu2s3OvEciVaYqaffxyZRKDmzRRer3otm/LGAIKV79sOG1htn7a3+9B0ieetqeJ61eu3rsSlzhexSlM3zG0++niEJFEyZWTHEYIwZomCqa4PIVpQKBgQChXTlm2TRO9EFFoPWKXd8AXRw9BYEptLznPxZUXOTEV+esRR7Q3o/PlAxuEEnBPPpRsVGkr+NbkU5UsMogzUt50A//f9d6TZAxEmcbIV0hbazTPh2wC6yfjgxAWV2pncEerd13lEMz+rhen85f7+qzn6zitXuKZH+1pq6LQ6MCdwKBgEB7yOsfdGsG5lfblnR1a9VsF/N6U3UhJn6rSl5x6gLTydQmktKr2S7DOeWhGwv9Ys1YVH1ihz7KeWeo8rTL3zOMM5NZ1N+cxATQAqh4qW956D2lU1ELRm20ec/+FyOZcNpjg8WWzF7XuhK9k5Sk5V6D4gsgkQHzTTLVQkEpijqtAoGAZoK0zrO52VauiK9ijY5o9vAv2kw+6+HYCAg6BUomQt2dXgFjPEnHjpV8+Ab88/frBi7hsP/ULf23h3HwVrpU8oPNRgFPQHE54xLP0Zp2caAdJO3XKlmgRpSVD+Q17mU7pGPLyAW2U7U5n1NiZewibA5KZJPqcda6kwna5LoJOq0CgYEAkHX6ATn51uUZoeO26STyfMvX1LXzN02i3uDm2rOLJ/eTYCctowXLO9gjygxrbvPERG/hObaz1oVw/NJ8ymzhqF3voJxoY0KlIs6vLLaZfW76pZMQ4mWz10v6lJMiWxpa5kVpF26UKdAgyTyY+SU4rVjXBL3xMmagDNkor1gFmNc=";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApevJdSI5y9p9fX8x6WxZwQFLWdvTVF1zmo4TxJnG/0KnwOg2XtdAQwsWf2eQMpHdvd1LG+H+5ztpN3YDymt9DkzVbVkqqwEvcoS8tl/8tCknbs80t18FIMcOJe/nFBvBty/MB6wfdU2mM+e04j3d0VtLXq9h/4r/PCIEkTp3QKRuJfjLPCJUF3FLIo25IvoFxSqXrtBVh6PjA7CSsSvIHQdoUTZ4CXfHJFMUnwD0tKILHf4iy/f7e0+wzC7t6/n2K7Fc01WQv/omyQCscvaG1XXMaJ34jj8POjYApc5tYKDSII5vNx4B0PoCPGOCjtY+uvd6KryFSRg2ZX95gvUtjQIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://www.jiuxiangheni.com";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://www.tangyuxi.cn";
// 签名方式
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 = "D:\";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
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();
}
}
}
}
}
service
import com.alipay.api.AlipayApiException;
public interface AlipayService {
String webPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception;
String appPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception;
String refund(String outTradeNo, String refundReason, Integer refundAmount, String outRequestNo) throws AlipayApiException;
String query(String outTradeNo) throws AlipayApiException;
String close(String outTradeNo) throws AlipayApiException;
String refundQuery(String outTradeNo, String outRequestNo) throws AlipayApiException;
}
service实现类
package com.wen.service.impl;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.*;
import com.wen.config.AlipayConfig;
import com.wen.service.AlipayService;
import org.springframework.stereotype.Service;
@Service("alipayService")
public class AlipayServiceImpl implements AlipayService {
DefaultAlipayClient alipayClient = new DefaultAlipayClient(
AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);
AlipayClient alipayClients = new DefaultAlipayClient(
AlipayConfig.GATEWAYURL, AlipayConfig.APP_ID, AlipayConfig.MERCHANT_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);
@Override
public String webPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception {
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
alipayRequest.setBizContent("{"out_trade_no":""+ outTradeNo +"","
+ ""total_amount":""+ totalAmount +"","
+ ""subject":""+ subject +"","
+ ""body":"商品名称","
+ ""timeout_express":"90m","
+ ""product_code":"FAST_INSTANT_TRADE_PAY"}");
String result = alipayClient.pageExecute(alipayRequest).getBody().replace('"',''').replace('n',' ');
return result;
}
@Override
public String refund(String outTradeNo,String refundReason,Integer refundAmount,String outRequestNo) throws AlipayApiException {
AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
alipayRequest.setBizContent("{"out_trade_no":""+ outTradeNo +"","
+ ""refund_amount":""+ refundAmount +"","
+ ""refund_reason":""+ refundReason +"","
+ ""out_request_no":""+ outRequestNo +""}");
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
@Override
public String query(String outTradeNo) throws AlipayApiException {
AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
alipayRequest.setBizContent("{"out_trade_no":""+ outTradeNo +"","+""trade_no":""+ "" +""}");
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
@Override
public String close(String outTradeNo) throws AlipayApiException {
AlipayTradeCloseRequest alipayRequest = new AlipayTradeCloseRequest();
alipayRequest.setBizContent("{"out_trade_no":""+ outTradeNo +""," +""trade_no":""+ "" +""}");
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
@Override
public String refundQuery(String outTradeNo , String outRequestNo) throws AlipayApiException {
AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();
alipayRequest.setBizContent("{"out_trade_no":""+ outTradeNo +"","
+""out_request_no":""+ outRequestNo +""}");
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
@Override
public String appPagePay(String outTradeNo, Integer totalAmount, String subject) throws Exception {
AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
String productCode="QUICK_WAP_WAY";
AlipayTradeWapPayModel wapPayModel=new AlipayTradeWapPayModel();
wapPayModel.setOutTradeNo(outTradeNo);
wapPayModel.setSubject(subject);
wapPayModel.setTotalAmount(totalAmount.toString());
wapPayModel.setBody("商品名称");
wapPayModel.setTimeoutExpress("2m");
wapPayModel.setProductCode(productCode);
alipayRequest.setBizModel(wapPayModel);
String result = alipayClients.pageExecute(alipayRequest).getBody().replace('"',''').replace('n',' ');
return result;
}
}
前端发送接收代码
let params = new URLSearchParams();
params.append('outTradeNo', orderid);
params.append('totalAmount', resp.data.sum);
params.append('subject', resp.data.name);
axios.post("http://127.0.0.1:7000/alipay/getPagePay", params)
.then(function (resp) {
$("#div").html(resp.data.pay);//div盒子
});
这是和网上大哥做的,但是容易出现钓鱼网站的问题
第一种解决办法是删除缓存和更换浏览器,但还是要看脸
第二种解决办法(我也没用过,老师教的):
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//同步回调,如果本地调度只会走同步,这里的界面就是你付款后跳转的界面
alipayRequest.setReturnUrl(AlipayConfig.return_url);
//异步回调,没有服务器实际上我们用不到
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//订单名称,必填
String subject=request.getParameter("Name");
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no =request.getParameter("Order");
//付款金额,必填
ShopName String total_amount =request.getParameter("Money");
//商品描述,可空
String body ="购物测试";
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d- 天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
String timeout_express = "1c"; 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"}");
//这两种方式都是可以的,就是上面那种可能很容易报错,看运气是否成功
//请求
String form = ""; try {form = alipayClient.pageExecute(alipayRequest).getBody();
//调用SDK生 成表单
} catch (AlipayApiException e) { e.printStackTrace(); }response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); response.getWriter().write(form);
//直接将完整的表单html输出到页面
response.getWriter().flush();
response.getWriter().close();
return form;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)