对接支付宝 生成付款码功能

对接支付宝当面付生成二维码


前言

前几天突然告诉我要对接一个新项目,开发一个支付宝支付得功能,最后研究一下获取支付宝二维码字符串在前台生成二维码比较适合我们得项目.

一、开发前准备

1.首先需要前往支付宝开放平台注册个人账号
注册网址:https://open.alipay.com/dev/workspace
2.在申请成功后选择沙箱工具(否则申请应用会耽误一阵时间)
登录成功后选择左下角沙箱在这里插入图片描述
3.在沙箱账号中获取我们需要得参数
在这里插入图片描述
如测试用的 appid , pid 在接口加密方式选择公钥模式点击查看可以看到对应的 应用公钥,应用私钥,支付宝公钥等等.

二、使用步骤

1.将支付宝需要的依赖引入到我们maven得pom.xml中

  <dependency>
        <groupId>com.alipay.sdk</groupId>
        <artifactId>alipay-sdk-java</artifactId>
        <version>4.31.7.ALL</version>
 </dependency>

2.在项目中配置参数
在application.yml中添加支付宝得相关参数
在这里插入图片描述
注意:异步回调地址一定要外网可以访问到 局域外网和内网都不符合要求!!!

3.创建支付宝properties文件 创建get 和 set方法
在这里插入图片描述
4.在controller中写获取支付宝二维码的字符串的方法 和异步通知的方法 建议使用post请求 可参考文档https://opendocs.alipay.com/open/194/106078 编写代码
在这里插入图片描述
在向支付宝发送请求成功后
AlipayTradePrecreateResponse response = null;
response = alipayClient.execute(request);
在response中有一个getQrCode方法
这个就是获取支付宝二维码字符串得方法,测试时可在控制台输出这个字符串,复制这个字符串到草料二维码生成器中看这个二维码是否正确,生成得二维码可以用沙箱账号扫一扫付款.
5.异步回调接收以及验签参考使用 可以去支付宝官网找到这部分代码

    System.out.println("--开始接收支付宝回调信息--");
    Map<String, String> params = new HashMap<String, String>();
    try {
        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);
        }
    boolean  alipayflag = AlipaySignature.verifyV1(params,alipayProperties.getAlipayPublicKey(),alipayProperties.getCharSet(),alipayProperties.getSignType());
        if(alipayflag){
           System.out.println("success");
        }
        else{
            this.setSuccess(false);
            this.setMessage("验签失败");
        }
        System.out.println(alipayflag);
    }catch (Exception e){
        System.out.println(e);
    }
    PrintWriter writer = null;
    try {
        writer = response.getWriter();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println(params);
    String Paytime =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    String PayState = "1";
    writer.write("success"); // 一定要打印success,否则支付宝会一直发送请求  writer.flush();

总结

开发遇到的问题
开发环境属于局域内网无法被支付宝访问到 所以使用内外网穿透工具ngrok
之前一直用花生壳 但是前不久花生壳的htpp请求失效 换了这个内外网穿透工具供测试使用 .

开发思路
首先保证支付宝的所有代码 可以被互联网访问到
1.取业务数据 生成支付宝二维码
2.异步接收用户扫完二维码的回调通知
3.对回调的数据进行验签
4.验签成功后改变人员状态
5.遇到问题可以去支付宝开放平台找人工问清楚

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
支付宝对接有以下几种模式: 1. 支付宝即时到账:商家在支付宝后台配置相关信息,用户在商家的网站或APP上选择支付宝支付方式,跳转到支付宝页面完成支付,支付宝将支付结果返回给商家,商家进行相应处理。 2. 支付宝手机网站支付:商家在自己的网站上集成支付宝的手机网站支付功能,用户在手机上访问商家网站,选择支付宝支付方式,跳转到支付宝页面完成支付,支付宝将支付结果返回给商家,商家进行相应处理。 3. 支付宝电脑网站支付:商家在自己的网站上集成支付宝的电脑网站支付功能,用户在电脑上访问商家网站,选择支付宝支付方式,跳转到支付宝页面完成支付,支付宝将支付结果返回给商家,商家进行相应处理。 4. 支付宝支付:商家在支付宝后台生成二维,用户使用支付宝APP扫描二维完成支付,支付宝将支付结果返回给商家,商家进行相应处理。 5. 支付宝小程序支付:商家在自己的小程序里集成支付宝小程序支付功能,用户在小程序里选择支付宝支付方式,跳转到支付宝页面完成支付,支付宝将支付结果返回给商家,商家进行相应处理。 6. 支付宝花呗分期支付:商家在支付宝后台配置花呗分期支付功能,用户选择花呗分期支付方式,支付宝将分期付款金额转化成一笔笔即时到账的交易,商家进行相应处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值