java對接支付寶支付項(xiàng)目的實(shí)戰(zhàn)記錄
java對接支付寶支付演示
現(xiàn)在有不少的項(xiàng)目都需要對接支付,這里主要是進(jìn)行講解對接支付寶H5支付
廢話不多說 上代碼
引入支付寶官方的sdk
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-easysdk</artifactId> <version>2.2.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java --> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.10.124.ALL</version> </dependency>
編寫調(diào)用支付的方法
@RequestMapping("/test") public void doPost(HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws ServletException, IOException { //商戶號 String APP_ID=""; //私鑰 String APP_PRIVATE_KEY=""; //編碼 String CHARSET="UTF-8"; //公鑰 String ALIPAY_PUBLIC_KEY=""; //我是沙箱環(huán)境 所有請求地址是沙箱版 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //獲得初始化的AlipayClient AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//創(chuàng)建API對應(yīng)的request //這里主要是設(shè)置回調(diào) 也就是支付成功之后你要做什么操作的地址 alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp"); alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共參數(shù)中設(shè)置回跳和通知地址 /** * @description: * @author: hwk * @date: 2022/6/14 16:34 * @param: out_trade_no 訂單編號 * total_amount 付款金額 * subject 商品名稱 * product_code 支付方式 如手機(jī)網(wǎng)站 pc網(wǎng)站 APP支付等 **/ JSONObject jsonObject = new JSONObject(); jsonObject.put("out_trade_no", "264484811515156"); jsonObject.put("total_amount", "66"); jsonObject.put("subject", "測試支付"); jsonObject.put("product_code", "QUICK_WAP_WAY"); alipayRequest.setBizContent(jsonObject.toJSONString()); String form=""; try { form = alipayClient.pageExecute(alipayRequest).getBody(); } catch (AlipayApiException e) { e.printStackTrace(); } //因?yàn)槲也粫?huì)寫前端 所以直接輸出測試 如果在正式環(huán)境中 建議直接return 返回的from表單 httpResponse.setContentType("text/html;charset=" + CHARSET); httpResponse.getWriter().write(form);//直接將完整的表單html輸出到頁面 httpResponse.getWriter().flush(); httpResponse.getWriter().close(); } //支付回調(diào) @RequestMapping("/test1") public void aliPayNotify() { Map<String, String> params = getAllRequestParam(request); String tradeStatus = params.get("trade_status"); if ("TRADE_SUCCESS".equals(tradeStatus)) { System.out.println("支付成功"); }else { System.out.println("支付失敗"); } } private Map<String, String> getAllRequestParam(final HttpServletRequest request) { Map<String, String> res = new HashMap<>(8); Enumeration<?> temp = request.getParameterNames(); while (temp.hasMoreElements()) { String en = (String) temp.nextElement(); String value = request.getParameter(en); res.put(en, value); } return res; }
入?yún)⒄街Ц兜臅r(shí)候 可以用string json等接收 我這里只是演示
成功演示圖
講解一下實(shí)際支付的時(shí)候所需要的參數(shù)吧
除去appid 公鑰 私鑰什么的
你正常支付所需要的參數(shù)無非 就是商品的id(主要是用于根據(jù)商品id查詢商品的名稱價(jià)格等后續(xù)調(diào)用支付的時(shí)候需要)、購買人
然后查詢到商品的詳情 set到對應(yīng)的參數(shù)里面 去調(diào)用支付寶sdk 來生成from表單
你們可以在回調(diào)里面進(jìn)行支付成功之后的一些操作
比如說:購買的是會(huì)員 然后在支付成功之后去給他進(jìn)行開通會(huì)員或者續(xù)費(fèi)會(huì)員
有一點(diǎn)要提醒你們 發(fā)起支付前創(chuàng)建的訂單一定要是未支付 在回調(diào)里面判斷用戶是否成功
如果有用戶主動(dòng)查詢是否支付成功的操作 建議根據(jù)訂單號先去數(shù)據(jù)庫查詢是否等于支付成功 如果不等于去官方給的接口去查是否支付成功 這樣做的好處就是有的時(shí)候回調(diào)慢了一點(diǎn) 用戶主動(dòng)去查詢?nèi)绻侵Ц冻晒Σ粫?huì)造成返回支付失敗
總結(jié)
到此這篇關(guān)于java對接支付寶支付項(xiàng)目的文章就介紹到這了,更多相關(guān)java對接支付寶支付內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決SpringBoot運(yùn)行報(bào)錯(cuò):找不到或無法加載主類的問題
這篇文章主要介紹了解決SpringBoot運(yùn)行報(bào)錯(cuò):找不到或無法加載主類的問題,具有很好的參考價(jià)值,對大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下2023-09-09Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn)
這篇文章主要介紹了Java利用StringBuffer替換特殊字符的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04談?wù)劄镴AXB和response設(shè)置編碼,解決wechat4j中文亂碼的問題
中文亂碼是每個(gè)程序員都會(huì)遇到的問題,本篇文章主要介紹了談?wù)劄镴AXB和response設(shè)置編碼,解決wechat4j中文亂碼的問題,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12java編程無向圖結(jié)構(gòu)的存儲及DFS操作代碼詳解
這篇文章主要介紹了java編程無向圖結(jié)構(gòu)的存儲及DFS操作代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(47)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-08-08