java實(shí)現(xiàn)在SSM下使用支付寶掃碼支付功能
本文實(shí)例為大家分享了java使用支付寶掃碼支付的具體代碼,供大家參考,具體內(nèi)容如下
準(zhǔn)備工作
首先開通支付寶沙箱的測試賬號(hào),里面會(huì)有消費(fèi)者賬戶和收款方賬戶

手機(jī)掃碼下載手機(jī)端app

基礎(chǔ)配置
所需jar包

AlipayConfig
package com.alipay.config;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ResourceBundle;
/* *
*類名:AlipayConfig
*功能:基礎(chǔ)配置類
*詳細(xì):設(shè)置帳戶有關(guān)信息及返回路徑
*修改日期:2017-04-05
*說明:
*以下代碼只是為了方便商戶測試而提供的樣例代碼,商戶可以根據(jù)自己網(wǎng)站的需要,按照技術(shù)文檔編寫,并非一定要使用該代碼。
*該代碼僅供學(xué)習(xí)和研究支付寶接口使用,只是提供一個(gè)參考。
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓請?jiān)谶@里配置您的基本信息
// 應(yīng)用ID,您的APPID,收款賬號(hào)既是您的APPID對應(yīng)支付寶賬號(hào)
public static String app_id = "2016080403162340";
// 商戶私鑰,您的PKCS8格式RSA2私鑰
public static String merchant_private_key = "MIIEvAID2tulSSmawG5+F4NZbexpnxi8NKQJPZEeAA==";
// 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應(yīng)APPID下的支付寶公鑰。
public static String alipay_public_key = "MIIBIjt26tLTKar8S1ERDWI25viBcMz7PLMxVVUmHf5tdBWfbMhUs3QIDAQAB";
// 服務(wù)器異步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
public static String notify_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問
public static String return_url = "http://localhost:8080/Exam/index/gouMai";
// 簽名方式
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 = "E:\\";
//↑↑↑↑↑↑↑↑↑↑請?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();
}
}
}
}
}
Controller
//生成有二維碼,可供掃碼支付的頁面
@RequestMapping(value = "aliPay")
public String aliPay(HttpServletResponse response,ModelMap map,String chapterId,HttpServletRequest request,
String WIDout_trade_no,String WIDtotal_amount,String WIDsubject,String WIDbody) throws IOException, AlipayApiException{
// String a,String urlName,String couName....+"&a="+a+"&urlName="+urlName+"&couName="+couName
//獲得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
//設(shè)置請求參數(shù)
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url+"?chapterId="+chapterId);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//付款I(lǐng)D,必填
String out_trade_no = WIDout_trade_no;
//付款金額,必填
String total_amount = WIDtotal_amount;
total_amount=URLDecoder.decode(total_amount,"UTF-8");//轉(zhuǎn)碼
//訂單名稱,必填
String subject = WIDsubject;
subject=URLDecoder.decode(subject,"UTF-8");
//商品描述,可空
String body = WIDbody;
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"total_amount\":\""+ total_amount +"\","
+ "\"subject\":\""+ subject +"\","
+ "\"body\":\""+ body +"\","
+ "\"timeout_express\":\"1m\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//請求
String result = alipayClient.pageExecute(alipayRequest).getBody();
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
out.println(result);
return null;
}
支付成功的放回頁面(return_url)
成功后的返回路徑,走Controller,詳見AlipayConfig中的配置
//點(diǎn)擊購買,將課程存入購買表中
@RequestMapping(value="gouMai")
@ResponseBody
public ModelAndView gouMai(String chapterId,HttpServletRequest req,String a,String urlName,String couName,ModelMap map){
ModelAndView mav = new ModelAndView();
Map<String,String> mapp1 = new HashMap<String,String>();
// SysUserTab login_user = sysuserService.getSysUserById(userId);
HttpSession session = req.getSession();
SysUserTab login_user1 = (SysUserTab) session.getAttribute("login_user");
String userId = login_user1.getUserId();
// session.setAttribute("login_user", login_user);
mapp1.put("userId", userId);
mapp1.put("chapterId", chapterId);
int num = sysBuyService.getBuyCount(mapp1);
if(num==0){
mapp1.put("buyId", UUID.randomUUID().toString().replace("-", ""));
sysBuyService.insertBuy(mapp1);
}
//查詢課程內(nèi)容
// String fanhui = showFH(req,chapterId,urlName,couName,map, a);
mav.setViewName("jsp/pay/paySuccess");
return mav;
}
支付成功后,頁面跳轉(zhuǎn)至paySuccess.jsp頁面。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解java集成支付寶支付接口(JSP+支付寶20160912)
- java后臺(tái)實(shí)現(xiàn)支付寶支付接口和支付寶訂單查詢接口(前端為APP)
- Java實(shí)現(xiàn)支付寶之第三方支付寶即時(shí)到賬支付功能
- java后臺(tái)實(shí)現(xiàn)支付寶對賬功能的示例代碼
- Java判斷瀏覽器是微信還是支付寶
- Java開發(fā)支付寶PC支付完整版
- 微信、支付寶二碼合一掃碼支付實(shí)現(xiàn)思路(java)
- java實(shí)現(xiàn)支付寶退款功能
- 支付寶APP支付(IOS手機(jī)端+java后臺(tái))版
- Java接入支付寶授權(quán)第三方登錄的完整步驟
相關(guān)文章
Spring事件監(jiān)聽器ApplicationListener源碼詳解
這篇文章主要介紹了Spring事件監(jiān)聽器ApplicationListener源碼詳解,ApplicationEvent以及Listener是Spring為我們提供的一個(gè)事件監(jiān)聽、訂閱的實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)原理是觀察者設(shè)計(jì)模式,需要的朋友可以參考下2023-05-05
Java Springboot 后端使用Mockito庫進(jìn)行單元測試流程分析
使用Mock進(jìn)行單元測試可以避免啟動(dòng)整個(gè)Spring框架,節(jié)省時(shí)間并降低外部依賴影響,Mock允許模擬外部方法和類,專注于測試方法的功能邏輯,本文給大家介紹Java Springboot 后端使用Mockito庫進(jìn)行單元測試流程分析,感興趣的朋友跟隨小編一起看看吧2024-10-10
Java JDK 動(dòng)態(tài)代理的使用方法示例
Java 動(dòng)態(tài)代理機(jī)制以巧妙的方式近乎完美地實(shí)踐了代理模式的設(shè)計(jì)理念。下面這篇文章主要給大家分享了關(guān)于Java JDK 動(dòng)態(tài)代理的使用方法示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
springboot在idea下debug調(diào)試熱部署問題
這篇文章主要介紹了springboot在idea下debug調(diào)試熱部署問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Mybatis order by 動(dòng)態(tài)傳參出現(xiàn)的問題及解決方法
今天,我正在愉快地CRUD,突然發(fā)現(xiàn)出現(xiàn)一個(gè)Bug,我們來看看是怎么回事吧!接下來通過本文給大家介紹Mybatis order by 動(dòng)態(tài)傳參出現(xiàn)的一個(gè)小bug,需要的朋友可以參考下2021-07-07

