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

Springboot项目接入支付宝SDK

源码下载

config

import java.io.FileWriter;
import java.io.IOException;public class AlipayConfig {// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号public static String app_id = "";// 商户私钥,您的PKCS8格式RSA2私钥public static String merchant_private_key = "";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String alipay_public_key = "";// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://www.bing.com";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问// 即支付成功之后,需要跳转到的页面,一般为网站的首页public static String return_url = "http://www.baidu.com";// 签名方式public static String sign_type = "RSA2";// 字符编码格式public static String charset = "utf-8";// 支付宝网关public static String gatewayUrl = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";// 日志存储路径public static String log_path = "C:\\";/*** 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)* @param sWord 要写入日志里的文本内容*/public static void logResult(String sWord) {FileWriter writer = null;try {writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");writer.write(sWord);} catch (Exception e) {e.printStackTrace();} finally {if (writer != null) {try {writer.close();} catch (IOException e) {e.printStackTrace();}}}}
}

AliPayController

import com.dysy.alipay.service.AlipayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.Date;@CrossOrigin
@RequestMapping("/pay")
@Controller
public class AliPayController {@Autowiredprivate AlipayService alipayService;@GetMapping("/hello")public String hello() {return "index";}/*** 跳转到支付界面* @return* @throws Exception*/@GetMapping("/topay")@ResponseBodypublic String pay() throws Exception {String form = alipayService.toPay(String.valueOf(new Date().getTime()),720.0, "易购商城", "订单描述");return form;}
}

Service

AlipayService

service
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.dysy.alipay.config.AlipayConfig;
import org.springframework.stereotype.Service;@Service
public interface AlipayService {public String toPay(String orderId, double price, String orderName, String orderDesc) throws Exception;}

AlipayServiceImpl

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.dysy.alipay.config.AlipayConfig;
import com.dysy.alipay.service.AlipayService;
import org.springframework.stereotype.Service;@Service
public class AlipayServiceImpl implements AlipayService {public String toPay(String orderId, double price, String orderName, String orderDesc) throws Exception{//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(AlipayConfig.return_url);alipayRequest.setNotifyUrl(AlipayConfig.notify_url);//商户订单号,商户网站订单系统中唯一订单号,必填String out_trade_no = orderId;//付款金额,必填String total_amount = String.valueOf(price);//订单名称,必填String subject = orderName;//商品描述,可空String body = orderDesc;alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+ "\"total_amount\":\""+ total_amount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\""+ body +"\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");String form = "";AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest);if (response.isSuccess()) {form = alipayClient.pageExecute(alipayRequest).getBody();}// 这里返回的 form 是一个字符串,里面封装了支付的表单信息//(即 html 标签 和 javascript 代码),直接将这个 form 输出到页面即可。return form;}
}

util

FileUtils

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class FileUtils {public static String readFileOfTxt(String path){StringBuilder sb = new StringBuilder();try(BufferedReader bufferedReader = new BufferedReader(new FileReader(path))) {char[] buf = new char[1024];int len = -1;while ((len = bufferedReader.read(buf)) != -1) {sb.append(new String(buf, 0, len));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return sb.toString();}
}

JSONUtils

package com.dysy.alipay.util;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.Map;public class JSONUtils {private static final ObjectMapper mapper = new ObjectMapper();public static Map<String, Object> jsonToMap(String jsonStr) throws JsonProcessingException {Map<String, Object> map = mapper.readValue(jsonStr, Map.class);return map;}
}

templates

<form action="/pay/topay"><button type="submit">付款</button>
</form>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • py基础语法简述
  • 基于Java的微信记账小程序【附源码】
  • 顺序表的应用
  • unity对于文件夹的操作
  • 大数据面试题之Flink(1)
  • 如何网页在线编辑微软Office Word,并导出为PDF格式。
  • APP渗透-android12夜神模拟器+Burpsuite实现
  • uni-app上传失败超出文件限制解决方法-分包处理-预加载
  • Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了
  • AI绘画Stable Diffusion【图生图教程】:图片高清修复的三种方案详解,你一定能用上!(附资料)
  • MSPM0G3507——解决printf重定向在其他位置不能用的问题(printf重定向的补充)
  • 【密码学】密码学五要素
  • 使用c++进行大规模的矩阵运算
  • Debezium日常分享系列之:Debezium 2.7.0.Final发布
  • Qt使用sqlite数据库及项目实战
  • JavaScript 如何正确处理 Unicode 编码问题!
  • #Java异常处理
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTTP--网络协议分层,http历史(二)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spark RDD学习: aggregate函数
  • STAR法则
  • ucore操作系统实验笔记 - 重新理解中断
  • vue 个人积累(使用工具,组件)
  • Xmanager 远程桌面 CentOS 7
  • 浮现式设计
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 理解在java “”i=i++;”所发生的事情
  • 什么软件可以剪辑音乐?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 优秀架构师必须掌握的架构思维
  • Hibernate主键生成策略及选择
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​queue --- 一个同步的队列类​
  • ‌内网穿透技术‌总结
  • # Java NIO(一)FileChannel
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (LeetCode) T14. Longest Common Prefix
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)DockerCompose安装与配置
  • (一)VirtualBox安装增强功能
  • (已解决)什么是vue导航守卫
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ***通过什么方式***网吧
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes