1、在支付宝开放平台(https://open.alipay.com/platform/home.htm)申请对应的功能
找到页或者移动应用列表
你可以看到你已申请的应用
点击进入应用详情增加功能:
2、在自己的javaweb应用里引入对应的jar包
com.alipay.sdk
alipay-sdk-java
4.3.0.ALL
3、支付宝相关配置信息
可根据自己的情况配置相关的内容,下面只作为相关示意
package com.fast.tpp.dto;
public class AlipayConfig {
/**
* 签约的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成
*/
public static final String PID = "xx";
/**
* 正式环境请求地址
*/
public static String ALIPAY_URL = "https://openapi.alipay.com/gateway.do";
/**
* 支付宝分配给开发者的应用ID
*
*/
public static String APP_ID = "xx";
/**
* 仅支持JSON
*/
public static String FORMAT = "JSON";
/**
* 请求使用的编码格式
*/
public static String CHARSET = "utf-8";
/**
* 商户生成签名字符串所使用的签名算法类型
*/
public static String SIGN_TYPE = "RSA2";
/**
* 支付宝公钥
*/
public static String ALIPAY_PUBLIC_KEY =xx";
/**
* 商户私钥
*/
public static String PRIVATE_KEY =xx";
/**
* 回调地址
*/
public static String CALLBACK_URL = "xx";
/**
* web支付跳转地址
*/
public static String WEB_RETURN_URL = "xx";
}
4、初始化阿里支付相关配置,只贴部分代码作参考
@Service
@Log4j2
public class AlipaySaoImpl implements AlipaySao {
@Autowired
private RedisService redisService;
// 实例化客户端
AlipayClient alipayClient;
public AlipaySaoImpl(){
// 实例化客户端
alipayClient = new DefaultAlipayClient(
AlipayConfig.ALIPAY_URL,
AlipayConfig.APP_ID,
AlipayConfig.PRIVATE_KEY,
AlipayConfig.FORMAT,
AlipayConfig.CHARSET,
AlipayConfig.ALIPAY_PUBLIC_KEY,
AlipayConfig.SIGN_TYPE);
}
5、web支付相关方法代码
package com.fast.tpp.dto;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
public class AlipayWebPayDTO
{
/**
* 商户订单号,必填
*
*/
private String out_trade_no;
/**
* 订单名称,必填
*/
private String subject;
/**
* 付款金额,必填
* 根据支付宝接口协议,必须使用下划线
*/
private String total_amount;
/**
* 商品描述,可空
*/
private String body;
/**
* 超时时间参数
*/
private String timeout_express= "5m";
/**
* 产品编号
*/
private String product_code= "FAST_INSTANT_TRADE_PAY";
}
/**
* web支付接口
* @param alipayBean
* @return
* @throws AlipayApiException
*/
@Override
public String webPagePay(AlipayWebPayDTO alipayBean) throws AlipayApiException {
// 2、设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
// 页面跳转同步通知页面路径
alipayRequest.setReturnUrl(AlipayConfig.WEB_RETURN_URL);
// 服务器异步通知页面路径
alipayRequest.setNotifyUrl(AlipayConfig.CALLBACK_URL);
// 封装参数
alipayRequest.setBizContent(JSON.toJSONString(alipayBean));
// 3、请求支付宝进行付款,并获取支付结果
String result = alipayClient.pageExecute(alipayRequest).getBody();
// 返回付款信息
return result;
}
6、最终返回给客户端的result值为,里面是一个form,页面拿到后会自动跳转到支付宝的订单支付页面
{
"code": "00",
"msg": "请求成功!",
"data": {
"orderString": "
\n",
"orderNo": "20200217155823617499935"
}
}
7、回调方法相关代码
/**
* 支付宝支付通知
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value="/alipayNotice.do",method = RequestMethod.POST)
@ResponseBody
@NoneAuth
@SysLog(actionName = "支付宝支付通知")
public String alipayNotice(HttpServletRequest request, HttpServletResponse response) throws IOException {
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] ",";
}
params.put(name, valueStr);
}
// 切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
try {
boolean flag = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET,
AlipayConfig.SIGN_TYPE);
if (flag) {
String tradeStatus = params.get("trade_status");
String outTradeNo = params.get("out_trade_no");
String tradeNo = params.get("trade_no");
//购买者用户ID
String openId = params.get("buyer_logon_id");
this.orderService.alipayNotice(tradeStatus,outTradeNo,tradeNo,openId);
if ("TRADE_SUCCESS".equals(tradeStatus)){
return "success";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "fail";
}
大致如上,欢迎大家批评指正
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/8015.html