SpringBoot集成电脑版 支付宝沙箱 简单集成
- 创建SpringBoot项目
第一步:
第二步:
第三步:
第四步选择框架需要集成的 我只是简单以SpringBoot环境集成,只选择的web。
如果你以创建好 启动不了 启动类显示没导入成功就降低SpringBoot版本。
- 引入jar包
<!--支付宝调用jar包-->
<dependency>
<groupId>com.github.1991wangliang</groupId>
<artifactId>alipay-api</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
</dependency>
-
生成支付宝公钥 私钥并且配置
https://miniu.alipay.com/keytool/create
把生成的公钥配置给支付宝
https://openhome.alipay.com/platform/developerIndex.htm
开发服务-》沙箱服务
-
复制支付宝密保配置方法
package com.example.alipays.config;
import java.io.FileWriter;
import java.io.IOException;
/* * http://localhost:8080/payment/pay
*类名:AlipayConfig
*功能:基础配置类
*详细:设置帐户有关信息及返回路径
*修改日期:2017-04-05
*说明:
*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";
// 商户私钥,您的PKCS8格式RSA2私钥 https://miniu.alipay.com/keytool/create 自己手动生成的私钥
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 = "https://www.baidu.com";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "https://www.baidu.com";
// 签名方式
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:\\";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
/**
* 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
* @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();
}
}
}
}
}
- 业务成和控制层
package com.example.alipays.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public interface AlipayService {
/**
* 支付宝支付调用接口
* @param response
* @param request
* @throws IOException
*/
String aliPay(HttpServletResponse response, HttpServletRequest request) throws IOException;
}
package com.example.alipays.service.Impl;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.alipays.service.AlipayService;
import com.example.alipays.config.AlipayConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;
/**
* 业务层
*/
@Service
@Slf4j
public class AlipayServiceImpl implements AlipayService {
@Override
public String aliPay(HttpServletResponse response, HttpServletRequest request) throws 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(UUID.randomUUID().toString().replace("-",""));
//付款金额,从前台获取,必填
String total_amount = new String("0.01");
//订单名称,必填
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 = null;
try {
result = alipayClient.pageExecute(aliPayRequest).getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
//输出
// out.println(result);
log.info("返回结果={}",result);
return result;
}
}
package com.example.alipays.controller;
import com.example.alipays.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @description 支付控制类
*/
@RestController
@RequestMapping("/payment")
public class PaymentController {
@Autowired
AlipayService alipayService;
@RequestMapping("/pay")
public String payMent(HttpServletResponse response, HttpServletRequest request) {
String str="" ;
try {
str = alipayService.aliPay(response,request);
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
application.yml 配置一下端口号
server:
port: 8080
servlet:
context-path: /
tomcat:
uri-encoding: utf-8
调用:
http://localhost:8080/payment/pay
这一支付就基本成功了。
如果出现 :支付存在钓鱼风险!防钓鱼网站的方法 错误的界面,就关闭所有支付宝登录的平台 清除缓存再次 访问 http://localhost:8080/payment/pay
就OK了 ,不行换个浏览器 就搞定了,其他错误需要你去好好验证你的配置有没有配好没啥大问题。
在每一天中奋斗:百万秦关终属楚,三千越甲可吞吴。