当前位置: 首页 > 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为返回类,只取我们需要的部分和添加前端需要的内容,前端展示
第八步: 前端修改,支付跳转到支付宝预设页面,支付完跳转回自己的页面  或者,支付时弹出二维码支付,优化用户体验。

相关文章:

  • AWS VPC 子网划分实战指南:从基础到进阶
  • Z-Ant开源程序是简化了微处理器上神经网络的部署和优化
  • Rust自动化测试的框架
  • C++ - vector 的使用
  • Python的6万张图像数据集CIFAR-10和CIFAR-100说明
  • 软件工程概述:核心概念、模型与方法全解析
  • Linux编程:5、进程通信-命名管道
  • 从流量为王到留量为王:开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新路径
  • Skrill是什么?中国用户能用吗?安全吗?完整指南
  • Spring Boot + MyBatis + Vue:全栈开发的深度剖析与实践指南
  • WINUI/WPF——Button不同状态下图标切换
  • DM8故障分析工具-AWR报告
  • mysql导入大sql(比如10GB的sql文件)
  • Kubernetes核心技术原理详解
  • Linux文件元信息完全指南:权限、链接与时间属性
  • 文本分类与聚类:让信息“各归其位”的实用方法
  • 用Python实现安全封装EXE文件加密保护工具
  • Windows IOCP(I/O Completion Port)模型详解
  • TCP 三次握手与四次挥手全流程详解
  • Android Studio 打 APK 包报错 Invalid keystore format 的解决方法
  • 携程旅游网官方网站 做攻略/竞价推广托管公司价格
  • 旅游网站模板大全/成年培训班有哪些
  • 做暖漫画网站/今天刚刚发生的新闻事故
  • 做网站怎样使图片自由移动/网店代运营和推广销售
  • 做家居网站/百度知道一下首页
  • 为什么网站要改版/今日微博热搜榜前十名