当前位置: 首页 > news >正文

对接支付宝,阿里云沙箱服务

1.支付宝官网,在三个页面进行操作配置,商品,商家对接

2.获取官方文档的SDK代码


public class Main {public static void main(String[] args) throws Exception {// 1. 设置参数(全局只需设置一次)Factory.setOptions(getOptions());try {// 2. 发起API调用(以创建当面付收款二维码为例)AlipayTradePrecreateResponse response = Payment.FaceToFace().preCreate("Apple iPhone11 128G", "2234567890", "5799.00");// 3. 处理响应或异常if (ResponseChecker.success(response)) {System.out.println("调用成功");} else {System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);}} catch (Exception e) {System.err.println("调用遭遇异常,原因:" + e.getMessage());throw new RuntimeException(e.getMessage(), e);}}private static Config getOptions() {Config config = new Config();config.protocol = "https";config.gatewayHost = "openapi.alipay.com";config.signType = "RSA2";config.appId = "<-- 请填写您的AppId,例如:2019091767145019 -->";// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中config.merchantPrivateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";//注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可// config.alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";//可设置异步通知接收服务地址(可选)config.notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->";//可设置AES密钥,调用AES加解密相关接口时需要(可选)config.encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";return config;}
}

3.进入支付宝沙箱环境,创建商家账号和买家账号,模拟支付情况,方便进行代码开发和测试

4.整合支付宝下单接口,整改到自己代码中

参考短信对接流程:第一步: 引入依赖
第二步:applictaion.properties文件配置,把配置项映射为配置类,方便读取(类似短信对接的@vlaue注入)第三步:增加自定义异常
第四步:SDK代码整合到service层,作为一个工具类
@Service
public class AliPayService{@Resourceprivate AliProperties allproperties;public AlipayTradePageResponse pay(STring subject,String outTradeNo,String totalAmount){// 1. 设置参数(全局只需设置一次)Factory.setOptions(getOptions());try {// 2. 发起API调用(以创建当面付收款二维码为例)AlipayTradePrecreateResponse response = Factory.Payment.Page().pay(subject,outTradeNo,totalAmount,null);// 3. 处理响应或异常if (ResponseChecker.success(response)) {return response;} else {//抛出自定义异常}} catch (Exception e) {//抛出自定义异常}}public AlipayTradeQueryResponse query(String outTradeNo){Factory.setOptions(getOptions());try {AlipayTradePrecreateResponse response = Factory.Payment.Common().query(outTradeNo);if (ResponseChecker.success(response)) {return response;} else {//抛出自定义异常return response;}} catch (Exception e) {//抛出自定义异常}}public AlipayTradeCloseResponse close(String outTradeNo){Factory.setOptions(getOptions());try {AlipayTradeCloseResponse response = Factory.Payment.Common().close(outTradeNo);if (ResponseChecker.success(response)) {return response;} else {//抛出自定义异常return response;}} catch (Exception e) {//抛出自定义异常}}private static Config getOptions() {Config config = new Config();config.protocol = "https";config.gatewayHost = aliPayProperties.getGatewayHost();config.signType = "RSA2";config.appId = aliPayProperties.getAppId();// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中config.merchantPrivateKey =aliPayProperties.getMerchantPrivateKey();//注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载//config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";//config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";//config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可config.alipayPublicKey = aliPayProperties.getAlipayPublicKey();//可设置异步通知接收服务地址(可选)config.notifyUrl = aliPayProperties.getNotifyUrl();//可设置AES密钥,调用AES加解密相关接口时需要(可选)config.encryptKey = aliPayProperties.getEncryptKey();return config;}
}
第五步:controller接口pay接口==》调用服务层的pay方法,设置前端channel渠道为支付宝第六步:下单service层,在保存订单后,判断前端传入为支付宝接口,才调用支付宝接口(返回body表单)优化:
第七步:封装body为返回类,只取我们需要的部分和添加前端需要的内容,前端展示
第八步: 前端修改,支付跳转到支付宝预设页面,支付完跳转回自己的页面  或者,支付时弹出二维码支付,优化用户体验。

http://www.lqws.cn/news/467587.html

相关文章:

  • 在Linux中如何编写*.service文件?
  • 【单调栈】-----【Largest Rectangle in a Histogram】
  • emscripten 编译 wasm 版本的 openssl
  • 蚂蚁百宝箱快速创建智能体AI小程序
  • 项目中后端如何处理异常?
  • 智慧水利数字孪生解决方案:百川孪生智领千行,100+标杆案例赋能智慧水利全域升级
  • 【LeetCode#第198题】打家劫舍(一维dp)
  • Compose笔记(二十七)--网格布局
  • SwinTransformer 改进:小波+注意力模块(Wavelet-Guided Attention)
  • 【LeetCode 热题 100】15. 三数之和——排序 + 双指针解法
  • WebeServer实现:学到了哪些东西
  • 缓存与加速技术实践-Kafka消息队列
  • Axios 在 Vue3 项目中的使用:从安装到组件中的使用
  • 【软考高级系统架构论文】论 SOA 在企业集成架构设计中的应用
  • 【软考高级系统架构论文】论多源数据集成及应用
  • AR眼镜与3D建模社区建设
  • stm32串口(uart)2转发到串口(uart)3实现
  • JVM知识点
  • 启动hardhat 项目,下载依赖的npm问题
  • React 虚拟dom
  • GNU Octave 基础教程(8):GNU Octave 常用数学函数
  • git的命令
  • IEC61850 通信协议测试验证方法详解
  • 经典:在浏览器地址栏输入信息到最终看到网页的全过程,涉及网络协议以及前后端技术
  • 我开源了一套springboot3快速开发模板
  • 八大架构宪法 - 技术使用指导说明文档
  • GitHub OAuth 认证示例
  • 人人都是音乐家?腾讯开源音乐生成大模型SongGeneration
  • springboot垃圾分类网站
  • 【Linux仓库】进程概念与基本操作【进程·贰】