文章目录
1. 前期准备
1.1 注册支付宝开发者账号登录 —> 注册
拉到网站下面自行了解文档:
ps : 在电脑网站支付文档中官方提供了demo代码下载, 可以下载下来跑跑看
1.2 进入沙箱说明文档
因为我们没有商户资格, 因此要借助沙箱环境模拟一个实际上的测试环境, 待项目上线直接将密钥替换即可
登陆沙箱环境
下载沙箱密钥生成工具
使用上面下载的生成工具, 生成公钥私钥填写到沙箱环境中
到此,准备过程已完成
2. 编码
1.配置类, 也可以写到Spring boot配置文件中进行加更灵活
/**
* 支付宝支付配置文件
*/
public class AlipayConfig {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "是沙箱环境中的APPID";
// 商户私钥,您的PKCS8格式RSA2私钥
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 = "http://localhost:8080/自定义支付完返回的页面路径";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://localhost:8080/自定义支付完返回的页面路径";
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关(这是测试环境的网关 注意看下面的dev)
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}
2.支付业务Service
/**
*@param out_trade_no 商户订单号(唯一,可用时间戳)
* @param total_amount 金额
* @param subject 订单名
* @param body 商品描述
* @return 返回的是一段js脚本字符串
*/
public String submitPay(String out_trade_no, String total_amount, String subject, String body) {
//获得初始化的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);
//直接从传参里拿, 都是字符串
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//发送支付请求(返回的js脚本)
String result;
try {
result = alipayClient.pageExecute(alipayRequest).getBody();
} catch (AlipayApiException e) {
log.error("支付失败: {}", e.getErrMsg());
return null;
}
return result;
}
3. Controller 省略
4. 前端小朋友请求获取到返回的脚本直接执行
document.write(后端返回的字符串)
至此用户就完成了从你的网站–>支付宝支付页面, 支付完–>你的网站页面的过程