ITPub博客

首页 > 数据库 > 数据库开发技术 > 快速掌握支付宝官方支付,从配置到代码实现(纯干货,无套路)

快速掌握支付宝官方支付,从配置到代码实现(纯干货,无套路)

原创 数据库开发技术 作者:Finally_m 时间:2023-02-02 08:03:00 0 删除 编辑
点击上方蓝字关注我们

前言

Hello,你有没有想辉哥呀?最近有不少小伙伴私信辉哥,问我有没有支付开发的相关教程。只要你有需要,Java架构栈这就给你安排,今个辉哥就给你谈谈如何实现java里的支付开发。保证纯干货,无套路哟!

关注Java架构栈,干货天天都不断。


​

一. 支付宝官方支付

1.访问地址

https://docs.open.alipay.com/270/106291/

2.下载Java版Demo

3.访问沙箱环境

https://openhome.alipay.com/platform/appDaily.htm

选择沙箱环境

4.下载并安装软件

访问地址:https://docs.open.alipay.com/291/105971

5.双击 “支付宝开放平台开发助手” 生成密钥

6.设置密钥

复制上个页面中的应用公钥,返回如下页面,点击设置密钥。

7.更换公钥

点击 查看/设置 会看到如下页面,然后点击 ”更换应用公钥“。

8.生成支付宝公钥

把刚才复制的应用公钥粘贴过来,生成支付宝公钥。

9.获取生成的支付宝公钥

最终要获取的是生成的支付宝公钥。

10.配置公钥到代码中

此时需要注意的是:支付宝公钥相当于加密,应用私钥相当于解密

然后创建项目,把之前下载好的Java版本的Demo导入即可

然后找到AlipayConfig.java进行配置,然后启动项目进行测试

11.添加maven依赖

如果是Maven工程,我们可以导入如下依赖,替换掉Java版本Demo中的jar包。

<dependency>
  <groupId>commons-logging</groupId>
  <artifactId>commons-logging</artifactId>
  <version>1.1.2</version>
</dependency>
<dependency>
  <groupId>com.alipay.sdk</groupId>
  <artifactId>alipay-sdk-java</artifactId>
  <version>4.8.10.ALL</version>
</dependency>

12.测试付款页面

访问:http://localhost:8080/alipay/ 选择付款

13.以测试账号登录

当前是沙箱环境,可以使用沙箱账号进行登录测试

14.点击登录账户付款,跳转到如下页面。

15.找到沙箱账号

沙箱环境下是不能使用手机扫码支付的,所以我们需要找到之前页面,点击沙箱账号,找到买家账号,然后回到上述页面进行登录。

16.输入密码进行支付

17.点击确认付款,然后跳转到支付成功页面

18.正式环境的开发配置

上述完成的是沙箱环境下的支付测试,如果是正式环境下,需要企业申请账号才能进行支付。正式环境下只需要在AlipayConfig.java中修改四个地方即可。

APPID
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";
千锋的 app_id:2017091608770636
私钥
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key ="";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm
//对应APPID下的支付宝公钥。
public static String alipay_public_key = "";

正式环境的网关都为:"https://openapi.alipay.com/gateway.do"
// 支付宝网关
public static String gatewayUrl = "";

19.此时已经是正式环境了,可以使用手机进行扫码支付了

20.扫码支付成功后会跳转如下页面

二. 支付宝支付

为了方便大家操作,辉哥专门给大家封装了一个支付宝的工具类,你可以拿去直接使用哟。

public class AliPayUtil {
    private static final String APP_ID="2017091608770636";

    private static final String APP_PRIVATE_KEY="";

    private static final String ALIPAY_PUBLIC_KEY="";

    private static final AlipayClient client;

    static {
        //获得初始化的AlipayClient
        client=new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                APP_ID, APP_PRIVATE_KEY, "json", "UTF-8", ALIPAY_PUBLIC_KEY,
                "RSA2");
    }

    /**发起支付,获取支付页面
     *@param no 订单号
     *@param money 订单支付金额
     *@param title 订单标题*/

    public static String createPayPC(String no,double money,String title){
        //1.创建请求对象
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        //2.设置请求信息
        //回调地址,必须公网
        request.setNotifyUrl("https://y192580h27.goho.co/server/pay/alipay.do");
        //付款成功,要跳转页面
        request.setReturnUrl("");
        JSONObject bizContent = new JSONObject();
        //订单号
        bizContent.put("out_trade_no", no);
        //订单支付金额 单位元
//        bizContent.put("total_amount", money);
        bizContent.put("total_amount", 0.01);
        //设置订单的标题
        bizContent.put("subject", title);
        //设置商品码,固定
        bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
        request.setBizContent(bizContent.toString());
        try {
            //3.发起请求,获取响应
            AlipayTradePagePayResponse response=client.pageExecute(request);
            //4.验证请求是否成功
            if(response.isSuccess()){
                //5.返回支付页面
                return response.getBody();
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 查询支付状态
     * @param no 订单号*/

    public static String queryPay(String no){
        //1.实例化 请求对象
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        //2.设置请求信息
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", no);
        request.setBizContent(bizContent.toString());

        try {
            //3.发起请求 获取响应
            AlipayTradeQueryResponse response = client.execute(request);
            //4.验证请求是否成功
            if(response.isSuccess()){
                //5.返回支付状态
                return response.getTradeStatus();
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 发起退款*/

    public static boolean refoundPay(String no,double money){
        //1.创建请求对象
        AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
        //2.设置请求信息
        JSONObject bizContent = new JSONObject();
        bizContent.put("refund_amount", money);
        bizContent.put("out_trade_no", no);
        request.setBizContent(bizContent.toString());
        //3.发起请求 获取响应
        try {
            AlipayTradeRefundResponse response = client.execute(request);
            return response.isSuccess();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 关闭支付,未支付的订单
     * @param no 订单号*/

    public static boolean closePay(String no){
        //1.创建请求对象
        AlipayTradeCloseRequest request = new AlipayTradeCloseRequest();
        //2.设置请求信息
        JSONObject bizContent = new JSONObject();
        bizContent.put("trade_no", "2013112611001004680073956707");
        request.setBizContent(bizContent.toString());
        //3.发起请求 获取响应
        try {
            AlipayTradeCloseResponse response = client.execute(request);
            return response.isSuccess();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 生成对账单
     * @param date 请求对应的对账日期
     * @return 对账单的下载地址*/

    public static String downBill(String date){
        //1.实例化请求对象
        AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
        //2.设置请求信息
        request.setBizContent("{" +
                "  \"bill_type\":\"trade\"," +
                "  \"bill_date\":\""+date+"\"," +
                "  \"smid\":\"2088123412341234\"" +
                "}");
        //3.发起请求 获取响应
        try {
            AlipayDataDataserviceBillDownloadurlQueryResponse response = client.execute(request);
            if(response.isSuccess()){
                return response.getBillDownloadUrl();
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
       return null;
    }
    /**
     * 生成二维码支付请求,返回二维码的串码
     *@param no 订单号
     *@param money 订单支付金额
     *@param title 订单标题*/

    public static String createQrCodePay(String no,double money,String title){
        //1.实例化请求对象
        AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
        //2.设置请求信息
        request.setNotifyUrl("");
        JSONObject bizContent = new JSONObject();
        bizContent.put("out_trade_no", no);
        bizContent.put("total_amount", money);
        bizContent.put("subject", title);

        request.setBizContent(bizContent.toString());
        //3.发起请求获取响应
        try {
            AlipayTradePrecreateResponse response=client.execute(request);
            //4.验证是否成功
            if(response.isSuccess()){
                //5.返回支付的二维码的串码
                return response.getQrCode();
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
}

三. 总结

好了,今天的文章就到这啦,辉哥希望大家可以通过这个案例,完成支付宝的支付功能哈。如果你还有其他的问题,欢迎私聊辉哥,在学习的路上,辉哥与你一路相伴!

扫码咨询了解课程详情,获取课程配套资料!



扫码或者点击文末左下角【阅读原文】快速进入学习!



点击【阅读原文】,免费开始学习支付宝支付视频课程!

原文作者:Java架构栈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-04-13

  • 博文量
    573
  • 访问量
    243805