Java-支付宝沙箱支付

发布时间:2024年01月19日

支付宝沙箱支付 内网穿透 boot整合支付

支付宝沙箱配置

支付宝沙箱 操作指引:沙箱环境 - 支付宝文档中心 (alipay.com)

进入沙箱, 需要 使用 实名认证的支付宝账号

[沙箱应用] 注意 这里需要记录 APPID 及 私钥与支付宝公钥

自定义密钥:

需要安装 支付宝的密钥工具: AlipayDevelopmentAssistant-1.0.11.exe

安装后 ,双击打开, 即:

注意 [应用私钥] 的值 程序中 需要使用, [应用公钥] -在支付宝页面使用

点击[设置] 在 应用公钥的位置 ,填入 刚刚 生成的公钥 生成 支付宝 公钥, [支付宝公钥一定保存好 程序会使用]

切换为 沙箱账号, 可以看到 卖家与买家信息, 注意 ,买家的账号信息, 因为支付时 要 输入 买家信息

以上的 内容准备完毕后 , 支付宝沙箱的配置 基本完成了.

应该记录下来 5个 重要的信息

分别为

appid

网关

应用私钥

支付宝公钥

买家账号及支付密码

Springboot支付宝沙箱支付

创建 工程, 添加 jar

pom.xml

?<dependencies>
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ?</dependency>
? ? ?<dependency>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-thymeleaf</artifactId>
? ? ?</dependency>
? ? ?<!--引入 沙箱支付sdk-->
? ? ?<dependency>
? ? ? ? ?<groupId>com.alipay.sdk</groupId>
? ? ? ? ?<artifactId>alipay-sdk-java</artifactId>
? ? ? ? ?<version>4.31.7.ALL</version>
? ? ?</dependency>
??
?</dependencies>
?server:
?  port: 8001

编写启动类

?@SpringBootApplication
?public class App {
? ? ?public static void main(String[] args) {
? ? ? ? ?SpringApplication.run(App.class,args);
? ?  }
?}

定义工具类: UUIDUtil .java 生成 随机数据

?package com.ly.util;
??
?import java.util.UUID;
??
?public class UUIDUtil {
? ? ?/**
? ? ? * 生成可带前后缀的唯一字符串
? ? ? * @param prefix
? ? ? * @param suffix
? ? ? * @return
? ? ? */
? ? ?public static String generateSn(String prefix,String suffix){
? ? ? ? ?return prefix + UUID.randomUUID().toString().replace("-", "").toUpperCase() + suffix;
? ?  }
??
?}

编写 沙箱支付工具类

?package com.ly.util;
??
?import com.alibaba.fastjson.JSONObject;
?import com.alipay.api.AlipayApiException;
?import com.alipay.api.AlipayClient;
?import com.alipay.api.DefaultAlipayClient;
?import com.alipay.api.domain.AlipayDataDataserviceBillDownloadurlQueryModel;
?import com.alipay.api.internal.util.AlipaySignature;
?import com.alipay.api.request.*;
?import com.alipay.api.response.AlipayTradeOrderinfoSyncResponse;
?import com.alipay.api.response.AlipayTradePagePayResponse;
??
?import javax.servlet.http.HttpServletRequest;
?import java.math.BigDecimal;
?import java.util.HashMap;
?import java.util.Iterator;
?import java.util.Map;
??
?public class Alipay {
? ? ?/**
? ? ? * APP_ID 应用id
? ? ? */
? ? ?public final static String APP_ID ="自己的沙箱的APPID";
??
? ? ?/**
? ? ? * 应用私钥
? ? ? */
? ?public ?final static String APP_PRIVATE_KEY="自己的应用私钥";
? ? ?/**
? ? ? * 编码
? ? ? */
? ? ?public final static String CHARSET ="UTF-8";
??
? ? ?/**
? ? ? * 支付宝公钥
? ? ? */
? ? ?public final static String ALIPAY_PUBLIC_KEY ="自己的支付宝公钥";
??
? ? ?/**
? ? ? * (沙箱)网关
? ? ? */
? ? ?public final static String GETEWAY_URL ="https://openapi.alipaydev.com/gateway.do";
??
? 
? ? ?// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
? ? ?public static String notify_url = "内网穿透地址/pay/alipay_notify";
??
? ? ?// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
? ? // public static String return_url = "http://mytest.free.svipss.top/list";
? ? ? public static String return_url = "内网穿透地址/list"; ?// 支付成功 最后一步 跳转 返回的 页面
??
??
??
? ? ?/**
? ? ? * 格式化
? ? ? */
? ? ?public final static String FORMAT ="json";
??
? ? ?/**
? ? ? * 签名类型
? ? ? */
? ? ?public final static String SIGN_TYPE ="RSA2";
??
? ? ?/**
? ? ? * 用户 下单后 生成 支付宝交易号
? ? ? * @param sn
? ? ? * @param info
? ? ? * @param sub
? ? ? * @param amount
? ? ? * @return
? ? ? */
? ? ?public static String genernatePCAlipayHtml(String sn,String info,String sub,BigDecimal amount)  {
? ? ? ? ?//获得初始化的AlipayClient
? ? ? ? ?AlipayClient alipayClient = new DefaultAlipayClient(GETEWAY_URL,APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET,ALIPAY_PUBLIC_KEY, SIGN_TYPE);
??
? ? ? ? ?//设置请求参数
? ? ? ? ?AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
? ? ? ? ?alipayRequest.setReturnUrl(return_url);
? ? ? ? ?alipayRequest.setNotifyUrl(notify_url);
??
? ? ? ? ?//商户订单号,商户网站订单系统中唯一订单号,必填
? ? ? ? ?String out_trade_no = sn;
? ? ? ? ?//付款金额,必填
? ? ? ? ?String total_amount = amount.toString();
? ? ? ? ?//订单名称,必填
? ? ? ? ?String subject = sub;
? ? ? ? ?//商品描述,可空
? ? ? ? ?String body = info;
??
? ? ? ? ?alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
? ? ? ? ? ? ? ? ?+ "\"total_amount\":\""+ total_amount +"\","
? ? ? ? ? ? ? ? ?+ "\"subject\":\""+ subject +"\","
? ? ? ? ? ? ? ? ?+ "\"body\":\""+ body +"\","
? ? ? ? ? ? ? ? ?+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
? ? ? ? ?//请求
? ? ? ? ?String result = null;
? ? ? ? ?try {
? ? ? ? ? ? ?AlipayTradePagePayResponse res = alipayClient.pageExecute(alipayRequest);
? ? ? ? ? ? ?result = res.getBody();
? ? ? ? ? ? ?System.out.println("---------支付宝pc html-------"+result);
? ? ? ?  } catch (AlipayApiException e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ?  }
??
? ? ? return result;
? ?  }
? ? }

编写控制层:

?
package com.ly.controller;
??
?import com.alipay.api.AlipayApiException;
?import com.ly.util.Alipay;
?import com.ly.util.UUIDUtil;
?import org.springframework.stereotype.Controller;
?import org.springframework.web.bind.annotation.GetMapping;
?import org.springframework.web.bind.annotation.ResponseBody;
??
?import java.math.BigDecimal;
??
?/*
? ?支付 控制层-- 调用沙箱支付 的 api
? */
?@Controller
?public class PayController {
??
? ? ?//生成支付宝 交易号
? ? ?@GetMapping("/make")
? ? ?@ResponseBody
? ? ?public String makeOrderSn() throws AlipayApiException {
??
? ? ? ? ?String sn = UUIDUtil.generateSn("ly","");
? ? ? ? ?// 生成支付宝 交易号
? ? ? ? ?String paysn = Alipay.genernatePCAlipayHtml(sn,"九阳热水壶","618淘宝活动", BigDecimal.valueOf(50));
? ? ? ? ?System.out.println(paysn);
??
??
? ? ? ? ?return paysn;
? ?  }
??
? ? ?//生成支付宝 交易号
? ? ?@GetMapping("/list")
? ? ?@ResponseBody
? ? ?public String list() throws AlipayApiException {
??
? ? ? ? ?return "success";
? ?  }
?}

, 不要访问 接下来 说 内网穿透

内网穿透

我们使用的是 飞鸽的 内网穿透的工具, 免费的隧道 可以使用 7天, 7天后 不可用了, 因此 这里 [最好让一个同学先注册] 其他都用这一个同学的, 等过期了 再换另一个同学的账号

进入到 首页飞鸽管理控制台 (fgnwct.com) 没有账号 注册账号,

然后 登录进入:

进入到 windows_amd64_client 的目录,

双击

看到 上面的内容 表示 内网穿透 成功.

mytest.free.svipss.top 他 就 代表 http://localhost:8001

修改 工具类中的

启动 测试

支付文档说明统一收单下单并支付页面接口 - 支付宝文档中心 (alipay.com)

文章来源:https://blog.csdn.net/ly121862/article/details/135697749
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。