集成支付宝沙箱支付

沙箱环境是支付宝开放平台为开发者提供的与生产环境完全隔离的联调测试环境,开发者在沙箱环境中完成的调用不会对生产环境中的数据造成任何影响。
沙箱环境会自动完成或忽略一些场景的业务门槛,例如:开发者无需等待产品签约,即可直接在沙箱环境调用接口,使得开发集成工作可以与商务流程并行,从而提高项目整体的交付效率。
注意:
● 由于沙箱环境并非 100% 与生产环境一致,接口的实际响应逻辑请以生产环境为准,沙箱环境开发调试完成后,仍然需要在生产环境进行测试验收。
● 沙箱环境拥有完全独立的数据体系,沙箱环境下返回的数据(比如用户 ID 等)在生产环境中都是不存在的,开发者不可将沙箱环境返回的数据与生产环境中的数据混淆。

一,注册支付宝开放平台

地址: https://open.alipay.com/develop/sandbox/app
一般第一次就会叫你注册

二,进入控制台

1,沙箱应用

集成支付宝沙箱支付_第1张图片
这里需要注意的:
appID: 应用id 开发时需要用到
绑定的商家账号(PID):就是说你是开发者,希望把钱转到哪个人下面,这个就是干这个的,但是这个是虚拟的,可以在下面的沙箱账号里面找到,即与沙箱账号里面的商家绑定。
接口加签方式:这里用系统默认的就好
支付宝网关地址:注意一下是否改变了,变了需要到代码里面改为最新的

2,沙箱账号

集成支付宝沙箱支付_第2张图片
支付宝默认给我们提供了两个测试账号,一个商家,一个买家(支付页面时填)

3,沙箱工具

集成支付宝沙箱支付_第3张图片

三,开发

1,maven依赖

        <dependency>
            <groupId>com.alipay.sdkgroupId>
            <artifactId>alipay-sdk-javaartifactId>
            <version>4.9.28.ALLversion>
        dependency>

2,测试模板代码

package com.chen.template;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * @Author @Chenxc
 * @Date 2023.07.31 10:47
 */
@Component
@Data
public class AlipayTemplate {
    //在支付宝创建的应用的id
    private   String app_id = "应用的id";


    // 商户私钥,您的PKCS8格式RSA2私钥
    private  String merchant_private_key = "您的PKCS8格式RSA2私钥";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    private  String alipay_public_key = "支付宝公钥";



    // 服务器[异步通知]页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息
    private  String notify_url = "http://你的公网IP:8010/payed/notify";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    //同步通知,支付成功,一般跳转到成功页
    private  String return_url= "http://你的公网IP:8010/payed/success";

    // 签名方式
    private  String sign_type = "RSA2";

    // 字符编码格式
    private  String charset = "utf-8";

    // 支付宝网关; https://openapi.alipaydev.com/gateway.do
    private  String gatewayUrl = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";



    //outTradeNo 订单号
    public  String pay(String outTradeNo) throws AlipayApiException {

        //AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);
        //1、根据支付宝的配置生成一个支付客户端
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,
                app_id, merchant_private_key, "json",
                charset, alipay_public_key, sign_type);

        //2、创建一个支付请求 //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);

        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = outTradeNo;
        //付款金额,必填
        String total_amount = "1000";
        //订单名称,必填
        String subject = "沙箱开发费用";
        //商品描述,可空
        String body = "沙箱开发费用";
        //timeout_express 1分钟超时时间未支付自动关单
        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"timeout_express\":\"1m\","
                + "\"body\":\""+ body +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        String result = alipayClient.pageExecute(alipayRequest).getBody();

        //会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面
        System.out.println("支付宝的响应:"+result);

        return result;

    }



}

3,controller处理

package com.chen.controller;

import com.alipay.api.AlipayApiException;
import com.chen.template.AlipayTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.Map;

/**
 * @Author @Chenxc
 * @Date 2023.07.31 10:43
 */
@RestController
@RequestMapping("/payed")
public class AlipayController {

    @Autowired
    private AlipayTemplate alipayTemplate;

    /**
     * 处理支付宝支付结果异步通知 必须是 post 返回 success
     * @return
     */
    @PostMapping("/notify")
    public String handleNotify(HttpServletRequest request){
        Map<String, String[]> requestParams = request.getParameterMap();
        System.out.println("requestParams 支付宝通知..." + requestParams);
        return "success";
    }

    /**
     * 处理支付宝支付结果同步通知 任意返回  支付包在我们支付成功后会在几秒后会提示正在返回
     商家页面,这个页面就是这个
     * @return
     */
    @RequestMapping("/success")
    public String success(){
        return "恭喜,支付成功";
    }


    /**
     * 调用支付宝支付后 支付宝会给我们返回一个支付页面,我们直接返回即可,让用户在这个页面上完成支付
     * @return
     * @throws AlipayApiException
     * @throws UnsupportedEncodingException
     */
    @GetMapping(value = "/payOrder/{no}",produces = "text/html") //产生一个html
    public String aliPayOrder(@PathVariable(value = "no",required = true)String no) throws AlipayApiException {
        String pay = alipayTemplate.pay(no);
        //返回的是 html页面信息
        System.out.println("pay=========================>" + pay);
        return pay;
    }
}

调用支付后,支付宝返回的页面,我们直接返回即可
集成支付宝沙箱支付_第4张图片
支付宝账户付款,填写上面沙箱账户里的买家

你可能感兴趣的:(1024程序员节,java,spring,boot)