maven pom需要引入的jar

<!--支付宝支付-->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.33.39.ALL</version>
</dependency>

支付宝相关配置类

import java.io.FileWriter;
import java.io.IOException;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*修改日期:2017-04-05*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。*/public class AlipayConfig {//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "2021000121663822";//测试 "2021000121663822"// 商户私钥,您的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://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String return_url = "网页回调通知地址";// 签名方式public static String sign_type = "RSA2";public static String json_type = "json";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";//正式环境 "https://openapi.alipay.com/gateway.do";//沙箱环境 "https://openapi.alipaydev.com/gateway.do"// 支付宝网关public static String log_path = "C:\\";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)* @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();}}}}
}

支付调用工具类(内含 获取支付二维码链接,获取网页支付、查询订单信息、异步回调通知)

package com.ruoyi.common.utils.alipay;import com.alibaba.fastjson2.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.response.AlipayTradePrecreateResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.ruoyi.common.utils.StringUtils;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class AlipayUtil {public static void main(String[] angs) throws Exception{JSONObject jsonObject = new JSONObject();jsonObject.put("out_trade_no","5789678");jsonObject.put("total_amount","88.88");jsonObject.put("subject","网页支付测试");//标题jsonObject.put("body","测试");jsonObject.put("gatewayUrl",AlipayConfig.gatewayUrl);jsonObject.put("app_id",AlipayConfig.app_id);jsonObject.put("merchant_private_key",AlipayConfig.merchant_private_key);jsonObject.put("alipay_public_key",AlipayConfig.alipay_public_key);jsonObject.put("return_url",AlipayConfig.return_url);jsonObject.put("notify_url ",AlipayConfig.notify_url );//网页支付getWebPay(null,jsonObject);System.out.println("Error Message:" + getPayQrCode());//获取二维码支付链接getPayQrCode(jsonObject);//查询订单交易信息(根据自定义订单编号)String nny = alipayQuery("zzgka7bb413db72746f7a640");System.out.println("Error Message:" + nny);}/*** 网页支付* @param response* @param jsonObject* @throws Exception*/public static void getWebPay(HttpServletResponse response,JSONObject jsonObject) throws Exception {String out_trade_no = jsonObject.getString("out_trade_no");String total_amount = jsonObject.getString("total_amount");String subject = jsonObject.getString("subject");String body = jsonObject.getString("body");String gatewayUrl = jsonObject.getString("gatewayUrl");String app_id = jsonObject.getString("app_id");String merchant_private_key = jsonObject.getString("merchant_private_key");String alipay_public_key = jsonObject.getString("alipay_public_key");String return_url = jsonObject.getString("return_url");String notify_url = jsonObject.getString("notify_url");//获得初始化的AlipayClient/*AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key,AlipayConfig.json_type, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);*/AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id, merchant_private_key,AlipayConfig.json_type, AlipayConfig.charset, alipay_public_key, AlipayConfig.sign_type);//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(return_url);alipayRequest.setNotifyUrl(notify_url);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();response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();//alipayClient.pageExecute(alipayRequest).getQrCode();out.write(result);out.close();}//扫码支付的实现代码//下单返回链接:public static String getPayQrCode(JSONObject jsonObject) throws Exception {String out_trade_no = jsonObject.getString("out_trade_no");String total_amount = jsonObject.getString("total_amount");String subject = jsonObject.getString("subject");String body = jsonObject.getString("body");String timeout_express = jsonObject.getString("timeout_express");String gatewayUrl = jsonObject.getString("gatewayUrl");String app_id = jsonObject.getString("app_id");String merchant_private_key = jsonObject.getString("merchant_private_key");String alipay_public_key = jsonObject.getString("alipay_public_key");String return_url = jsonObject.getString("return_url");String notify_url = jsonObject.getString("notify_url");//获得初始化的AlipayClient/* AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key,AlipayConfig.json_type, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);*/AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id, merchant_private_key,AlipayConfig.json_type, AlipayConfig.charset, alipay_public_key, AlipayConfig.sign_type);AlipayTradePrecreateRequest alipayRequest = new AlipayTradePrecreateRequest();alipayRequest.setReturnUrl(return_url);alipayRequest.setNotifyUrl(notify_url);JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", out_trade_no);bizContent.put("total_amount", total_amount);bizContent.put("subject", subject);bizContent.put("body", body);bizContent.put("timeout_express", timeout_express);//二维码有效时间 20m(20分钟,可以秒 分钟 天)alipayRequest.setBizContent(bizContent.toString());AlipayTradePrecreateResponse response = alipayClient.execute(alipayRequest);if (response.isSuccess()) {return response.getQrCode();} else {return response.getMsg() + "," + response.getSubCode();}}/*** 查询订单* @param out_trade_no 自定义订单号* @return* @throws Exception*/public static String alipayQuery(String out_trade_no) throws Exception {//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, AlipayConfig.json_type, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);//设置请求参数AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();JSONObject bizContent = new JSONObject();bizContent.put("out_trade_no", out_trade_no);bizContent.put("trade_no", "");alipayRequest.setBizContent(bizContent.toString());AlipayTradeQueryResponse alipayTradeQueryResponse = alipayClient.execute(alipayRequest);if(alipayTradeQueryResponse.isSuccess()){if(alipayTradeQueryResponse.getTradeStatus().equals("WAIT_BUYER_PAY")){return   "交易创建,等待买家付款";}else if(alipayTradeQueryResponse.getTradeStatus().equals("TRADE_CLOSED")){return  "未付款交易超时关闭,或支付完成后全额退款";} else if (alipayTradeQueryResponse.getTradeStatus().equals("TRADE_SUCCESS")) {return  "交易支付成功";}else if(alipayTradeQueryResponse.getTradeStatus().equals("TRADE_FINISHED")){return  "交易结束,不可退款";}}else {return  alipayTradeQueryResponse.getMsg();}return alipayTradeQueryResponse.getBody();}//异步回调public static boolean returnUrl(HttpServletRequest request) throws Exception {/*response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();*///获取支付宝GET过来反馈信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";}valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}//System.out.println(params);//调用SDK验证签名boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, "UTF-8",AlipayConfig.sign_type);return signVerified;/*if(signVerified) {//支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");out.write("trade_no:"+trade_no+","+"out_trade_no"+out_trade_no);}else {out.println("验签失败");}*/}/*** 将异步通知的参数转化为Map* @param request* @return*/public static Map<String, String> toMap(HttpServletRequest request) {System.out.println(">>>>" + request.getQueryString());Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";}// 乱码解决,这段代码在出现乱码时使用。// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}return params;}}

JAVA 对接支付宝的 网页支付、当面付 工具类相关推荐

  1. JAVA对接支付宝,实现支付功能

    网站对接支付宝支付 沙盒开通 支付宝给我们提供了支付宝支付沙盒 供测试 注册沙盒可以自行 百度开通 这里不过多介绍 对接支付宝主要流程 我们在我们订单支付时给支付宝发送一个创建订单请求 在创建订单时创 ...

  2. java对接支付宝小程序支付

    今天晚上12点部署生产项目,又是个不眠夜. 之前整的好多东西都忘光了,还是记录下来吧. 跟对接支付宝支付差不多,地址:小程序支付能力介绍 | 小程序 开通流程: 1.先要去支付宝开放平台,创建小程序. ...

  3. 支付宝支付-当面付之扫码支付「扫码支付」

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付 支付宝支付-手机浏览器H5支付 支付宝支付-当面付之扫码支付「本文」 当面付包含两种支付方式:商品条形码支付 + 扫码支付 经过前面两 ...

  4. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

  5. java对接支付宝支付

    java对接支付宝支付演示 现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付 废话不多说 上代码 引入支付宝官方的sdk <!-- https://mvnrepository ...

  6. java支付宝电脑网页支付

    java支付宝电脑网页支付 官网文档:https://opendocs.alipay.com/open/270/105902 电脑网站支付 1.先给应用申请电脑网页支付功能 2.根据接口文档 ,请求支 ...

  7. 支付宝手机网页支付java demo调试问题和解决办法

    在使用支付宝手机网页支付的时候遇到一些问题跟大家分享一下. 1.生成签名的时候,使用Base64加密时报错:DerInputStream.getLength():lengthTag = 127, to ...

  8. java对接支付宝实现支付功能

    ** java对接支付宝实现支付功能 ** Controller /*** 支付功能* @return*/ @RequestMapping("/test") public Mode ...

  9. java对接支付宝支付(手机网站支付)

    记录一下对接支付宝支付的过程,既是对这段时间工作的总结,也希望能对之后需要对接支付宝手机网站支付的小伙伴一点帮助. 1.查看官方文档,具体对接流程(https://docs.open.alipay.c ...

最新文章

  1. python读文件和写文件-python开发--从文件中读取数据和写入文件
  2. 【Leetcode】Palindrome Number
  3. [转]常用OCR软件介绍
  4. SQL mysql优化
  5. DVWA upload
  6. BCB线程的互斥与同步
  7. 基于Tiles框架Struts框架的UI 设计—几种组织HTML和JSP视图组件
  8. 微信小程序 地图功能的实现 map
  9. 403. 青蛙过河--(每日一难phase2--day10)
  10. 网盘共享文件有病毒吗?
  11. STM32核心板设计——电源设计
  12. 531 孤独像素 I
  13. 试用《Cascadeur》:一款基于物理的角色动画软件
  14. 红到发紫的人工智能,2019运势如何?
  15. 8寸Single机台喷淋去胶加工服务
  16. 机器学习(十五) - Bias vs. Variance
  17. 论文学习1----理解深度学习需要重新思考泛化Understanding deep learning requires rethinking generalization
  18. Cache数据库之ECP改M卡死问题
  19. 小程序毕设作品之微信电子书阅读小程序毕业设计(6)开题答辩PPT
  20. pygame学习手册(三):精灵与碰撞检测

热门文章

  1. Kindle 2 国际版固件升级到2.5.2
  2. 从零开始学习Java设计模式 | 软件设计原则篇:接口隔离原则
  3. Getshell思路总结
  4. 基于51单片机的简单计算器
  5. Android性能优化一绘制原理分析
  6. Linux学习第九课、磁盘容量配额、RAID磁盘冗余阵列
  7. Python清除异常值四分位法
  8. java-php-python-ssm-预约健身私教网站-计算机毕业设计
  9. python基础篇之循环语句(附加选车牌号小系统开发)
  10. c语言之格式控制字符与输入输出函数