Java spring boot 實現(xiàn)支付寶支付功能的示例代碼
一、準(zhǔn)備工作:
1、登陸支付寶開發(fā)者中心,申請一個開發(fā)者賬號。
地址:https://openhome.alipay.com/
2、進(jìn)入研發(fā)服務(wù):
3、點擊鏈接進(jìn)入工具下載頁面:
4、點擊下載對應(yīng)版本的RSA公鑰生成器:
5、生成公鑰密鑰(記錄你的應(yīng)用私鑰):
6、在支付寶配置公鑰(點擊保存):
二、搭建demo
1、引入jia包:
<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.9.9</version> </dependency>
2、搭建工程,目錄結(jié)構(gòu)如下:
3、編寫alipay.properties配置文件
# 您的APPID appId = 2016102200738709 # 商戶私鑰 privateKey = 您的商戶私鑰 # 支付寶公鑰 publicKey = 您的支付寶公鑰 # 服務(wù)器異步通知頁面路徑 ,需要公網(wǎng)能訪問到。 notifyUrl = http://公網(wǎng)能訪問的路徑 # 頁面跳轉(zhuǎn)同步通知頁面路徑 需要公網(wǎng)能訪問到。 returnUrl = http://公網(wǎng)能訪問的路徑 # 簽名方式 signType = RSA2 # 字符編碼格式 charset = utf-8 # 支付寶網(wǎng)關(guān) gatewayUrl = https://openapi.alipaydev.com/gateway.do # 支付寶網(wǎng)關(guān) logPath = "C:\\"
4、編寫AlipayBean:
public class AlipayBean { /** * 商戶訂單號,必填 * */ private String out_trade_no; /** * 訂單名稱,必填 */ private String subject; /** * 付款金額,必填 * 根據(jù)支付寶接口協(xié)議,必須使用下劃線 */ private String total_amount; /** * 商品描述,可空 */ private String body; /** * 超時時間參數(shù) */ private String timeout_express= "10m"; /** * 產(chǎn)品編號 */ private String product_code= "FAST_INSTANT_TRADE_PAY"; /** * 省略get set 方法 */ }
5、編寫Alipay:
/** * 支付寶支付接口 */ @Component public class Alipay { /** * 支付接口 * @param alipayBean * @return * @throws AlipayApiException */ public String pay(AlipayBean alipayBean) throws AlipayApiException { // 1、獲得初始化的AlipayClient String serverUrl = AlipayProperties.getGatewayUrl(); String appId = AlipayProperties.getAppId(); String privateKey = AlipayProperties.getPrivateKey(); String format = "json"; String charset = AlipayProperties.getCharset(); String alipayPublicKey = AlipayProperties.getPublicKey(); String signType = AlipayProperties.getSignType(); String returnUrl = AlipayProperties.getReturnUrl(); String notifyUrl = AlipayProperties.getNotifyUrl(); AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPublicKey, signType); // 2、設(shè)置請求參數(shù) AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); // 頁面跳轉(zhuǎn)同步通知頁面路徑 alipayRequest.setReturnUrl(returnUrl); // 服務(wù)器異步通知頁面路徑 alipayRequest.setNotifyUrl(notifyUrl); // 封裝參數(shù) alipayRequest.setBizContent(JSON.toJSONString(alipayBean)); // 3、請求支付寶進(jìn)行付款,并獲取支付結(jié)果 String result = alipayClient.pageExecute(alipayRequest).getBody(); // 返回付款信息 return result; } }
6、編寫AlipayProperties:
/** * 應(yīng)用啟動加載文件 */ @Component public class AlipayProperties { public static final String APP_ID = "appId"; public static final String PRIVARY_KEY = "privateKey"; public static final String PUBLIC_KEY = "publicKey"; public static final String NOTIFY_URL = "notifyUrl"; public static final String RETURN_URL = "returnUrl"; public static final String SIGN_TYPE = "signType"; public static final String CHARSET = "charset"; public static final String GATEWAY_URL = "gatewayUrl"; public static final String LOG_PATH = "logPath"; /** * 保存加載配置參數(shù) */ private static Map<String, String> propertiesMap = new HashMap<String, String>(); /** * 加載屬性 */ public static void loadProperties() { // 獲得PathMatchingResourcePatternResolver對象 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { // 加載resource文件(也可以加載resources) Resource resources = resolver.getResource("classpath:你的alipay.properties文件路徑"); PropertiesFactoryBean config = new PropertiesFactoryBean(); config.setLocation(resources); config.afterPropertiesSet(); Properties prop = config.getObject(); // 循環(huán)遍歷所有得鍵值對并且存入集合 for (String key : prop.stringPropertyNames()) { propertiesMap.put(key, (String) prop.get(key)); } } catch (Exception e) { new Exception("配置文件加載失敗"); } } /** * 獲取配置參數(shù)值 * @param key * @return */ public static String getKey(String key) { return propertiesMap.get(key); } public static String getAppId() { return propertiesMap.get(APP_ID); } public static String getPrivateKey() { return propertiesMap.get(PRIVARY_KEY); } public static String getPublicKey() { return propertiesMap.get(PUBLIC_KEY); } public static String getNotifyUrl() { return propertiesMap.get(NOTIFY_URL); } public static String getReturnUrl() { return propertiesMap.get(RETURN_URL); } public static String getSignType() { return propertiesMap.get(SIGN_TYPE); } public static String getCharset() { return propertiesMap.get(CHARSET); } public static String getGatewayUrl() { return propertiesMap.get(GATEWAY_URL); } public static String getLogPath() { return propertiesMap.get(LOG_PATH); } }
7、編寫PropertiesListener:
/** * 配置文件監(jiān)聽器,用來加載自定義配置文件 */ @Component public class PropertiesListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { AlipayProperties.loadProperties(); } }
8、編寫PayService:
/** * 支付服務(wù) */ public interface PayService { /** * 支付寶支付接口 * @param alipayBean * @return * @throws AlipayApiException */ String aliPay(AlipayBean alipayBean) throws AlipayApiException; }
9、編寫PayServiceImpl:
@Service public class PayServiceImpl implements PayService { @Autowired private Alipay alipay; @Override public String aliPay(AlipayBean alipayBean) throws AlipayApiException { return alipay.pay(alipayBean); } }
10、編寫OrderController:
/** * 訂單接口 * * @author Louis * @date Dec 12, 2018 */ @RestController() @RequestMapping("order") public class OrderController { @Autowired private PayService payService; @RequestMapping(value = "alipay") public String alipay(String outTradeNo, String subject, String totalAmount, String body) throws AlipayApiException { AlipayBean alipayBean = new AlipayBean(); alipayBean.setOut_trade_no(outTradeNo); alipayBean.setSubject(subject); alipayBean.setTotal_amount(totalAmount); alipayBean.setBody(body); return payService.aliPay(alipayBean); } //支付成功支付寶調(diào)用方法: @RequestMapping(value = "ok") public void ok(){ System.out.println("付款成功!"); } }
11、訪問頁面,輸入信息進(jìn)入支付頁面:
12、點擊支付寶支付,頁面跳轉(zhuǎn),成功!
總結(jié)
到此這篇關(guān)于Java spring boot 實現(xiàn)支付寶支付功能的示例代碼的文章就介紹到這了,更多相關(guān)spring boot 支付寶支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyEclipse 2016 CI 4新增BootStrap模板
MyEclipse2016是一款全球使用最為廣泛的企業(yè)級開發(fā)環(huán)境程序,這篇文章主要介紹了MyEclipse 2016 CI 4新增BootStrap模板的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06Idea?springboot?springCloud熱加載熱調(diào)試兩種常用方式
這篇文章主要介紹了Idea?springboot?springCloud熱加載熱調(diào)試常用的兩種方式,在項目開發(fā)的過程中,需要修改調(diào)試的時候偶每次都需要重啟項目浪費時間,下面是我整理的兩種常用的兩種方式,需要的朋友可以參考下2023-04-04Spring實戰(zhàn)之@Autowire注解用法詳解
這篇文章主要介紹了Spring實戰(zhàn)之@Autowire注解用法,結(jié)合實例形式詳細(xì)分析了Spring @Autowire注解具體實現(xiàn)步驟與相關(guān)使用技巧,需要的朋友可以參考下2019-12-12詳解Servlet3.0新特性(從注解配置到websocket編程)
Servlet3.0的出現(xiàn)是servlet史上最大的變革,其中的許多新特性大大的簡化了web應(yīng)用的開發(fā),為廣大勞苦的程序員減輕了壓力,提高了web開發(fā)的效率。2017-04-04Java如何獲取一個隨機(jī)數(shù) Java猜數(shù)字小游戲
這篇文章主要為大家詳細(xì)介紹了Java如何獲取一個隨機(jī)數(shù),類似猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03經(jīng)典再現(xiàn) 基于JAVA平臺開發(fā)坦克大戰(zhàn)游戲
經(jīng)典再現(xiàn),這篇文章主要介紹了基于JAVA平臺開發(fā)坦克大戰(zhàn)游戲的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06