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,一经查实,立即删除!

相关文章

python读取git日志_Python获取gitlab提交历史!

工作中的场景&#xff0c;记录下来分享给大家。需求公司私有部署了gitlab保存公司代码&#xff0c;希望在发布系统中可以展示项目在gitlab的提交历史&#xff0c;供发布人员选择提交commit记录并构建对应的docker镜像。不可行的方案但是很快我就发现&#xff0c;这个方案是不可…

js 对象和构造函数

一、对象的创建方法 题外话&#xff1a; java c 同样能生产出对象&#xff0c;但是是死的 JavaScript 生产出的对象是活的&#xff0c;更像是人的生长过程&#xff0c;后天可以增加和删除方法 用字面量创建 var obj {};二、对象的增删改 增 let obj {};obj.name 张三; …

Java接入支付宝支付教程

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

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

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

对象的包装类

一、首先抛出疑问&#xff1a; 原始值为啥添加属性而且不会报错 &#xff1f;&#xff1f;&#xff1f; var str a; str.name abc; console.log(str.name); // 就是因为原始值要经过包装类 var str abc; str.length 2; // new String(abc).length 2; delete console.lo…

expdp导出 schema_Oracle使用数据泵在异机之间导出导入多个 schema

需求&#xff1a;A机中的oracle有pingchuan和zte两个用户(schema)&#xff0c;这两个schema中都有数据。B机刚装完oracle数据库并建好实例&#xff0c;没有数据。A机的IP为192.168.1.131&#xff0c;B机的IP为192.168.1.137。要求把A机中的pingchuan和zte导入到B机中。(1)A机导…

SpringBoot整合阿里云OSS上传文件

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

js 原型以及原型链

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

python tfidf特征变换_使用sklearn提取文本的tfidf特征

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer, TfidfTransformercorpus [This is the first document.,This is the second second document.,And the third one.,Is this the first document?,]CountVectorizer是通过fit_transform函数将…

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

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

js 继承发展史

一、传统模式 – 利用原型链 Grand.prototype.lastName 王五; function Grand() {} var grand new Grand();Father.prototype grand; function Father() {this.name 李四 } var father new Father();Son.prototype father; function Son() {} var son new Son(); conso…

vue 调用webservice_js跨域调用WebService的简单实例

步骤1. 在web.config中的system.web节点里加入步骤2.webservice代码using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;using System.Web.Mvc;namespace WebService{/// /// WebService1 的摘要说明/// [WebServic…

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

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

属性的表示方法和对象的枚举

对象 一、对象.属性 var obj {name : mary,age : 18 };console.log(obj.name, obj.age); // mary 18二、对象[‘属性’] – 让对象属性更加灵活 var zhang {wife1: {name: xiaomei},wife2: {name: xiaoli},wife3: {name: xiaowang},wife4: {name: xiaoxiao},sayWife: funct…

docker 启动成功但无法访问_docker nginx 运行后无法访问的问题解决

## 1最近在学docker部署&#xff0c;一开始打算将nginx先docker化的。对照官方的docker镜像介绍说明&#xff0c;进行自定义配置将官方的nginx.conf复制出来后&#xff0c;修改添加了一些自定义&#xff0c;主要是屏蔽了default.conf&#xff0c;以及include文件夹 sites-avail…

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

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

ES6 let 和 const 关键字

一、ES5 的 var 关键字 var 存在变量提升var 允许重复声明&#xff0c;浏览器本身只识别一次&#xff0c;但不会报错var 声明的变量即是全局变量&#xff0c;也相当于给 GO(window) 设置了一个属性而且两者建立映射机制基于 typeof 检测一个没有被声明过的变量&#xff0c;并不…

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

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

js 里面令人头疼的 this

JS中this相关问题梳理 this 就是 js 里的关键字&#xff0c;有特殊意义&#xff0c;代表函数执行主体 一、定义 函数执行主体&#xff08;不是作用域&#xff09;&#xff1a;意思是谁把函数执行了&#xff0c;那么执行主体就是谁 二、使用情况 全局作用域里的this 是window…

大数据专业考研书_考研必知大数据(完整版)

由上面的两组图表&#xff0c;不难看出&#xff0c;历史和医学的读研比例遥遥领先。另外由图可知&#xff0c;全国有百分之十三的本科生选择了毕业后读研&#xff0c;而这其中有近三成的人是选择了在读研时转换专业。部分省份报名人数汇总结合历年报考人数统计数据来看&#xf…