Java整合支付宝扫码支付

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

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.最后启动项目就可以了这里的账户名就是你的沙箱账号和密码
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值