springboot 集成支付寶支付的示例代碼
最簡單的springboot集成支付寶
1 注冊沙箱
沙箱是一個(gè)模擬環(huán)境登錄,百度螞蟻金服開放平臺,支付寶掃碼登錄如下
然后沙箱需要注冊一下,非常之簡單,注冊好以后進(jìn)入到如下頁面,選沙箱工具,然后下載一個(gè)生成密鑰的工具。然后解壓按照里面的readme生成公私密鑰,
選擇沙箱應(yīng)用 上傳公鑰即可。。沙箱到這里就基本完成了,里面還有沙箱版本的的android app可以下載下來。
java 程序
1 新建一個(gè)springboot項(xiàng)目
因?yàn)槲覀儎?chuàng)建的是一個(gè)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
新建一個(gè)支付寶的config文件,如下因?yàn)橹Ц秾氈Ц锻瓿梢院髸幸粋€(gè)回調(diào)函數(shù)返回商家頁面
該頁面完成過一會兒結(jié)束以后會有一個(gè)回調(diào),,因?yàn)榛卣{(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 */@Configurationpublic class AliPayConfig {//↓↓↓↓↓↓↓↓↓↓請?jiān)谶@里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ // 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ù),其實(shí)就是你的一個(gè)支付完成后返回的頁面URL public static String notify_url = neturl+'/alipay/notify_url'; // 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),其實(shí)就是你的一個(gè)支付完成后返回的頁面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:';//↑↑↑↑↑↑↑↑↑↑請?jiān)谶@里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ /** * 寫日志,方便測試(看網(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的一個(gè)接口發(fā)送給支付寶的服務(wù)器,然后他會返回給你一個(gè)輸入密碼確認(rèn)支付的界面。所以只需要干兩件事
1 組裝數(shù)據(jù)
數(shù)據(jù)最少有5項(xiàng),注意map的key和value都是字符串
2 創(chuàng)建客戶端
創(chuàng)建一個(gè) Client實(shí)例,其中的值即為我們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 */@Servicepublic 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個(gè)字符以內(nèi)、可包含字母、數(shù)字、下劃線;需保證在商戶端不重復(fù) //此處模擬訂單號為時(shí)間 data.put('timeout_express', staticVo.getTimout_express()); //該筆訂單允許的最晚付款時(shí)間 data.put('total_amount', staticVo.getTotle_amout()); //訂單總金額,單位為元,精確到小數(shù)點(diǎn)后兩位,取值范圍[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 = “支付寶測試”)@RestControllerpublic class PayController {Logger logger = LoggerFactory.getLogger('PayController.class');@AutowiredAliPayService 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 運(yùn)行
瀏覽器訪問(我這里設(shè)置了端口號為1234) 路徑最后面200是金額參數(shù)。
會跳轉(zhuǎn)到如下頁面,
此時(shí)可以使用沙箱支付寶app支付了,這里我們使用賬戶登錄。。。記住是付款用戶登錄,而不是收款用戶。。。那么哪里看付款收款呢。打開螞蟻金服->開發(fā)者中心->沙箱 如下圖
登錄第二個(gè)賬號后如下圖 密碼默認(rèn)都是111111
如果設(shè)置了return url 將在該頁面結(jié)束以后自動跳轉(zhuǎn)至return url對應(yīng)的頁面,如下 我在return url只是返回了一個(gè)字符串。
代碼git 地址
https://github.com/ligengithub/pay.git
到此這篇關(guān)于springboot 集成支付寶支付的示例代碼的文章就介紹到這了,更多相關(guān)springboot 集成支付寶支付內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章: