java实现 支付宝支付

文章目录

  • 支付宝开放平台官网
  • 创建demo实例分析
  • 效果图
  • 实例代码
      • AlipayConfig
      • PaymentController
      • OrderService OrderServiceImpl
      • applicationContext-alipay.xml

在这里插入图片描述
在这里插入图片描述

支付宝开放平台官网

用自己手机支付宝扫码登录 根据页面提示填写自己真实信息 进去之后
在这里插入图片描述
东西主要用的就在这里
在这里插入图片描述
sdk 在 点文档 找到 下面的开发工具
在这里插入图片描述
在这里插入图片描述

创建demo实例分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
弄新版的 里面有对应java代码 复制来 修改处都换成自己的
在这里插入图片描述

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.factory.Factory.Payment;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;public class Main {public static void main(String[] args) throws Exception {// 1. 设置参数(全局只需设置一次)Factory.setOptions(getOptions());try {// 2. 发起API调用(以创建当面付收款二维码为例)AlipayTradePrecreateResponse response = Payment.FaceToFace().preCreate("Apple iPhone11 128G", "2234567890", "5799.00");// 3. 处理响应或异常if (ResponseChecker.success(response)) {System.out.println("调用成功");} else {System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);}} catch (Exception e) {System.err.println("调用遭遇异常,原因:" + e.getMessage());throw new RuntimeException(e.getMessage(), e);}}private static Config getOptions() {Config config = new Config();config.protocol = "https";config.gatewayHost = "openapi.alipay.com";config.signType = "RSA2";config.appId = "<-- 请填写您的AppId,例如:2019091767145019 -->";// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中config.merchantPrivateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";//注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可// config.alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";//可设置异步通知接收服务地址(可选)config.notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->";//可设置AES密钥,调用AES加解密相关接口时需要(可选)config.encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";return config;}
}

里面需要更换的地方 都有提示

在这里插入图片描述
下面是第一次用的是时候(总结来说就是 使用工具 生成密钥 复制生成的公钥填到RSA2公钥中 生个应用公钥 支付宝公钥(将来要用的就是 工具生成的私钥 支付宝公钥))
在这里插入图片描述
在这里插入图片描述

弄过的话想换 就是更换应用公钥 会自动生成 保存即可在这里插入图片描述
在这里插入图片描述
下载好工具后打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
还需要证书 按下面网址往下滑找到公钥证书方式教程
公钥证书方式
在这里插入图片描述
在这里插入图片描述
全选了 这里好像没验证过 应该没关系放弃了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面失败了 从来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这次上传好了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
放弃上面了
插件地址
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
重启IDEA
在这里插入图片描述
下面弄错了选择第二个 QuickStart
在这里插入图片描述
提供下面3处内容
在这里插入图片描述
运行时说没有授权码 下面尝试弄授权码
下面失败
在这里插入图片描述
下面先去注册个小程序 没什么用里面没得授权码啥的
在这里插入图片描述

https://github.com/alipay/alipay-intellij-plugin/releases

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实例代码

给出部分
在这里插入图片描述
在这里插入图片描述

AlipayConfig

package cn.itrip.trade.config;/***  支付宝手机网站接入配置信息* @author hduser**/
public class AlipayConfig {/*** 商户appid*/private String appID;/*** 私钥 pkcs8格式的*/private String rsaPrivateKey;/*** 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问*/private String notifyUrl;/*** 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址*/private String returnUrl;/*** 请求网关地址*/private String url;/*** 编码*/private String charset;/*** 返回格式*/private String format;/*** 支付宝公钥*/private String alipayPublicKey;/*** 日志记录目录*/private String logPath;/*** RSA2*/private String signType;///支付结果显示/*** 支付成功跳转页面*/private String paymentSuccessUrl;/*** 支付失败跳转页面*/private String paymentFailureUrl;///支付结果显示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*            商户订单号,商户网站订单系统中唯一订单号,必填* @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的返回结果不用处理,浏览器将自动跳转至支付宝。<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";// 销售产品码 必填String product_code = "QUICK_WAP_PAY";/**********************/// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签// 调用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表单生产String form = "";try {// 调用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();}}/*** 导步通知,跟踪支付状态变更*/@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] + ",";}// 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");params.put(name, valueStr);}// 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//// 商户订单号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");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");// 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//// 计算得出通知验证结果// 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) {// 验证成功// // 请在这里加上商户的业务逻辑程序代码		//即时到账普通版,那么这时的交易状态值为:  TRADE_FINISHED;如果是即时到账高级版,此时的交易状态值就为:TRADE_SUCCESS	//收到TRADE_FINISHED请求后,这笔订单就结束了,支付宝不会再主动请求商户网站了;收到TRADE_SUCCESS请求后,后续一定还有至少一条通知记录,即TRADE_FINISHED。if (trade_status.equals("TRADE_FINISHED")) {// 判断该笔订单是否在商户网站中已经做过处理// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序// 请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的// 如果有做过处理,不执行商户的业务程序if(!orderService.processed(out_trade_no)){orderService.paySuccess(out_trade_no, 2,trade_no);}logger.info("订单:"+out_trade_no+" 交易完成");// 注意:// 如果签约的是可退款协议,退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知// 如果没有签约可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。} else if (trade_status.equals("TRADE_SUCCESS")) {// 判断该笔订单是否在商户网站中已经做过处理// 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序// 请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的// 如果有做过处理,不执行商户的业务程序if(!orderService.processed(out_trade_no)){orderService.paySuccess(out_trade_no, 2,trade_no);}logger.info("订单:"+out_trade_no+" 交易成功");// 注意:// 如果签约的是可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。}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());}}/*** 支付宝页面跳转同步通知页面*/@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] + ",";}//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)////商户订单号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");//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)////计算得出通知验证结果//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;/*** 判断该订单是否已被处理过(被更新为已支付状态)* @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;/*** 订单支付处理实现* @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//更新订单状态、支付宝交易号logger.debug("订单支付成功:"+orderNo);ItripHotelOrder itripHotelOrder=this.loadItripHotelOrder(orderNo);itripHotelOrder.setOrderStatus(2);//支付成功itripHotelOrder.setPayType(payType);itripHotelOrder.setTradeNo(tradeNo);//交易号(如支付宝交易号)itripHotelOrderMapper.updateItripHotelOrder(itripHotelOrder);//增加订单后续待处理记录ItripTradeEnds itripTradeEnds=new ItripTradeEnds();itripTradeEnds.setId(itripHotelOrder.getId());itripTradeEnds.setOrderNo(itripHotelOrder.getOrderNo());itripTradeEndsMapper.insertItripTradeEnds(itripTradeEnds);//通知业务模块后续处理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);//支付状态:已取消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发送GET方法的请求* * @param url*            发送请求的URL* @param param*            请求参数,请求参数应该是 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()){//代理环境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("发送GET请求出现异常!" + 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"><!-- 支付宝手机网站支付 --><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&amp;id=%s"/>--><property name="paymentSuccessUrl" value="http://localhost:8082/index.html#/orderpaystate?orderNo=%s&amp;id=%s"/>
<!--		<property name="paymentFailureUrl" value="http://itrip.test.com/index.html#/orderpaystate?orderNo=%s&amp;id=%s&amp;state=0"/>--><property name="paymentFailureUrl" value="http://localhost:8082/index.html#/orderpaystate?orderNo=%s&amp;id=%s&amp;state=0"/></bean>
</beans>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java接入支付宝支付教程

Java接入支付宝支付教程 一、创建应用 1.登录支付宝开放平台 支付宝开放平台网址&#xff1a;https://open.alipay.com/platform/developerIndex.htm 2.创建一个应用 ? 图1 二 、设置应用密钥 1.下载安装支付宝开放平台助手 软件下载地址&#xff1a;https://gw.alipay…

虚拟同步发电机_测量虚拟同步发电机惯量与阻尼系数的新方法

华北电力大学分布式储能与微网河北省重点实验室的研究人员颜湘武、王俣珂、贾焦心、王德胜、张波&#xff0c;在2019年第7期《电工技术学报》上撰文(论文标题为“基于非线性最小二乘曲线拟合的虚拟同步发电机惯量与阻尼系数测量方法”)指出&#xff0c;虚拟同步发电机(VSG)技术…

SpringBoot整合阿里云OSS上传文件

一、需求分析 文件上传是一个非常常见的功能&#xff0c;就是通过IO流将文件写到另外一个地方&#xff0c;这个地方可以是项目下的某个文件夹里&#xff0c;或者是本地电脑某个盘下面&#xff0c;还可以是云服务OSS里面&#xff0c;这里就是我要讲到的OSS&#xff0c;我写的是…

js 原型以及原型链

原型编程的基本规则&#xff1a; 所有的数据都是对象要得到一个对象&#xff0c;不是通过实例化类&#xff0c;而是找到一个对象作为原型并克隆它对象会记住它的原型如果对象无法相应某个请求&#xff0c;它会把这个请求委托给它自己的原型 直接上图 一、继续说说构造函数 …

SpringBoot整合阿里云OSS文件上传、下载、查看、删除

SpringBoot整合阿里云OSS文件上传、下载、查看、删除 该项目源码地址&#xff1a;https://github.com/ggb2312/springboot-integration-examples &#xff08;其中包含SpringBoot和其他常用技术的整合&#xff0c;配套源码以及笔记。基于最新的 SpringBoot2.1&#xff0c;欢迎各…

SpringBoot整合oss实现文件的上传,查看,删除,下载

springboot整合oss实现文件的上传,查看,删除,下载 1.什么是对象存储 OSS? 答&#xff1a;阿里云对象存储服务&#xff08;Object Storage Service&#xff0c;简称 OSS&#xff09;&#xff0c;是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低…

minio实现文件上传下载和删除功能

前言 之前用到文件上传功能&#xff0c;在这里做个学习记录。使用minio实现&#xff0c;后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较&#xff08;oss根据流量收费&#xff09;。minio的中文文档&#xff1a;https://docs.min.io/cn/ minio安装 首先查询d…

Spring Boot配置MinIO(实现文件上传、下载、删除)

1 MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&#xff…

Stream中toMap引发NullPointerException____Stream的执行流程

Stream中toMap引发NullPointerException 1、引发NullPointerException的代码如下&#xff1a; List<SelfSettlementCardInfoDto> selfSettlementCardInfoDtos selfCardAdapterManager.listSelfSettlementCardInfoDtoByCardIds(queryDto.getPartnerId(), cardIds, false…

Map集合使用get方法返回null抛出空指针异常问题

Map集合使用get方法空指针异常问题 前言 1.Map里面只能存放对象&#xff0c;不能存放基本类型&#xff0c;例如int&#xff0c;需要使用Integer 2.Map集合取出时&#xff0c;如果变量声明了类型&#xff0c;会先进行拆箱&#xff0c;再进行转换。 空指针问题 如图&#xff…

java各map中存放null值

java中各map中是否可以存储null值情况

Java 8————Collectors中的中的joining 方法和mapping方法

先定义好后面做示例要用的数据&#xff1a; List<User> listUser new ArrayList<>(); listUser.add(new User("李白", 20, true)); listUser.add(new User("杜甫", 40, true)); listUser.add(new User("李清照", 18, false)); lis…

编译器说 Lambda 表达式中的变量必须是 final 的,我偏不信

偶尔&#xff0c;我们需要在 Lambda 表达式中修改变量的值&#xff0c;但如果直接尝试修改的话&#xff0c;编译器不会视而不见听而不闻&#xff0c;它会警告我们说&#xff1a;“variable used in lambda expression should be final or effectively final”。 这个问题发生的…

pandas series取值_【小学生级】pandas入门到精通备查表——AI未来系列3

在未来面前&#xff0c;每个人都是学生江海升月明&#xff0c;天涯共此时&#xff0c;关注江时&#xff01;引子篇为AI未来系列第三篇&#xff0c;中阶部分开始。pandas的数据分析功能比excel强太多&#xff0c;基本上学会pandas&#xff0c;走遍天下都不怕。这是我的备查字典&…

instanceof 和 对象转型

一、instanceof 判断某个对象是否属于某个类 father1 instanceof Father; // true// 如果有子类继承父类的话 son instanceof Father; // true二、对象转型 子转父 > 自动转&#xff08;向下转型&#xff09; 父转子 > 强转&#xff08;向上转型&#xff09; 三、Obj…

从lambda表达式看final关键字

Variable used in lambda expression should be final or effectively final 想必大家在开发java程序的时候应该经常见到。 这是因为在lambda的匿名表达式里需要传入final的对象&#xff0c;那么这是为什么呢&#xff1f; 因为lambda是匿名表达式&#xff0c;它是在新开的一个…

lambda表达式或者匿名函数中为什么要求外部变量为final

1、参考博客 关于Lambda表达式里面修改外部变量问题JDK8之前&#xff0c;匿名内部类访问的局部变量为什么必须要用final修饰 2、匿名内部类 在jdk7之前&#xff0c;匿名内部类访问外部类的局部变量时&#xff0c;那么这个局部变量必须用final修饰符修饰&#xff0c;如下图1所…

你知道Java中final和static修饰的变量是在什么时候赋值的吗?

开始 一位朋友在群里问了这样一个问题&#xff1a; 本着乐于助人的想法&#xff0c;我当时给出的回答&#xff1a; 后来我总觉得哪里不对劲&#xff0c;仔细翻阅了《Java虚拟机规范》和《深入理解Java虚拟机》这一部分的内容&#xff0c;害&#xff01;发现自己理解的有问题。…

获取元素大小和位置的方式

一、直接获取元素样式属性值 – element.style.width console.log(div.style.width); // 500px console.log(parseInt(div.style.width)); // 500 console.log(typeof (div.style.width)); // string二、Offset 偏移量 offsetWidth width padding border offsetHeight he…

normalize函数_Pandas 数据处理(一) —— 几个简单函数掌握!

对于 Pandas&#xff0c; 接触过 Python 数据处理的小伙伴们都应该挺熟悉的&#xff0c;做数据处理不可或缺的一个程序包&#xff0c;最大的特点高效&#xff0c;本篇文章将通过案例介绍一下 Pandas 的一些基础使用&#xff01;1&#xff0c;读入数据大部分数据都可以用 read_c…