第三方支付笔记:java接支付宝第三方支付

第一步:沙箱登录注册

支付宝官网的教程:https://opendocs.alipay.com/isv/009v0y
沙箱登录注册地址:https://open.alipay.com(因为是支付宝需支付宝扫码)

注册登录后,会进入控制台,点击研发服务。

进入看到沙箱,会看到自己的APPID等基本信息,java接入时需要。

第二步生成公钥私钥

支付宝公私钥的文档地址:https://opendocs.alipay.com/open/291/105971

因为比较勤奋,我点击第一个,无需下载

生成后将公钥放到的控制台,秘钥处(公钥,私钥都要保存)

连接第三方的基本信息搞定,接下来可以springboot进行测试

第三步springboot接入

网上代码测试:https://www.cnblogs.com/xifengxiaoma/p/10107635.html

主要依赖:

 <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.1.0</version></dependency><!-- fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.48</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

alipay.properties文件(需生成的公钥私钥,ID等):
支付宝接入环境配置文档:https://opendocs.alipay.com/open/200/105311

# 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
appId:2021000117636117
# 商户私钥,您的PKCS8格式RSA2私钥
privateKey: (自己生成的私钥)
# 支付宝公钥,查看地址:https://openhome.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
publicKey: (自己生成的公钥)
# 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数
#notifyUrl: http://外网ip:端口/error.html
## 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
#returnUrl: http://外网ip:端口/sccess.html
# 签名方式
signType: RSA2
# 字符编码格式
charset: utf-8
# 支付宝网关
gatewayUrl: https://openapi.alipaydev.com/gateway.do
# 支付宝网关
logPath: "C:\\"

model:


@Data
public class Alipay implements Serializable {/*** 商品订单号,必填*/private String out_trade_no;/*** 商品标题*/private String subject;/*** 付款金额,必填* 根据支付宝接口协议,必须使用下划线*/private String total_amount;/*** 商品描述,可空*/private String body;/*** 超时时间参数*/private String timeout_express= "10m";/*** 产品编号*/private String product_code= "FAST_INSTANT_TRADE_PAY";
}

AlipayProperties文件,主要是获取alipay.properties文件信息

@Component
public class AlipayProperties {public static final String APP_ID = "appId";public static final String PRIVARY_KEY = "privateKey";public static final String PUBLIC_KEY = "publicKey";public static final String NOTIFY_URL = "notifyUrl";public static final String RETURN_URL = "returnUrl";public static final String SIGN_TYPE = "signType";public static final String CHARSET = "charset";public static final String GATEWAY_URL = "gatewayUrl";public static final String LOG_PATH = "logPath";/*** 保存加载配置参数*/private static Map<String, String> propertiesMap = new HashMap<String, String>();/*** 加载属性*/public static void loadProperties() {PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();try {Resource resources = resolver.getResource("classpath:alipay.properties");PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();propertiesFactoryBean.setLocation(resources);propertiesFactoryBean.afterPropertiesSet();Properties properties = propertiesFactoryBean.getObject();for (String key:properties.stringPropertyNames()) {propertiesMap.put(key,(String) properties.get(key));}} catch (IOException e) {e.printStackTrace();}catch (Exception e) {new Exception("配置文件加载失败");}}/*** 获取配置参数值* @param key* @return*/public static String getKey(String key) {return propertiesMap.get(key);}public static String getAppId() {return propertiesMap.get(APP_ID);}public static String getPrivateKey() {return propertiesMap.get(PRIVARY_KEY);}public static String getPublicKey() {return propertiesMap.get(PUBLIC_KEY);}public static String getNotifyUrl() {return propertiesMap.get(NOTIFY_URL);}public static String getReturnUrl() {return propertiesMap.get(RETURN_URL);}public static String getSignType() {return propertiesMap.get(SIGN_TYPE);}public static String getCharset() {return propertiesMap.get(CHARSET);}public static String getGatewayUrl() {return propertiesMap.get(GATEWAY_URL);}public static String getLogPath() {return propertiesMap.get(LOG_PATH);}
}

PropertiesListener文件(配置监听,每次项目运行前读取alipay.properties文件信息)

/*** @Author: Lanys* @Description:* @Date: Create in 22:08 2021/4/10*/@Component
public class PropertiesListener  implements ApplicationListener<ApplicationStartedEvent> {@Overridepublic void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {AlipayProperties.loadProperties();}
}

controller:

*** 订单接口* * @author Louis* @date Dec 12, 2018*/
@RestController()
@RequestMapping("order")
public class OrderController {@Autowiredprivate PayService payService;/*** 阿里支付* @param tradeNo* @param subject* @param amount* @param body* @return* @throws AlipayApiException*/@PostMapping(value = "alipay")public String alipay(String outTradeNo, String subject, String totalAmount, String body) throws AlipayApiException {Alipay alipayBean = new Alipay();alipayBean.setOut_trade_no(outTradeNo);alipayBean.setSubject(subject);alipayBean.setTotal_amount(totalAmount);alipayBean.setBody(body);return payService.aliPay(alipayBean);}
}

service:

/*** 支付服务* @author Louis* @date Dec 12, 2018*/
public interface PayService {/*** 支付宝支付接口* @param alipayBean* @return* @throws AlipayApiException*/String aliPay(Alipay alipayBean) throws AlipayApiException;}

Impl:

@Service
public class PayServiceImpl implements PayService {@Autowiredprivate AlipayConfig alipayConfig;@Overridepublic String aliPay(Alipay alipayBean) throws AlipayApiException {return alipayConfig.pay(alipayBean);}}

接入:

/*** @Author: Lanys* @Description:* @Date: Create in 22:31 2021/4/10*/@Component
public class AlipayConfig {/*** 支付接口* @param alipayBean* @return* @throws AlipayApiException*/public String pay(Alipay alipayBean) throws AlipayApiException {String serverUrl = AlipayProperties.getGatewayUrl();String appId = AlipayProperties.getAppId();String privateKey = AlipayProperties.getPrivateKey();String format = "json";String charset = AlipayProperties.getCharset();String alipayPublicKey = AlipayProperties.getPublicKey();String signType = AlipayProperties.getSignType();String returnUrl = AlipayProperties.getReturnUrl();String notifyUrl = AlipayProperties.getNotifyUrl();AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType);AlipayTradePagePayRequest alipayOpenAppServiceApplyRequest = new AlipayTradePagePayRequest();alipayOpenAppServiceApplyRequest.setReturnUrl(returnUrl);alipayOpenAppServiceApplyRequest.setNotifyUrl(notifyUrl);alipayOpenAppServiceApplyRequest.setBizContent(JSON.toJSONString(alipayBean));String alipayTradePagePayResponse = alipayClient.pageExecute(alipayOpenAppServiceApplyRequest).getBody();return alipayTradePagePayResponse;}
}

html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<H1>支付测试</H1>
<hr>
<div class="form-container"><form id="form" action="order/alipay" method="post">*商户订单 :<input type="text" name="outTradeNo" value="dzcp100010001"><br>*订单名称 :<input type="text" name="subject" value="华为手机"><br>*付款金额 :<input type="text" name="totalAmount" value="0.1" ><br>*商品描述 :<input type="text" name="body" value="华为P40手机 "><br><input type="button" value="支付宝支付" onclick="submitForm('order/alipay')"> </form>
</div>
</body>

点击支付宝支付后


问题:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210411230116832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0Njk3NzU0,size_16,color_FFFFFF,t_70

如果出现上面这种情况,关闭支付宝相关的页面(建议关闭浏览器重启重新访问自己的接口就可以了)

总结

此文章,借鉴https://www.cnblogs.com/xifengxiaoma/p/10107635.html该博主的文章充当笔记,代码方面,根据springboot框架可以把alipay.properties放入yml中,使用注解@ConfigurationProperties或@value实现。

Spring Boot接支付宝第三方支付(沙箱)相关推荐

  1. Spring Boot整合海外第三方支付Coda Payments

    前言 由于公司项目需要对接海外支付,本次对接的是Coda Payments,该支付集成还需先开通账号才能看文档,比较麻烦.为方便大家后续集成,在此做个简单记录. 一.Coda Payment是什么? ...

  2. 调用支付宝第三方接口(沙箱环境) Spring Boot+Maven

    调用支付宝第三方接口(沙箱环境) Spring Boot+Maven 一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登 ...

  3. Spring Boot集成支付宝电脑网站支付功能

    Spring Boot集成支付宝电脑网站支付功能 接入准备 登录 创建应用 添加能力 生成私钥与公钥 开发设置 沙箱环境 示例Demo的使用与学习 下载Demo 启动项目 参数配置 执行测试 Spri ...

  4. springboot+调用支付宝第三方接口(沙箱环境)

    springboot+调用支付宝第三方接口(沙箱环境) 大神勿喷!! 网址:https://developers.alipay.com/platform/developerIndex.htm 沙箱环境 ...

  5. Spring Boot集成支付宝(最新版SDK)—— 手机支付

    前言 前些日子写了一篇关于H5网页集成支付宝的文章: Spring Boot集成支付宝(最新版SDK)-- H5/网页支付 当时写了好久,往那一坐就是俩小时,写完直接就发布了,发布之后才感觉少点啥-- ...

  6. spring boot+Vue整合第三方登录JustAuth

    JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! github地址:https://github.com/justa ...

  7. Spring Boot中的微信支付(小程序)

    前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. 一.申请流程和步骤 图1-1 注册微信支付账号 获取微信小程序APPID 获取微信商家的商户ID 获取 ...

  8. Spring Boot 快速集成第三方登录功能

    Spring Boot 快速集成第三方登录功能 前言 此 demo 主要演示 Spring Boot 项目如何使用 史上最全的第三方登录工具 - JustAuth 实现第三方登录,包括 QQ 登录.G ...

  9. 浅谈支付宝第三方支付

    技术点(九):支付宝第三方支付 1)下载demo地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.aWu6YY& ...

  10. 一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付

    一个强大的开源的基于Spring Boot开发的Web支付系统项目,支持聚合码支付.

最新文章

  1. 科学计算工具NumPy(3):ndarray的元素处理
  2. Redis事件驱动库转
  3. 崛起的中国服务器市场迎来旺盛的SPEC测试需求
  4. Exchange Server 2016管理系列课件33.通讯组仲裁
  5. 自己写的一段预测双色球号码的Java代码
  6. [渝粤教育] 西南科技大学 电子技术基础 在线考试复习资料(1)
  7. Matlab和C++混合编程
  8. pytest测试实战 电子书_电子书丨Selenium 3+Python 3自动化测试项目实战:从菜鸟到高手...
  9. e盾服务端源码_原罪西游源码发布!!!
  10. 超融合硬件损坏导致Oracle RAC异常恢复实录
  11. sja1000 can控制器波特率计算方法
  12. Java 泛型的实例化总结
  13. 软件定义和硬件重构知多少(三)
  14. 【问题记录】02 Linux服务器安装MySql数据库报错:Failing package is: mysql-community-server GPG Keys are configured as
  15. linux netcdf编译,Netcdf4安装指南
  16. flutter图片识别_Flutter 图片解码与缓存管理研究
  17. Android:InflateException: Binary XML file line #12: Error inflating class null
  18. 旅游类App的原型制作分享
  19. VMware XP安装安装程序没有找到硬盘驱动器
  20. python-实现多元回归及预测

热门文章

  1. gis核密度分析工具_核密度分析工具的初探(Kernel Density)
  2. java excel 分页显示_分页显示Excel数据
  3. 最新 Hostinger域名转出教程 (2019年6月版本)
  4. 星上SAR实时处理调研2-典型应用
  5. SEO与SEM的区别和联系
  6. 朋友让帮忙写个理发店的会员信息管理系统...
  7. SI24R1可以替代NRF24L01P软件硬件DIY兼容成功
  8. pandas 两个DataFrame带条件匹配
  9. 测试转开发,我都经历了什么
  10. wake-on-lan java_大神教你用Python实现Wake On Lan远程开机功能