SSM实现支付宝【沙箱PC端支付】

肺腑之言

  • 解释一下:沙箱就等于测试环境,没什么神奇的自己玩很简单!!!
  • 如有哪里还不够满意,自行百度详细了解!这里只讲重点
  • 无论是支付宝还是别的操作,只要是关于密钥始终不要告诉任何人

第一步【进入支付宝官网,注册/登录自己账号】

  1. https://www.alipay.com/ 点击导航=======》》》我是开发者【可以拿支付宝APP扫码登录】
  2. https://open.alipay.com/platform/appDaily.htm 直接进入沙箱环境
  3. 沙箱环境配置,百度或CSDN直接搜索:沙箱环境配置

第二步【下载支付宝开放平台开发助手,配置密钥】

根据自己的系统型号下载:https://opendocs.alipay.com/common/02khjo

在这里插入图片描述

第三步【下载沙箱APP,用于付款】

在这里插入图片描述

登录账号使用沙箱账号【使用买家账号登录,这里信息没有截屏防止别人也可以用你的账号】

在这里插入图片描述

第四步【导入依赖,配置支付宝信息】

<dependency>
  	<groupId>com.alipay.sdk</groupId>
     	<artifactId>alipay-sdk-java</artifactId>
  	<version>3.3.49.ALL</version>
</dependency>
package cn.itrip.trade.sdk.alipay;

public class AlipayConfig {
	// 商户appid
	public static String APPID = "自己的APPid";
	//私钥 pkcs8格式的
	public static String RSA_PRIVATE_KEY = "\\\到沙箱应用的去复制///";
	// 服务器异步通知页面路径 注意看路径格式,不可带参数  http://u2pjmk.natappfree.cc 使用的natAPP
	public static String notify_url = "http://u2pjmk.natappfree.cc/trade/api/aliNotify";
	// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
	public static String return_url = "http://商户网关地址/alipay.trade.wap.pay-JAVA-UTF-8/return_url.jsp";
	// 请求网关地址
	public static String URL = "https://openapi.alipaydev.com/gateway.do";
	// 编码
	public static String CHARSET = "UTF-8";
	// 返回格式
	public static String FORMAT = "json";
	// 支付宝公钥
	public static String ALIPAY_PUBLIC_KEY = "\\\到沙箱应用的去复制///";
	// 日志记录目录
	public static String log_path = "/log";
	// RSA2
	public static String SIGNTYPE = "RSA2";
}

第五步【下载natapp实现内网穿透】

所谓内网穿透:

支付宝【支付成功、失败】时,需要返回信息给我们,但是支付宝无法调用我们本机的端口,这里就需要用到第三方代理工具来代理我们本地端口,让支付宝可以可以访问到:本次使用的是natapp,当然这个代理工具看你自己,用哪一种不重要!!!

第六步【实现Controller编写】

@Controller
@RequestMapping("/api")
public class PayController {
	@Resource
	private OrderService orderService;

	/**
	 * 发起下单信息
	 * @param orderNo  订单号
	 * @param req
	 * @param resp
	 * @throws AlipayApiException
	 * @throws IOException
	 */
	@GetMapping("/prepay/{orderNo}")
	public void prepay(@PathVariable String orderNo,
					   HttpServletRequest req,
					   HttpServletResponse resp) throws AlipayApiException, IOException {
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=UTF-8");

		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL,
				AlipayConfig.APPID,AlipayConfig.RSA_PRIVATE_KEY,
				"json",AlipayConfig.CHARSET,AlipayConfig.ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);

		AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
		request.setNotifyUrl(AlipayConfig.notify_url);
		//查询订单信息
		ItripHotelOrder orderInfo = orderService.queryOrderInfo(orderNo);
		//订单必传信息
		JSONObject bizContent = new JSONObject();
		bizContent.put("out_trade_no",orderInfo.getOrderNo());
		bizContent.put("total_amount", orderInfo.getPayAmount());
		bizContent.put("subject", orderInfo.getHotelName());
		bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");

		request.setBizContent(bizContent.toString());
		AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
		if(response.isSuccess()){
			System.out.println("调用成功");
		} else {
			System.out.println("调用失败");
		}
        //response.getBody() 直接获取支付宝返回的页面,响应出去
		resp.getWriter().print(response.getBody());
	}

	/**
	 * 支付宝异步回调
	 * @param req
	 * @throws Exception
	 */
	@PostMapping("/aliNotify")
	public void aliNotify(HttpServletRequest req) throws Exception {
		System.err.println("JSONObject.toJSONString(req.getParameterMap()) = \n" +
				JSONObject.toJSONString(req.getParameterMap()));
		//out_trade_no  下单生成的订单号
		//trade_no  支付宝返回的订单号
		Map<String, String[]> map = req.getParameterMap();
		String outTradeNo = map.get("out_trade_no")[0];
		String aliTradeNo = map.get("trade_no")[0];
		//修改订单状态   减去实时库存
		orderService.updateOrderStatusANDtempStore(outTradeNo,aliTradeNo);
	}
}	
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值