Spring Boot集成支付宝网页支付
一.在支付宝开放平台申请开通研发服务
登录https://openhome.alipay.com/platform/home.htm后选择开发服务列表中的研发服务,使用沙箱环境进行开发,因为正式环境需要通过企业认证。
二.代码配置
1.需要的依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.4.ALL</version>
</dependency>
- 配置类
@Configuration
public class AlipayConfig {
public static String app_id = "2016102200741273";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQCVExLcvJmUd0LMfD8yhWlEoa5zJBslDESIZtmudpBPEI/pJDWgYewIszogx1jpJ5bdFrU3AIQQqMh2QkiX5ppLK9tupyUgLyDdT0LR0f3+2qKDD/uifLj+9kK79riPeTirTaxDAQuMSGFlpUwBcRFfex/SOiN0AfjWQxyEnIrPH+XZ4/kjU4A+sGfQEhivdjjlRbHvdabRh6VPs6oX57SaYFDEXNbdKUzdigFEcxs4GR56MZIR0EQuT5f8pcUEOZa47TkXjyANTVDju5wZVIHb08YZk96ltdwDrISya7JPmQj1cYdbMBZ++LU7/ICWdbsXrneWmefZqzZBQu3s78dvAgMBAAECggEBAIyvgHiTALmNR5wlkZrDLxJXJ4SASaHQDwlPTxYHzK7hKX9T7cwbPZ8ETdJLb4wyEX07BfAPa5MxRmXcrhe0yF4y2JZ35WCXOYPCXoQXkoYmnYHk3ox8+jWcAGTVNV4pf6Ki3fQqE1Tjpg9ATRd7NnMOhnxm47iCd+z1Tv+ToKhQuA3L3reXIqUkNWAS9IfurPRxfwtOuw+aZ3xEtp4svSMb9GKgVy1QfRzkPqt8pMH2f6EkAWAYUvZbEGZzME8cZJR3VReGTrKkOqnY+Tkk/TZQKYtA7tw9uUXA+QsRPk19et0DhkJh/VtyF9VUn6Ixq90BrLUqtHPikH3J8evV2GkCgYEAzBJhFcbz2UGvy+1hg+MdPcf4hh3oav9OYISrLRROn30U7KjJuBh02OsCiQqZWCdARibwuCHEWqlXL/Fae2DZM32MZqk+ctUC8Cp7bOF3G2qE9VpvgJb55yjfu3iwapis2PcwOopewGIKRTUmNYDV5kprHyBzYS8UdOFlfrzoxhMCgYEAuwIRUBj6IZzNPYqiBo7eVMihQEdtIRKmtey4d6NHgv3wudJ7tL8V2k5amnyNF5it5BgdfR4eyDvnCAw01o2UyCPUxuVTTdaf1Bv/wTVY7jZpL7EpjJJ60S6Mu+42VqylZh5KSxCzI3PeEgWE2i2yN4qruQYHSzr7VZHfNyDc1LUCgYEAko2MbVBApMB4mFH0mvuKb2jhwKdP1y9cQRJlv+z6fa0dTsv0eaIOoA09997FuzoM/ZRPgVy2n4lHVOXWXg5yTXkXUE6wy1TQVFud4daVa/n2XCFDPCywcWK4MfD9eMAGOZZja1cdrrl5uLPvqbLJaiX9ghAS7DMcVMfd1MOjw0MCgYEAoNjxbTReiGSm/4TrQbrGrqP2ViRZT/YL4DRgob6V9qxWzm2lK1yj/iYgtfnlHWOcRbEcRA6RKWakm35sQBJ84vw2unBrC2tMA5OlklhBSnsQVA4Mj7U54AwqzkXhBQHwLXpmKlSN0DOL0XJfx41AWZdzhmwR//oWTY5vMKqaZnUCgYEAgxGRdzAuUeFb4wLagq1HZrOwDMTBrMmVqK5isgQ2UZ9xJEpfaLWws9Rmq7nT9C2Sz6JKi1+jSTPoulq9+lyunNlU5gqvY+a4ArWWdr/a84s+ql4PlQwWwTIOr3aaPYNa5AhZ4VJZFKOH8nqzpyFxVe5smM6x0nGEHbnjOaTqKFg=";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsPzHWfLVWvKr3aAVXtlp2Cpm3QF9Oh+dM7hpFe+XWJviPw8HZOGKTX/DzYUs9ZGc4rfjeAVHT/UIH2ZpF3LZp3DXi4VqFHcGO29cRaYCMfghZHwSBpRaEmkAMgi+eVQmDe/yf0Tj2pe3H/Sjc8QEtyus6EfAbD4RNgH00WEIGbITlxywtuGIrvL668SiP8N/pSeMQ7PyT8lwZVtnsXwnSyfZSmlTg62l+dgb9LE40a/8X1fHl4QPvk8Elpq2XYm6WO+XbSpfAdJVDst489HkEvEnxdeqn/BCfYG/YVy0GLbRiQit6yq3biJkdn60T6gAnxCve95PFBimf5LBPdd89QIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://localhost:8090/haha";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://localhost:8090/static/ok.html";
// 签名方式
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:\\";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
3.controller层
@RequestMapping(value = "/goAlipay", produces = "text/html; charset=UTF-8")
@ResponseBody /*jsp页面传过来的订单号,该商品的ID*/
public String goAlipay(@RequestBody Map map ) throws Exception {
//获得初始化的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 test = "111";
//设置订单号
SimpleDateFormat sDateFormat=new SimpleDateFormat("yyyyMMddhhmmss");
String format = sDateFormat.format(new Date());
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = map.get("orderId").toString().trim();
//付款金额,必填
String total_amount = map.get("price").toString().trim();
//订单名称,必填
String subject = "测试";
//商品描述,可空
String body = "用户订购商品个数:" + 1;
/*
*
* 这里向数据库中添加数据,购买的这条商品信息
* 名称,数量,单价,付款金额,订单号(唯一),支付状态(未支付)
*
*
* */
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围: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 result = alipayClient.pageExecute(alipayRequest).getBody();
return result;
}