最简单的springboot集成支付宝
1 注册沙箱
沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下
然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具。然后解压按照里面的readme生成公私密钥,
选择沙箱应用 上传公钥即可。。沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来。
java 程序
1 新建一个springboot项目
因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需要勾选web就足够了。
2 添加alipay-sdk-java和fastjson
fastjson 的作用是用到了其中的JSON.toString方法。
alipay-sdk-java的作用不用说自然是支付宝的sdk,是必不可少的。
<dependency> <groupId>com.alipay.api</groupId> <artifactId>alipay-sdk-java</artifactId> <version>20170615110434</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
3 Config
新建一个支付宝的config文件,如下
因为支付宝支付完成以后会有一个回调函数返回商家页面
该页面完成过一会儿结束以后会有一个回调,,因为回调地址必须是公网可以直接访问,这也就是下面用到了netapp映射的原因neturl即为映射的公网地址。
package com.example.pay.config.pay; import org.springframework.context.annotation.Configuration; import java.io.FileWriter; import java.io.IOException; /** * @author ligen * @title: AliPayConfig * @projectName demo * @description: * @date 2019/6/1014:20 */ @Configuration public class AliPayConfig { //↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // netapp映射的地址,,,根据自己的需要修改 private static String neturl = "http://g5kike.natappfree.cc"; // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 按照我文章图上的信息填写 public static String app_id = "2016092800619078"; // 商户私钥,您的PKCS8格式RSA2私钥 刚刚生成的私钥直接复制填写 public static String merchant_private_key ="粘贴生成的私钥"; // 支付宝公钥,对应APPID下的支付宝公钥。 按照我文章图上的信息填写支付宝公钥,别填成商户公钥 public static String alipay_public_key = "粘贴生成的公钥"; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL public static String notify_url = neturl+"/alipay/notify_url"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL public static String return_url = neturl+"/alipay/return_url"; // 签名方式 public static String sign_type = "RSA2"; // 字符编码格式 public static String charset = "utf-8"; // 支付宝网关 public static String gatewayUrl = "https://openapi.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(); } } } } }
4 Service
调用支付宝的支付接口就是将一包数据通过支付宝SDK的一个接口发送给支付宝的服务器,然后他会返回给你一个输入密码确认支付的界面。
所以只需要干两件事
1 组装数据
数据最少有5项,注意map的key和value都是字符串
2 创建客户端
创建一个 Client实例,其中的值即为我们Config中的值
3 发送数据
这里面先将数据转化为request 最后将request通过Client发出去。用到了fastjson的toString方法。也就是前面导入fastjson依赖的原因
package com.example.pay.config.pay; import com.alibaba.fastjson.JSON; import com.alipay.api.AlipayApiException; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.example.pay.domain.AlipayVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @author ligen * @title: AliPayService * @projectName demo * @description: * @date 2019/6/119:11 */ @Service public class AliPayService { Logger logger = LoggerFactory.getLogger("AliPayService.class"); @Autowired AlipayVo staticVo; // 支付服务 public String aliPay() throws AlipayApiException { // 构建支付数据信息 Map<String, String> data = new HashMap<>(); data.put("subject", staticVo.getSubject()); //订单标题 data.put("out_trade_no", new SimpleDateFormat().format(new Date())); //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 //此处模拟订单号为时间 data.put("timeout_express", staticVo.getTimout_express()); //该笔订单允许的最晚付款时间 data.put("total_amount", staticVo.getTotle_amout()); //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] data.put("product_code", "FAST_INSTANT_TRADE_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY //构建客户端 DefaultAlipayClient alipayRsa2Client = new DefaultAlipayClient( AliPayConfig.gatewayUrl, AliPayConfig.app_id, AliPayConfig.merchant_private_key, "json", AliPayConfig.charset, AliPayConfig.alipay_public_key, AliPayConfig.sign_type); // AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();// APP支付 AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 网页支付 // AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); //移动h5 request.setNotifyUrl(AliPayConfig.notify_url); request.setReturnUrl(AliPayConfig.return_url); request.setBizContent(JSON.toJSONString(data)); logger.info(JSON.toJSONString(data)); String response = alipayRsa2Client.pageExecute(request).getBody(); logger.info(response); return response; } }
5 controller 层很简单 代码如下
package com.example.pay.controller; import com.alipay.api.AlipayApiException; import com.example.pay.config.pay.AliPayService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** @author ligen @title: PayController @projectName demo @description: @date 2019/6/1013:25 */ @Api(tags = “支付宝测试”) @RestController public class PayController { Logger logger = LoggerFactory.getLogger("PayController.class"); @Autowired AliPayService aliPayService; @ApiOperation("支付接口") @RequestMapping(value = "alipay/toPay/{amount}", method = RequestMethod.GET) public String alipay(@PathVariable(value = "amount") Integer amount) throws AlipayApiException { return aliPayService.aliPay(amount); } @ApiOperation("支付异步通知接口") @GetMapping("alipay/notify_url") public String notifyAlipay() { logger.info("----notify-----"); return " a li pay notify "; } @ApiOperation("支付完成以后的回调接口") @GetMapping("alipay/return_url") public String returnAlipay() { logger.info("----return-----"); return " a li pay return "; } }
6 运行
浏览器访问(我这里设置了端口号为1234) 路径最后面200是金额参数。
会跳转到如下页面,
此时可以使用沙箱支付宝app支付了,这里我们使用账户登录。。。记住是付款用户登录,而不是收款用户。。。那么哪里看付款收款呢。
打开蚂蚁金服->开发者中心->沙箱 如下图
登录第二个账号后如下图 密码默认都是111111
如果设置了return url 将在该页面结束以后自动跳转至return url对应的页面,如下 我在return url只是返回了一个字符串。
代码git 地址
https://github.com/ligengithub/pay.git
到此这篇关于springboot 集成支付宝支付的示例代码的文章就介绍到这了,更多相关springboot 集成支付宝支付内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍SpringBoot集成支付宝沙箱支付(支付、退款),包括了SpringBoot集成支付宝沙箱支付(支付、退款)的使用技巧和注意事项,需要的朋友参考一下 前言 支付宝推出一个沙箱环境,能够很好的模拟支付宝支付,并且还提供了demo,但demo是一个普通web项目,怎么整合到Spring Boot项目呢,其实很简单 简单配置请参照支付宝沙箱支付开发文档 一、支付部分 AlipayCon
本文向大家介绍Android集成支付宝支付功能示例,包括了Android集成支付宝支付功能示例的使用技巧和注意事项,需要的朋友参考一下 公司项目中需要支付功能,现在支付宝、微信支付很方便,也很多人使用,因此,他们是首选。在此记录一下支付宝集成过程,下期为微信支付,敬请期待 首先去支付宝官网下载其最新的Android的SDK集成Dmeo 支付宝 选择SDK&Dmeo进行下载 将支付宝jar包添加项目
本文向大家介绍python支付宝支付示例详解,包括了python支付宝支付示例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python支付宝支付示例代码,供大家参考,具体内容如下 项目演示: 1、输入金额 2、扫码支付: 3、支付完成: 一、注册账号 https://openhome.alipay.com/platform/appDaily.htm?tab=info 二、设置
本文向大家介绍php实现微信和支付宝支付的示例代码,包括了php实现微信和支付宝支付的示例代码的使用技巧和注意事项,需要的朋友参考一下 php实现微信支付 微信支付文档地址:https://pay.weixin.qq.com/wiki/doc/api/index.html 在php下实现微信支付,这里我使用了EasyWeChat 这里我是在Yii框架实现的,安装EasyWeChat插件 一:配置E
本文向大家介绍Android支付宝支付封装代码,包括了Android支付宝支付封装代码的使用技巧和注意事项,需要的朋友参考一下 在做Android支付的时候肯定会用到支付宝支付, 根据官方给出的demo做起来非常费劲,所以我们需要一次简单的封装。 封装的代码也很简单,就是将官网给的demo提取出一个类来方便使用。 前面的几个常量是需要去支付宝官网获取的,获取后直接替换就ok, 其他的代码基本都是从
本文向大家介绍Spring MVC 使用支付宝接口完成在线支付的示例代码,包括了Spring MVC 使用支付宝接口完成在线支付的示例代码的使用技巧和注意事项,需要的朋友参考一下 项目中要使用到在线支付功能 目前常用的在线支付手段主要是 支付宝 和微信。 这里我使用的是支付宝支付,支付宝有个好处就是他有一个沙箱模式 即使没有申请渠道的资格也可以体验一把在线支付。 第一步:完善沙箱信息 进入支付宝的