先登录支付宝的沙箱环境登录 - 支付宝
我以前已经注册过支付宝沙箱的账号了,此处我就省略了......
登录之后需要获取这几个参数,
GATEWAY_URL,APP_ID,APP_PRIVATE_KEY,FORMAT,CHARSET,ALIPAY_PUBLIC_KEY,SIGN_TYPE
写一个配置文件,AlipayConfig
public class AlipayConfig {
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static final String APP_ID = "写你自己的";
//商户私钥
public static final String APP_PRIVATE_KEY = "写你自己的";
// 字符编码格式
public static final String CHARSET = "UTF-8";
//支付宝公钥
public static final String ALIPAY_PUBLIC_KEY = "写你自己的";
public static final String FORMAT ="JSON";
//签名方式 RSA2
public static final String SIGN_TYPE = "RSA2";
//支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址
public static final String RETURN_URL = "http://localhost/returnUrl";}/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)** @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();}}}
}
写一个controller
/*** 支付宝** @data*/
@RestController
@RequestMapping("/order")
public class AlipayController {/*** 支付宝电脑网站支付** @param httpResponse* @throws IOException*/@RequestMapping("alipay")public void alipay(HttpServletResponse httpResponse) throws IOException {Random r = new Random();//实例化客户端,填入所需参数AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAY_URL, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE);AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();//在公共参数中设置回跳和通知地址request.setReturnUrl(AlipayConfig.RETURN_URL);request.setNotifyUrl(NOTIFY_URL);//商户订单号,商户网站订单系统中唯一订单号,必填//生成随机IdString out_trade_no = UUID.randomUUID().toString();//付款金额,必填String total_amount = Integer.toString(r.nextInt(99) + 100);//订单名称,必填String subject = "2021款 530Li 领先型 M运动套装";//商品描述,可空String body = "尊敬的会员欢迎购买2021款 530Li 领先型 M运动套装";request.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","+ "\"total_amount\":\"" + total_amount + "\","+ "\"subject\":\"" + subject + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");String form = "";try {form = alipayClient.pageExecute(request).getBody();// 调用SDK生成表单} catch (AlipayApiException e) {e.printStackTrace();}httpResponse.setContentType("text/html;charset=" + AlipayConfig.CHARSET);httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}/*** 手机网站支付** @param httpRequest* @param httpResponse* @throws ServletException* @throws IOException*/@ResponseBody@RequestMapping(value = "/wapPay1")public void doPost(HttpServletRequest httpRequest,HttpServletResponse httpResponse) throws ServletException, IOException {AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.GATEWAY_URL, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.SIGN_TYPE); //获得初始化的AlipayClientAlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的requestalipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址alipayRequest.setBizContent("{" +" \"out_trade_no\":\"20150320010101002\"," +" \"total_amount\":\"88.88\"," +" \"subject\":\"Iphone6 16G\"," +" \"product_code\":\"QUICK_WAP_PAY\"" +" }");//填充业务参数String form = "";try {form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单} catch (AlipayApiException e) {e.printStackTrace();}httpResponse.setContentType("text/html;charset=" + AlipayConfig.CHARSET);httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}}
然后代码部分就ok了,运行项目,进行测试
打开浏览器,输入请求路径:http://localhost:8088/order/alipay
(8088是你本地的端口号,我这里是8088,看个人设置,也有人设置是8080)
打开命令行,cmd,输入ipconfig,查看你的IP地址
我的是192.168.0.153
打开手机浏览器,输入请求地址,192.168.0.153:8088/order/wapPay1
使用支付宝app付款即可。
这就欧克了,简简单单。有问题,评论区留言