文章目录
环境准备
现在所有的环境都是使用支付宝开发者平台提供的沙箱环境
1.访问https://openhome.alipay.com/platform/appDaily.htm?tab=info 手机扫描登录
填写资料
2.配置支付密匙详细信息
显示如下:
2.1 首先点击 RSA2(SHA256)密钥 设置
2.2 点击公钥
2.3 根据你的电脑系统下载对应的生成器
复制应用公钥保存设置
这样会生成支付宝公钥
此时我们就可以进行支付宝正式开发了。
- springBoot 配置
3.1 pom引入jar包
3.2 添加配置文件 AliPayConfig
// 应用ID
public static String APP_ID = "登录网页上的app_id";
// 应用私钥
public static String MERCHANT_PRIVATE_KEY = "这个就是你软件配置应用公钥上面的应用私钥";
// 应用公钥
public static String ALIPAY_PUBLIC_KEY = "这个就是你软件生成的应用公钥";
// 支付宝公钥
public static String ZFB_PUBLIC_ID ="XXXXXXXXXXXXX"
// 异步通知
public static String notify_url = "";
//如果没有做内网穿透、notify_url return_url也可以不配,不影响测试支付
// 支付成功后出现几秒的回调页面
public static String return_url = "XXXXXXXXXXXXX";
// 签名方式
public static String SIGN_TYPE = "RSA2";
// 字符编码格式
public static String CHARSET = "utf-8";
// 支付宝网关 alipaydev 为沙箱网关 这里不用更改
public static String GATEWAYURL = "https://openapi.alipaydev.com/gateway.do";
3.3 接口编写 ----AlipayTemplate
@Component
@Data
public class AlipayTemplate {
//在支付宝创建的应用的id
private String app_id = AliPayConfig.APP_ID;
// 商户私钥,您的PKCS8格式RSA2私钥
private String merchant_private_key = AliPayConfig.MERCHANT_PRIVATE_KEY;
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
private String alipay_public_key = AliPayConfig.ALIPAY_PUBLIC_KEY;
// 服务器[异步通知]页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
// 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
private String notify_url;
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
//同步通知,支付成功,一般跳转到成功页
private String return_url;
// 签名方式
private String sign_type = "RSA2";
// 字符编码格式
private String charset = "utf-8";
// 支付宝网关; https://openapi.alipaydev.com/gateway.do
private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
public String pay(PayVo vo) throws AlipayApiException {
//AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
//1、根据支付宝的配置生成一个支付客户端
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
app_id, merchant_private_key, "json",
charset, alipay_public_key, sign_type);
//2、创建一个支付请求 //设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = vo.getOut_trade_no();
//付款金额,必填
String total_amount = vo.getTotal_amount();
//订单名称,必填
String subject = vo.getSubject();
//商品描述,可空
String body = vo.getBody();
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
String result = alipayClient.pageExecute(alipayRequest).getBody();
//会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
System.out.println("支付宝的响应:"+result);
return result;
}
}
一个配套支付工具的vo
@Data
public class PayVo {
private String out_trade_no; // 商户订单号 必填
private String subject; // 订单名称 必填
private String total_amount; // 付款金额 必填
private String body; // 商品描述 可空
}
4、实际controller中的应用方式
@Autowired
AlipayTemplate alipayTemplate ;
@GetMapping(value = "/getPagePay/{total_amount}/{subject}" , produces = "text/html")
public String getPagePay(@PathVariable("total_amount") String total_amount,@PathVariable("subject") String subject) throws Exception
{
log.info("-----------------total_amount="+total_amount);
log.info("-----------------subject="+subject);
PayVo payVo = new PayVo();
payVo.setOut_trade_no(UUID.randomUUID().toString());
log.info(payVo.getOut_trade_no());
payVo.setTotal_amount(total_amount);
payVo.setSubject(subject);
return alipayTemplate.pay(payVo);
}
注意沙箱环境的支付账号为沙箱账号、测试环境并不能使用真实的支付账号