赞
踩
springboot搭建支付宝沙箱环境模拟支付,前期准备工作
1.支付宝开放平台,注册成为开发者:https://open.alipay.com/
这里引用最新版sdk
开发工具:https://search.maven.org/artifact/com.alipay.sdk/alipay-sdk-java
2.导入依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.19.12.ALL</version>
</dependency>
前期准备工作,这里使用官方推荐的Web 在线加密,生成秘钥链接https://miniu.alipay.com/keytool/create
生成密钥:
配置RSA密钥,查看->输入生成的应用公钥
配置应用网关 https://openapi.alipaydev.com/gateway.do
沙箱环境->沙箱应用->找到APPID
复制生成的应用私钥
一.编写启动类
package com.zyx.alipay.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.zyx")
public class AlipayApplication {
public static void main(String[] args) {
SpringApplication.run(AlipayApplication.class,args);
}
}
二.配置AliPayUtils工具类
package com.zyx.alipay.utils; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; public class AliPayUtils { public static AlipayClient alipayClient; static { alipayClient = new DefaultAlipayClient( "https://openapi.alipaydev.com/gateway.do", "沙箱环境->沙箱应用->找到APPID粘贴在这里", "应用私钥放这里", "json", //UTF-8编码格式 "UTF-8", "应用公钥放这里", //RSA非对称加密 "RSA"); } public static AlipayClient getAlipayClient(){ return alipayClient; } }
三.测试接口
package com.zyx.alipay.controller; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; import com.qf.alipay.utils.AliPayUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.util.UUID; @RestController @RequestMapping("/pay") public class AlipayController { /** * 进行支付宝的支付 */ @RequestMapping("/alipay") public void aliPay(HttpServletResponse resp){ //订单号,测试随机生成->订单的支付金额 String oid = UUID.randomUUID().toString(); //测试价格写死,实际开发中根据订单id获取到订单金额 Double price=20000.00; //调用支付宝API AlipayClient alipayClient = AliPayUtils.getAlipayClient(); //构造一个支付请求 AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); //异步回调,用于接收支付宝服务器的回调请求 request.setNotifyUrl("http://xxxxxx这里可以放一个外网访问主机ip/pay/result"); //同步回调,重定向url,跳转到百度...实际开发中根据需求跳转到指定的页面. request.setReturnUrl("http://www.baidu.com"); //封装请求体 JSONObject bizContent = new JSONObject(); bizContent.put("out_trade_no", oid); bizContent.put("total_amount", price); bizContent.put("subject", "iphone plus 128G"); bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY"); request.setBizContent(bizContent.toString()); AlipayTradePagePayResponse response = null; try { response = alipayClient.pageExecute(request); if(response.isSuccess()){ System.out.println("调用成功!!OK"); //拿到支付宝服务器响应的响应体 String body = response.getBody(); //将响应体,写入浏览器 resp.setContentType("text/html;charset=utf-8"); resp.getWriter().print(body); resp.getWriter().close(); } else { System.out.println("支付宝调用失败..."); } } catch (Exception e) { e.printStackTrace(); } } @RequestMapping("/result") public void payResult(){ System.out.println("接收到支付宝的回调请求!!!"); } }
四.测试,访问支付接口:http://localhost:8080/pay/alipay
这里需要注意的是,如果浏览器开了多个窗口,需要关闭其他窗口,只留下支付页面窗口就可以,否则会出现一个 “支付存在钓鱼风险!防钓鱼网站的方法”
打开新的浏览器测试
输入用户名,密码
支付页面
支付成功,等待几秒可以看到跳转到重定向的url百度
可以查看商家账户余额
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。