编程语言
首页 > 编程语言> > Java对接第三方支付-支付宝篇

Java对接第三方支付-支付宝篇

作者:互联网

文章目录


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、登录支付宝开放平台

支付宝开放平台

二、配置密钥

1.下载密钥工具

密钥工具下载地址
在这里插入图片描述

2.生成密钥

安装后打开,点击生成密钥
在这里插入图片描述

3.填入生成的公钥并保存

私钥一会需要用到
在这里插入图片描述

三、配置参数

1.账号

在这里插入图片描述

2.APPID跟网关

在这里插入图片描述

四、代码部分

1.依赖

<dependency>
	<groupId>com.alipay.sdk</groupId>
	<artifactId>alipay-sdk-java</artifactId>
	<version>3.4.27.ALL</version>
</dependency>

2.配置类

public class AlipayConfig {

	// 商户appid
	public static String APPID = "";
	// 私钥pkcs8格式的(刚刚生成的私钥)
	public static String RES_PRIVATE_KEY = "";
	// 服务器异步通知页面路径 需要http://或者https://格式的完整路径,不能加?id=123这类的自定义参数,必须外网可正常访问
	public static String notify_url = "";
	public static String return_url = "";
	// 请求网关地址
	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 = "";
	// RSA2
	public static String SIGNTYPE = "RSA2";

}

①.支付宝公钥查看位置

在这里插入图片描述

②.私钥PKCS8格式查看位置

在这里插入图片描述

Controller层

package com.ityinp.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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 com.ityinp.config.AlipayConfig;

/**
 * 
 * @author yinp
 * @explain
 * @date 2020-12-7
 */
@RestController
@RequestMapping("/Index")
public class IndexController {

	/**
	 * @explain 付款
	 * @param request
	 * @return
	 * @throws AlipayApiException
	 */
	@GetMapping("/Pay")
	public String Pay(HttpServletRequest request) throws AlipayApiException {
		// 商品id
		String outTradeNo = "10012";
		// 商品名称
		String subject = "iPhone 12 Pro Max 512G 银白色";
		// 支付金额
		String totalAmount = "9.9";
		// 商品描述
		String body = "";
		// 请求超时时间
		String timeoutExpress = "2m";
		// 商品code
		String productCode = "10001";

		AlipayConfig alipayConfig = new AlipayConfig();

		// 1.封装 Rsa签名方式
		// 参数1.请求网关
		// 参数2.收款人id
		// 参数3.支付宝私钥
		// 参数4.返回格式
		// 参数5.字符编码格式
		// 参数6.支付宝公钥
		// 参数7.加密方式
		AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig.URL, alipayConfig.APPID,
				alipayConfig.RES_PRIVATE_KEY, alipayConfig.FORMAT, alipayConfig.CHARSET, alipayConfig.ALIPAY_PUBLIC_KEY,
				alipayConfig.SIGNTYPE);

		// 2.创建 Request请求
		AlipayTradeWapPayRequest aliRequest = new AlipayTradeWapPayRequest();

		// 封装传入参数
		AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
		model.setOutTradeNo(outTradeNo);
		model.setSubject(subject);
		model.setTotalAmount(totalAmount);
		model.setBody(body);
		model.setTotalAmount(totalAmount);
		model.setProductCode(productCode);

		// 设置参数
		aliRequest.setBizModel(model);
		// 设置异步回调地址
		aliRequest.setNotifyUrl(alipayConfig.notify_url);
		// 设置同步回调地址
		aliRequest.setReturnUrl(alipayConfig.return_url);

		// 生成表单
		String result = alipayClient.pageExecute(aliRequest).getBody();

		return result;
	}

	/**
	 * @explain 付款回调
	 * @param request
	 * @throws AlipayApiException
	 * @throws IOException
	 */
	@GetMapping("/PayCallback")
	public void PayCallback(HttpServletRequest request, HttpServletResponse response)
			throws AlipayApiException, IOException {

		// 参数
		Map<String, String> paramsMap = getParameter(request);

		System.out.println(paramsMap);

		AlipayConfig alipayConfig = new AlipayConfig();

		boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, alipayConfig.ALIPAY_PUBLIC_KEY,
				alipayConfig.CHARSET, alipayConfig.SIGNTYPE); // 调用SDK验证签名
		System.out.println(signVerified);
		if (signVerified) {
			System.out.println("交易成功");
			//交易成功后修改数据库订单状态
			// TODO
			// 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
			//	此次一定要返回success  不然支付宝不知道你有没有接收到,会连续回调
			response.setCharacterEncoding("utf-8");
			response.getWriter().print("success");
			response.getWriter().flush();
		} else {
			// TODO 验签失败则记录异常日志,并在response中返回failure.
		}

	}

	public Map<String, String> getParameter(HttpServletRequest request) {
		Map<String, String> paramsMap = new HashMap<String, String>();

		Map<String, String[]> reqMap = request.getParameterMap();
		for (String key : reqMap.keySet()) {
			String[] values = (String[]) reqMap.get(key);
			String value = "";
			if (values.length > 0) {
				value = values[0];
			}
			paramsMap.put(key, value);
		}
		return paramsMap;
	}

}

总结

啥也没有

标签:支付宝,Java,String,对接,static,alipayConfig,import,com,public
来源: https://blog.csdn.net/weixin_45932023/article/details/110817726