java实现 支付宝支付
生活随笔
收集整理的這篇文章主要介紹了
java实现 支付宝支付
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 支付寶開放平臺官網(wǎng)
- 創(chuàng)建demo實例分析
- 效果圖
- 實例代碼
- AlipayConfig
- PaymentController
- OrderService OrderServiceImpl
- applicationContext-alipay.xml
支付寶開放平臺官網(wǎng)
用自己手機支付寶掃碼登錄 根據(jù)頁面提示填寫自己真實信息 進去之后
東西主要用的就在這里
sdk 在 點文檔 找到 下面的開發(fā)工具
創(chuàng)建demo實例分析
弄新版的 里面有對應java代碼 復制來 修改處都換成自己的
里面需要更換的地方 都有提示
下面是第一次用的是時候(總結(jié)來說就是 使用工具 生成密鑰 復制生成的公鑰填到RSA2公鑰中 生個應用公鑰 支付寶公鑰(將來要用的就是 工具生成的私鑰 支付寶公鑰))
弄過的話想換 就是更換應用公鑰 會自動生成 保存即可
下載好工具后打開
還需要證書 按下面網(wǎng)址往下滑找到公鑰證書方式教程
公鑰證書方式
全選了 這里好像沒驗證過 應該沒關系放棄了
上面失敗了 從來
這次上傳好了
放棄上面了
插件地址
重啟IDEA
下面弄錯了選擇第二個 QuickStart
提供下面3處內(nèi)容
運行時說沒有授權碼 下面嘗試弄授權碼
下面失敗
下面先去注冊個小程序 沒什么用里面沒得授權碼啥的
https://github.com/alipay/alipay-intellij-plugin/releases
效果圖
實例代碼
給出部分
AlipayConfig
package cn.itrip.trade.config;/*** 支付寶手機網(wǎng)站接入配置信息* @author hduser**/ public class AlipayConfig {/*** 商戶appid*/private String appID;/*** 私鑰 pkcs8格式的*/private String rsaPrivateKey;/*** 服務器異步通知頁面路徑 需http://或者https://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問*/private String notifyUrl;/*** 頁面跳轉(zhuǎn)同步通知頁面路徑 需http://或者https://格式的完整路徑,不能加?id=123這類自定義參數(shù),必須外網(wǎng)可以正常訪問 商戶可以自定義同步跳轉(zhuǎn)地址*/private String returnUrl;/*** 請求網(wǎng)關地址*/private String url;/*** 編碼*/private String charset;/*** 返回格式*/private String format;/*** 支付寶公鑰*/private String alipayPublicKey;/*** 日志記錄目錄*/private String logPath;/*** RSA2*/private String signType;///支付結(jié)果顯示/*** 支付成功跳轉(zhuǎn)頁面*/private String paymentSuccessUrl;/*** 支付失敗跳轉(zhuǎn)頁面*/private String paymentFailureUrl;///支付結(jié)果顯示public String getAppID() {return appID;}public void setAppID(String appID) {this.appID = appID;}public String getRsaPrivateKey() {return rsaPrivateKey;}public void setRsaPrivateKey(String rsaPrivateKey) {this.rsaPrivateKey = rsaPrivateKey;}public String getNotifyUrl() {return notifyUrl;}public void setNotifyUrl(String notifyUrl) {this.notifyUrl = notifyUrl;}public String getReturnUrl() {return returnUrl;}public void setReturnUrl(String returnUrl) {this.returnUrl = returnUrl;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getCharset() {return charset;}public void setCharset(String charset) {this.charset = charset;}public String getFormat() {return format;}public void setFormat(String format) {this.format = format;}public String getAlipayPublicKey() {return alipayPublicKey;}public void setAlipayPublicKey(String alipayPublicKey) {this.alipayPublicKey = alipayPublicKey;}public String getLogPath() {return logPath;}public void setLogPath(String logPath) {this.logPath = logPath;}public String getSignType() {return signType;}public void setSignType(String signType) {this.signType = signType;}public String getPaymentSuccessUrl() {return paymentSuccessUrl;}public void setPaymentSuccessUrl(String paymentSuccessUrl) {this.paymentSuccessUrl = paymentSuccessUrl;}public String getPaymentFailureUrl() {return paymentFailureUrl;}public void setPaymentFailureUrl(String paymentFailureUrl) {this.paymentFailureUrl = paymentFailureUrl;} }PaymentController
package cn.itrip.trade.controller;import cn.itrip.util.common.EmptyUtils; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam;import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Iterator; import java.util.Map;import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam;import springfox.documentation.annotations.ApiIgnore;import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradeWapPayModel; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradeWapPayRequest;import cn.itrip.beans.pojo.ItripHotelOrder; import cn.itrip.trade.config.AlipayConfig; import cn.itrip.trade.service.OrderService;/*** 支付處理控制器** @author hduser**/ @Controller @RequestMapping("/api") public class PaymentController {private Logger logger=Logger.getLogger(PaymentController.class);@Resourceprivate AlipayConfig alipayConfig;@Resourceprivate OrderService orderService;/*** 確認訂單信息** @param id* 訂單ID* @return*/@ApiIgnore@RequestMapping(value = "/prepay/{orderNo}", method = RequestMethod.GET)public String prePay(@PathVariable String orderNo, ModelMap model) {try {ItripHotelOrder order = orderService.loadItripHotelOrder(orderNo);if (!EmptyUtils.isEmpty(order)) {model.addAttribute("hotelName", order.getHotelName());model.addAttribute("roomId", order.getRoomId());model.addAttribute("count", order.getCount());model.addAttribute("payAmount", order.getPayAmount());return "pay";}elsereturn "notfound";} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return "error";}}/*** 向支付寶提交支付請求** @param WIDout_trade_no* 商戶訂單號,商戶網(wǎng)站訂單系統(tǒng)中唯一訂單號,必填* @param WIDsubject* 訂單名稱,必填* @param WIDtotal_amount* 付款金額,必填*/@ApiOperation(value = "訂單支付", httpMethod = "POST", protocols = "HTTP", produces = "application/xml", consumes="application/x-www-form-urlencoded",response = String.class, notes = "客戶端提交訂單支付請求,對該API的返回結(jié)果不用處理,瀏覽器將自動跳轉(zhuǎn)至支付寶。<br><b>請使用普通表單提交,不能使用ajax異步提交。</b>") @RequestMapping(value = "/pay", method = RequestMethod.POST,produces="application/xml", consumes="application/x-www-form-urlencoded")public void pay(@ApiParam(name="WIDout_trade_no",value="訂單編號",required=true)@RequestParam String WIDout_trade_no, @ApiParam(name="WIDsubject",value="訂單名稱",required=true)@RequestParam String WIDsubject,@ApiParam(name="WIDtotal_amount",value="訂單金額",required=true)@RequestParam String WIDtotal_amount, HttpServletResponse response) {// 超時時間 可空String timeout_express = "2m";// 銷售產(chǎn)品碼 必填String product_code = "QUICK_WAP_PAY";/**********************/// SDK 公共請求類,包含公共請求參數(shù),以及封裝了簽名與驗簽,開發(fā)者無需關注簽名與驗簽// 調(diào)用RSA簽名方式AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(),alipayConfig.getAppID(), alipayConfig.getRsaPrivateKey(),alipayConfig.getFormat(), alipayConfig.getCharset(),alipayConfig.getAlipayPublicKey(), alipayConfig.getSignType());AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest();// 封裝請求支付信息AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();model.setOutTradeNo(WIDout_trade_no);model.setSubject(WIDsubject);model.setTotalAmount(WIDtotal_amount);model.setTimeoutExpress(timeout_express);model.setProductCode(product_code);alipay_request.setBizModel(model);// 設置異步通知地址alipay_request.setNotifyUrl(alipayConfig.getNotifyUrl());// 設置同步地址alipay_request.setReturnUrl(alipayConfig.getReturnUrl());// form表單生產(chǎn)String form = "";try {// 調(diào)用SDK生成表單form = client.pageExecute(alipay_request).getBody();System.out.println(form);response.setContentType("text/html;charset="+ alipayConfig.getCharset());response.getWriter().write(form);// 直接將完整的表單html輸出到頁面response.getWriter().flush();response.getWriter().close();} catch (AlipayApiException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 導步通知,跟蹤支付狀態(tài)變更*/@ApiIgnore@RequestMapping(value = "/notify", method = RequestMethod.POST)public void trackPaymentStatus(HttpServletRequest request,HttpServletResponse response) {try {// 獲取支付寶POST過來反饋信息Map<String, String> params = new HashMap<String, String>();Map requestParams = request.getParameterMap();for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";}// 亂碼解決,這段代碼在出現(xiàn)亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉(zhuǎn)化// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");params.put(name, valueStr);}// 獲取支付寶的通知返回參數(shù),可參考技術文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表(以下僅供參考)//// 商戶訂單號String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");// 支付寶交易號String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");// 交易狀態(tài)String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");// 獲取支付寶的通知返回參數(shù),可參考技術文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表(以上僅供參考)//// 計算得出通知驗證結(jié)果// boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String// publicKey, String charset, String sign_type)boolean verify_result = AlipaySignature.rsaCheckV1(params,alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), "RSA2");if (verify_result) {// 驗證成功// // 請在這里加上商戶的業(yè)務邏輯程序代碼 //即時到賬普通版,那么這時的交易狀態(tài)值為: TRADE_FINISHED;如果是即時到賬高級版,此時的交易狀態(tài)值就為:TRADE_SUCCESS //收到TRADE_FINISHED請求后,這筆訂單就結(jié)束了,支付寶不會再主動請求商戶網(wǎng)站了;收到TRADE_SUCCESS請求后,后續(xù)一定還有至少一條通知記錄,即TRADE_FINISHED。if (trade_status.equals("TRADE_FINISHED")) {// 判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理// 如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細,并執(zhí)行商戶的業(yè)務程序// 請務必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的// 如果有做過處理,不執(zhí)行商戶的業(yè)務程序if(!orderService.processed(out_trade_no)){orderService.paySuccess(out_trade_no, 2,trade_no);}logger.info("訂單:"+out_trade_no+" 交易完成");// 注意:// 如果簽約的是可退款協(xié)議,退款日期超過可退款期限后(如三個月可退款),支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知// 如果沒有簽約可退款協(xié)議,那么付款完成后,支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知。} else if (trade_status.equals("TRADE_SUCCESS")) {// 判斷該筆訂單是否在商戶網(wǎng)站中已經(jīng)做過處理// 如果沒有做過處理,根據(jù)訂單號(out_trade_no)在商戶網(wǎng)站的訂單系統(tǒng)中查到該筆訂單的詳細,并執(zhí)行商戶的業(yè)務程序// 請務必判斷請求時的total_fee、seller_id與通知時獲取的total_fee、seller_id為一致的// 如果有做過處理,不執(zhí)行商戶的業(yè)務程序if(!orderService.processed(out_trade_no)){orderService.paySuccess(out_trade_no, 2,trade_no);}logger.info("訂單:"+out_trade_no+" 交易成功");// 注意:// 如果簽約的是可退款協(xié)議,那么付款完成后,支付寶系統(tǒng)發(fā)送該交易狀態(tài)通知。}response.getWriter().println("success"); // 請不要修改或刪除// } else {// 驗證失敗orderService.payFailed(out_trade_no, 1,trade_no);response.getWriter().println("fail");}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage()); } catch (AlipayApiException e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());}}/*** 支付寶頁面跳轉(zhuǎn)同步通知頁面*/@ApiIgnore@RequestMapping(value = "/return", method = RequestMethod.GET)public void callback(HttpServletRequest request,HttpServletResponse response) {try {//獲取支付寶GET過來反饋信息Map<String,String> params = new HashMap<String,String>();Map requestParams = request.getParameterMap();for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";}//亂碼解決,這段代碼在出現(xiàn)亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉(zhuǎn)化valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}//獲取支付寶的通知返回參數(shù),可參考技術文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表(以下僅供參考)////商戶訂單號String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");//支付寶交易號String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");//獲取支付寶的通知返回參數(shù),可參考技術文檔中頁面跳轉(zhuǎn)同步通知參數(shù)列表(以上僅供參考)////計算得出通知驗證結(jié)果//boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)boolean verify_result = AlipaySignature.rsaCheckV1(params, alipayConfig.getAlipayPublicKey(), alipayConfig.getCharset(), "RSA2");if(verify_result){//驗證成功 String id=orderService.loadItripHotelOrder(out_trade_no).getId().toString();//提示支付成功response.sendRedirect(String.format(alipayConfig.getPaymentSuccessUrl(), out_trade_no,id));}else{ //提示支付失敗response.sendRedirect(alipayConfig.getPaymentFailureUrl());}} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());} catch (AlipayApiException e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();logger.error(e.getMessage());}} }OrderService OrderServiceImpl
package cn.itrip.trade.service;import cn.itrip.beans.pojo.ItripHotelOrder;/*** 訂單支付處理接口* @author hduser**/ public interface OrderService {/*** 加載酒店訂單* @param String orderNo* @return* @throws Exception */ public ItripHotelOrder loadItripHotelOrder(String orderNo) throws Exception;/*** 判斷該訂單是否已被處理過(被更新為已支付狀態(tài))* @param orderNo* @return* @throws Exception */public boolean processed(String orderNo) throws Exception;/*** 支付成功* @param String 訂單編號* @param payType 支付方式:1:支付寶 2:微信 3:到店付* @param tradeNo 支付平臺返回的交易碼* @throws Exception */ public void paySuccess(String orderNo, int payType, String tradeNo) throws Exception;/*** 支付失敗* @param String 訂單編號* @param payType 支付方式:1:支付寶 2:微信 3:到店付* @param tradeNo 支付平臺返回的交易碼* @throws Exception */ public void payFailed(String orderNo, int payType, String tradeNo) throws Exception; }package cn.itrip.trade.service;import java.io.BufferedReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.annotation.Resource;import cn.itrip.util.common.EmptyUtils; import cn.itrip.util.common.SystemConfig; import org.apache.log4j.Logger; import org.springframework.stereotype.Service;import cn.itrip.beans.pojo.ItripHotelOrder; import cn.itrip.beans.pojo.ItripTradeEnds;import cn.itrip.dao.hotelorder.ItripHotelOrderMapper; import cn.itrip.dao.tradeends.ItripTradeEndsMapper;/*** 訂單支付處理實現(xiàn)* @author hduser**/ @Service("orderService") public class OrderServiceImpl implements OrderService {private Logger logger=Logger.getLogger(OrderServiceImpl.class);@Resourceprivate ItripHotelOrderMapper itripHotelOrderMapper;@Resourceprivate ItripTradeEndsMapper itripTradeEndsMapper;@Resourceprivate SystemConfig systemConfig;@Overridepublic ItripHotelOrder loadItripHotelOrder(String orderNo) throws Exception {// TODO Auto-generated method stublogger.debug("加載訂單:"+orderNo);Map<String, Object> param=new HashMap();param.put("orderNo", orderNo);List<ItripHotelOrder> orders=itripHotelOrderMapper.getItripHotelOrderListByMap(param);if(orders.size()==1){return orders.get(0);}elsereturn null;}@Overridepublic void paySuccess(String orderNo, int payType,String tradeNo) throws Exception {// TODO Auto-generated method stub//更新訂單狀態(tài)、支付寶交易號logger.debug("訂單支付成功:"+orderNo);ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);itripHotelOrder.setOrderStatus(2);//支付成功itripHotelOrder.setPayType(payType);itripHotelOrder.setTradeNo(tradeNo);//交易號(如支付寶交易號)itripHotelOrderMapper.updateItripHotelOrder(itripHotelOrder);//增加訂單后續(xù)待處理記錄ItripTradeEnds itripTradeEnds=new ItripTradeEnds();itripTradeEnds.setId(itripHotelOrder.getId());itripTradeEnds.setOrderNo(itripHotelOrder.getOrderNo());itripTradeEndsMapper.insertItripTradeEnds(itripTradeEnds);//通知業(yè)務模塊后續(xù)處理sendGet(systemConfig.getTradeEndsUrl(),"orderNo="+orderNo);}@Overridepublic void payFailed(String orderNo, int payType,String tradeNo) throws Exception {// TODO Auto-generated method stublogger.debug("訂單支付失敗:"+orderNo);ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);itripHotelOrder.setOrderStatus(1);//支付狀態(tài):已取消itripHotelOrder.setPayType(payType);itripHotelOrder.setTradeNo(tradeNo);//交易號(如支付寶交易號)itripHotelOrderMapper.updateItripHotelOrder(itripHotelOrder);}@Overridepublic boolean processed(String orderNo) throws Exception {// TODO Auto-generated method stubItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);return itripHotelOrder.getOrderStatus().equals(2)&&!EmptyUtils.isEmpty(itripHotelOrder.getTradeNo());}/*** 向指定URL發(fā)送GET方法的請求* * @param url* 發(fā)送請求的URL* @param param* 請求參數(shù),請求參數(shù)應該是 name1=value1&name2=value2 的形式。* */@SuppressWarnings("unused")public void sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url + "?" + param;URL realUrl = new URL(urlNameString);// 打開和URL之間的連接URLConnection connection;if(systemConfig.getTradeUseProxy()){//代理環(huán)境Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(systemConfig.getTradeProxyHost(), systemConfig.getTradeProxyPort())); connection= realUrl.openConnection(proxy);}else{connection= realUrl.openConnection();}// 設置通用的請求屬性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建立實際的連接connection.connect(); System.out.println(connection.getContentLength());} catch (Exception e) {logger.error("發(fā)送GET請求出現(xiàn)異常!" + e); e.printStackTrace();}} }applicationContext-alipay.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 支付寶手機網(wǎng)站支付 --><bean class="cn.itrip.trade.config.AlipayConfig"><property name="appID" value="2016102300742807"/><property name="rsaPrivateKey" value="輸入你的公鑰"/><property name="notifyUrl" value="http://ailvxing123.cn1.utools.club/trade/api/notify"/> <!-- <property name="returnUrl" value="http://itrip.test.com/trade/api/return"/>--><property name="returnUrl" value="http://ailvxing123.cn1.utools.club/trade/api/notify"/><property name="url" value="https://openapi.alipaydev.com/gateway.do"/><property name="charset" value="UTF-8"/><property name="format" value="json"/><property name="alipayPublicKey" value="對應自己的"/><property name="logPath" value="/logs"/><property name="signType" value="RSA2"/><!-- <property name="paymentSuccessUrl" value="/itriptrade/success.jsp"/> --> <!-- <property name="paymentSuccessUrl" value="http://itrip.test.com/index.html#/orderpaystate?orderNo=%s&id=%s"/>--><property name="paymentSuccessUrl" value="http://localhost:8082/index.html#/orderpaystate?orderNo=%s&id=%s"/> <!-- <property name="paymentFailureUrl" value="http://itrip.test.com/index.html#/orderpaystate?orderNo=%s&id=%s&state=0"/>--><property name="paymentFailureUrl" value="http://localhost:8082/index.html#/orderpaystate?orderNo=%s&id=%s&state=0"/></bean> </beans>總結(jié)
以上是生活随笔為你收集整理的java实现 支付宝支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员食品营养(2)-日式乳酪酱和巧克力
- 下一篇: MyBatis-Plus——增删查改