开放平台沙箱对接的实现
首先简单的看一下项目文件结构,可以随便放,不用按照这个格式来进行。
接下来就是文件中的代码了
1,在pom.xml文件中导入jar包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.9.79.ALL</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
</dependency>
</dependencies>
2,Alipay
@Data
@Configuration
public class Alipay {
private final String format = "json";
private String appId="你的APPID";
private String privateKey="应用私钥";
private String publicKey="应用公钥";
private String notifyUrl="服务器异步通知页面路径,和returnUrl格式相同,必须是http://格式的完整路径,不能带有?id=1&name=aaa这种格式的参数";
private String returnUrl="支付成功后需要跳转的页面";
private String signType="支付宝开放平台密钥工具的加密方式 如:RSA2";
private String charset="utf-8";
private String gatewayUrl="支付宝网关";
//第三方接口方法实现
public String pay(AliPayBean aliPayBean) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl, appId, privateKey, format, charset, publicKey, signType);
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
alipayRequest.setBizContent(JSON.toJSONString(aliPayBean));
String result = alipayClient.pageExecute(alipayRequest).getBody();
System.out.println(result);
return result;
}
}
3,AliPayBean
@Data
public class AliPayBean {
//订单编号
private String out_trade_no;
//订单名称
private String subject;
//订单金额
private String total_amount;
//订单详情
private String body;
//超时参数
private String timeout_express = "60m";
//编号
private String product_code = "FAST_INSTANT_TRADE_PAY";
}
4,PayService
public interface PayService {
String aliPay(AliPayBean aliPayBean) throws AlipayApiException;
}
5,PayServiceImpl
@Service
public class PayServiceImpl implements PayService {
@Resource
private Alipay alipay;
@Override
public String aliPay(AliPayBean aliPayBean) throws AlipayApiException {
return alipay.pay(aliPayBean);
}
}
6,AliPayController
@RestController
@RequestMapping("alipay")
public class AliPayController {
@Autowired
private PayService payService;
@RequestMapping("/pay")
@ResponseBody
public String alipay(AliPayBean aliPayBean) throws AlipayApiException {
return payService.aliPay(aliPayBean);
}
}
7,App
@SpringBootApplication
//避免因漏配置导致的错误。
@ComponentScan("org.example.Alipay.*")
public class App {
public static void main( String[] args ) {
SpringApplication.run(App.class,args);
}
}
8,html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>支付宝体验页</title>
<script src="js/vue.js"></script>
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<style>
.aaa{
width: 500px;
height: 500px;
border-radius: 30px;
padding: 20px;
margin: 0 auto;
margin-top: 120px;
margin-left: 160px;
background-color: #FFFFFF;
}
</style>
</head>
<body>
<div id="app" class="aaa">
<el-tabs value="1">
<el-tab-pane label="付款" name="1">
<el-form :model="form" method="post" id="forms" target="_blank" action="/alipay/pay" label-width="80px">
<el-form-item label="订单编号">
<el-input id="WIDout_trade_no" name="out_trade_no" v-model="form.mid"></el-input>
</el-form-item>
<el-form-item label="订单名称">
<el-input id="WIDsubject" name="subject" v-model="form.mname"></el-input>
</el-form-item>
<el-form-item label="付款金额">
<el-input id="WIDtotal_amount" name="total_amount" v-model="form.mmoney"></el-input>
</el-form-item>
<el-form-item label="订单详情号">
<el-input id="WIDbody" name="body" v-model="form.mm"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="onClose(form.mmoney)">确认付款</el-button>
<el-button type="danger" @click="cancellation(form.mid)">取消付款</el-button>
</el-form-item>
<span>温馨提示:付款前请先核实单号信息,如有疑问请取消付款</span><br>
<span>温馨提示:付款完成后请等待自动跳转,以防数据传输出错造成个人财产损失</span>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
<script>
var app = new Vue({
el: '#app',
data:function () {
return {
form: {
mid:'02',
mname:'aaa',
mmoney:'28',
mm:'192003',
},
};
},
methods: {
onClose:function (money){
console.log(app.form);
document.getElementById("forms").submit();
},
getDateNow() {
const now = new Date();
let sNow = '';
sNow += String(now.getFullYear());
sNow += String(now.getMonth() + 1).padStart(2, '0');
sNow += String(now.getDate()).padStart(2, '0');
sNow += String(now.getHours()).padStart(2, '0');
sNow += String(now.getMinutes()).padStart(2, '0');
sNow += String(now.getSeconds()).padStart(2, '0');
sNow += String(now.getMilliseconds()).padStart(3, '0');
},
},
mounted() {
this.getDateNow();
},
});
</script>
</body>
</html>
接下来就是获取添加AliPayBean中的数据了
1,首先访问支付宝开放平台
2,登录账号,支付宝扫码登录即可
3,登录成功后点击控制台
4,进入控制台界面滑动到页面底部,点击沙箱
进入后滑动到页面底部随便点击一个调试,进入文档中心
这里根据电脑的操作系统选择要下载的内容
5,下载完成后打开密钥工具直接生成密钥即可
加密算法就是AliPay中的signType的值
6,生成密钥后点击打开文件位置找到应用公钥私钥的存放位置
这里的应用公钥和私钥需要粘贴到AliPay中对应的位置
7,打开应用公钥文件,复制里面的内容
点击查看后将公钥粘贴进去,支付宝公钥会自动生成,然后保存确定即可
这两个后面的数据也需要粘贴在AliPay中
修改完成后既可以试试是否能使用了。