springboot 集成支付寶支付的示例代碼
最簡單的springboot集成支付寶
1 注冊沙箱
沙箱是一個模擬環(huán)境登錄,百度螞蟻金服開放平臺,支付寶掃碼登錄如下


然后沙箱需要注冊一下,非常之簡單,注冊好以后進入到如下頁面,選沙箱工具,然后下載一個生成密鑰的工具。然后解壓按照里面的readme生成公私密鑰,

選擇沙箱應(yīng)用 上傳公鑰即可。。沙箱到這里就基本完成了,里面還有沙箱版本的的android app可以下載下來。

java 程序
1 新建一個springboot項目
因為我們創(chuàng)建的是一個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文件,如下
因為支付寶支付完成以后會有一個回調(diào)函數(shù)返回商家頁面

該頁面完成過一會兒結(jié)束以后會有一個回調(diào),,因為回調(diào)地址必須是公網(wǎng)可以直接訪問,這也就是下面用到了netapp映射的原因neturl即為映射的公網(wǎng)地址。
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映射的地址,,,根據(jù)自己的需要修改
private static String neturl = "http://g5kike.natappfree.cc";
// 應(yīng)用ID,您的APPID,收款賬號既是您的APPID對應(yīng)支付寶賬號 按照我文章圖上的信息填寫
public static String app_id = "2016092800619078";
// 商戶私鑰,您的PKCS8格式RSA2私鑰 剛剛生成的私鑰直接復(fù)制填寫
public static String merchant_private_key ="粘貼生成的私鑰";
// 支付寶公鑰,對應(yīng)APPID下的支付寶公鑰。 按照我文章圖上的信息填寫支付寶公鑰,別填成商戶公鑰
public static String alipay_public_key = "粘貼生成的公鑰";
// 服務(wù)器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),其實就是你的一個支付完成后返回的頁面URL
public static String notify_url = neturl+"/alipay/notify_url";
// 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),其實就是你的一個支付完成后返回的頁面URL
public static String return_url = neturl+"/alipay/return_url";
// 簽名方式
public static String sign_type = "RSA2";
// 字符編碼格式
public static String charset = "utf-8";
// 支付寶網(wǎng)關(guān)
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 支付寶網(wǎng)關(guān)
public static String log_path = "C:\\";
//↑↑↑↑↑↑↑↑↑↑請在這里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
/**
* 寫日志,方便測試(看網(wǎng)站需求,也可以改成把記錄存入數(shù)據(jù)庫)
* @param sWord 要寫入日志里的文本內(nèi)容
*/
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
調(diào)用支付寶的支付接口就是將一包數(shù)據(jù)通過支付寶SDK的一個接口發(fā)送給支付寶的服務(wù)器,然后他會返回給你一個輸入密碼確認(rèn)支付的界面。
所以只需要干兩件事
1 組裝數(shù)據(jù)
數(shù)據(jù)最少有5項,注意map的key和value都是字符串

2 創(chuàng)建客戶端
創(chuàng)建一個 Client實例,其中的值即為我們Config中的值

3 發(fā)送數(shù)據(jù)
這里面先將數(shù)據(jù)轉(zhuǎn)化為request 最后將request通過Client發(fā)出去。用到了fastjson的toString方法。也就是前面導(dǎo)入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;
// 支付服務(wù)
public String aliPay() throws AlipayApiException {
// 構(gòu)建支付數(shù)據(jù)信息
Map<String, String> data = new HashMap<>();
data.put("subject", staticVo.getSubject()); //訂單標(biāo)題
data.put("out_trade_no", new SimpleDateFormat().format(new Date())); //商戶訂單號,64個字符以內(nèi)、可包含字母、數(shù)字、下劃線;需保證在商戶端不重復(fù) //此處模擬訂單號為時間
data.put("timeout_express", staticVo.getTimout_express()); //該筆訂單允許的最晚付款時間
data.put("total_amount", staticVo.getTotle_amout()); //訂單總金額,單位為元,精確到小數(shù)點后兩位,取值范圍[0.01,100000000]
data.put("product_code", "FAST_INSTANT_TRADE_PAY"); //銷售產(chǎn)品碼,商家和支付寶簽約的產(chǎn)品碼,為固定值QUICK_MSECURITY_PAY
//構(gòu)建客戶端
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(); // 網(wǎng)頁支付
// 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("支付完成以后的回調(diào)接口")
@GetMapping("alipay/return_url")
public String returnAlipay() {
logger.info("----return-----");
return " a li pay return ";
}
}
6 運行
瀏覽器訪問(我這里設(shè)置了端口號為1234) 路徑最后面200是金額參數(shù)。

會跳轉(zhuǎn)到如下頁面,

此時可以使用沙箱支付寶app支付了,這里我們使用賬戶登錄。。。記住是付款用戶登錄,而不是收款用戶。。。那么哪里看付款收款呢。
打開螞蟻金服->開發(fā)者中心->沙箱 如下圖

登錄第二個賬號后如下圖 密碼默認(rèn)都是111111


如果設(shè)置了return url 將在該頁面結(jié)束以后自動跳轉(zhuǎn)至return url對應(yīng)的頁面,如下 我在return url只是返回了一個字符串。

代碼git 地址
https://github.com/ligengithub/pay.git
到此這篇關(guān)于springboot 集成支付寶支付的示例代碼的文章就介紹到這了,更多相關(guān)springboot 集成支付寶支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PowerJob的DesignateServer工作流程源碼解讀
這篇文章主要介紹了PowerJob的DesignateServer工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
Java如何基于ProcessBuilder類調(diào)用外部程序
這篇文章主要介紹了Java如何基于ProcessBuilder類調(diào)用外部程序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Mybatis?plus邏輯刪除注解@TableLogic的使用
本文主要介紹了Mybatis?plus邏輯刪除注解@TableLogic,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
使用Spring MVC攔截器實現(xiàn)日志記錄的方法
本篇文章主要介紹了使用Spring MVC攔截器實現(xiàn)日志記錄的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Java concurrency集合之ConcurrentLinkedQueue_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以參考下2017-06-06
Java基于控制臺界面實現(xiàn)ATM系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java基于控制臺界面實現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

