Java整合支付宝扫码支付
1.支付宝开放平台注册账号,进入管理中心,找到研发服务

2.进入沙箱当面付引导流程
根据流程完成 1,2,3
- 1、下载支付宝密钥生成器:
- 2、密钥格式选择:PKCS8;密钥长度选择:2048;点击“生成密钥”按钮;
- 3、点击商户应用公钥右侧的“复制公钥”按钮,点击此处:配置应用公钥:
3.下载示例demo
点击沙箱应用的 电脑网站支付 选择SDK&JAVA版demo下载

找到 AlipayConfig.java 文件拷贝到自己的项目中 如下
package com.alipay.config;
import java.io.FileWriter;
import java.io.IOException;
/* *
*类名:AlipayConfig
*功能:基础配置类
*详细:设置帐户有关信息及返回路径
*修改日期:2017-04-05
*说明:
*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
*该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";
// 商户私钥,您的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://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";//跳转的你的方法
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";//支付成功后你的跳转页面
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipay.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();
}
}
}
}
}
4.这里配置之前生成的应用公钥
5.导入maven依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.11.33.ALL</version>
</dependency>
6.此时就可以编写跳转第三方支付代码了
package com.star.controller;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.star.config.AlipayConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* @author pengxin
* @version 1.0
* @date 2021/1/26 10:09
*/
@RestController
@Slf4j
public class AlipayController {
/**
* 统一收单下单并支付页面接口
*/
@RequestMapping("/alipay")
public void pay(String price, String name,HttpServletResponse response) throws Exception {
DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset,AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest();
alipayTradePagePayRequest.setReturnUrl(AlipayConfig.return_url);//跳页面
alipayTradePagePayRequest.setNotifyUrl(AlipayConfig.notify_url);//跳方法
//模拟参数
Map<String,Object> map = new HashMap<>();
map.put("out_trade_no",System.currentTimeMillis());//订单号
map.put("product_code","FAST_INSTANT_TRADE_PAY");//PC端支付方式
map.put("total_amount",price+".00");//交易金额
map.put("subject",name);//商品名称
String string = JSONObject.toJSONString(map);
log.info("模拟数据"+string);
alipayTradePagePayRequest.setBizContent(string);
String body = alipayClient.pageExecute(alipayTradePagePayRequest).getBody();
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(body);
response.getWriter().flush();
response.getWriter().close();
}
/**
* 统一收单交易退款接口
*/
@RequestMapping("/refund")
public void refund(HttpServletResponse response) throws Exception {
DefaultAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,AlipayConfig.app_id,AlipayConfig.merchant_private_key,"json",AlipayConfig.charset,AlipayConfig.alipay_public_key,AlipayConfig.sign_type);
AlipayTradeRefundRequest alipayTradeRefundRequest = new AlipayTradeRefundRequest();
alipayTradeRefundRequest .setReturnUrl(AlipayConfig.return_url);//跳页面
alipayTradeRefundRequest .setNotifyUrl(AlipayConfig.notify_url);//跳方法
Map<String,Object> map = new HashMap<>();
//map.put("trade_no",);//支付宝交易号
map.put("out_trade_no",123456789);//订单号
map.put("refund_amount",88.88);//退款金额
String string = JSONObject.toJSONString(map);
log.info("退款数据"+string);
alipayTradeRefundRequest.setBizContent(string);
String body = alipayClient.pageExecute(alipayTradeRefundRequest).getBody();
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(body);
response.getWriter().flush();
response.getWriter().close();
}
}
6.注意,有些必须配置的参组,详情看官方API

7.最后启动项目就可以了这里的账户名就是你的沙箱账号和密码

本文介绍了如何在Java项目中整合支付宝扫码支付功能,包括在支付宝开放平台注册、获取密钥、下载Demo、配置公钥、引入依赖以及编写支付代码等步骤。
2239

被折叠的 条评论
为什么被折叠?



