文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、登录支付宝开放平台
二、配置密钥
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;
}
}
五、测试
1.浏览器直接访问地址
①.付款地址:/Index/Pay
输入地址后进入该页面
我这边是已经登录过了,没登陆的使用沙箱账号里的买家账号登录
支付成功后调用回调接口
搞定!!!
总结
啥也没有