蓝色网站,做服装招聘的网站,搭建网站大概需要多少钱,重庆如何软件网站推广提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 一、开发前准备#xff1f;二、使用步骤1、引入库2、配置在 application.yml 里面进行配置#xff1a;3、alipay的java配置#xff1a;AplipayConfig.java4、支付… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 一、开发前准备二、使用步骤1、引入库2、配置在 application.yml 里面进行配置3、alipay的java配置AplipayConfig.java4、支付接口4、回调接口 一、开发前准备
easy支付官方文档https://opendocs.alipay.com/open/009ys9
通用版文档https://opendocs.alipay.com/open/02np94
支付宝沙箱的配置 注册支付宝开发者账户进入开发者控制台
沙箱快捷入口 https://open.alipay.com/develop/sandbox/app 沙箱的界面 二、使用步骤
1、引入库
dependencygroupIdcom.alipay.sdk/groupIdartifactIdalipay-easysdk/artifactIdversion2.2.2/version
/dependency
2、配置在 application.yml 里面进行配置
#阿里沙箱支付配置
alipay:#签名算法signType: #应用IDappId: #应用私钥appPrivateKey:#支付宝公钥publicKey: #回调地址notifyUrl: 3、alipay的java配置AplipayConfig.java
/*** author Mr.ZJW* date Created 2023/9/20 17:40* descriptionalipay沙箱环境配置*/
Slf4j
Data
Component
ConfigurationProperties(prefix alipay)
public class AlipayConfig {/*** appId*/private String appId;/*** 私钥*/private String appPrivateKey;/*** 公钥*/private String publicKey;/*** 回调地址*/private String notifyUrl;/*** 支付宝配置初始化,公钥模式*/PostConstructpublic void init() {Config config new Config();//#基础配置config.protocol https; //协议config.gatewayHost openapi.alipaydev.com; //支付宝网关config.signType RSA2; //签名方式//#业务配置config.appId this.appId; //应用idconfig.merchantPrivateKey this.appPrivateKey; 应用私钥config.alipayPublicKey this.publicKey; //支付宝公钥config.notifyUrl this.notifyUrl; //回调地址Factory.setOptions(config);log.info(支付宝配置初始化完成);}}4、支付接口
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import com.google.common.collect.Maps;
import com.jowell.common.exception.base.BaseException;
import com.jowell.common.response.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.Map;/*** author Mr.ZJW* date Created 2023/9/20 17:53* description支付controller*/
Slf4j
RequestMapping(/alipay)
Controller
ResponseBody
public class TestAlipayController {/*** 支付接口** param subject 名称* param outTradeNo 订单号* param totalAmount 金额* return /*/GetMapping(/pay)public String pay(String subject, String outTradeNo, String totalAmount) {AlipayTradePagePayResponse response;try {response Factory.Payment.Page().pay(subject, outTradeNo, totalAmount, );} catch (Exception e) {log.error(支付宝付款调用失败原因 e.getMessage());throw new BaseException(网络异常,请刷新后重试);}return response.getBody();}接口测试 访问URL进行测试测试的url格式http://localhost:10000/alipay/pay?subject支付测试outTradeNoD239211000000totalAmount1
效果 进行用买家账号密码登录 输入支付密码进行支付
支付成功
4、回调接口
回调接口要有一个外网域名这里可以使用花生壳以及我分享过的一遍文章 文章链接https://blog.csdn.net/javaeEEse/article/details/117983797?spm1001.2014.3001.5502 把这个域名复制到配置文件里的回调地址上。
回调完整代码 /*** 支付宝回调*/PostMapping(/notify)public ResultString notify(HttpServletRequest request) {log.info(支付宝回调成功);//校验是否成功if (TRADE_SUCCESS.equals(request.getParameter(trade_status))) {//#解析回调数据MapString, String params Maps.newHashMap();MapString, String[] requestParams request.getParameterMap();for (String name : requestParams.keySet()) {params.put(name, request.getParameter(name));}//订单号String tradeNo params.get(out_trade_no);//支付金额String gmtPayment params.get(gmt_payment);//支付宝交易凭证号String alipayTradeNo params.get(trade_no);//#支付宝验签防止不法分子伪造请求try {Boolean flag Factory.Payment.Common().verifyNotify(params);if (Boolean.TRUE.equals(flag)) {log.info(交易名称: params.get(subject));log.info(交易状态: params.get(trade_status));log.info(支付宝交易凭证号: params.get(trade_no));log.info(商户订单号: params.get(out_trade_no));log.info(交易金额: params.get(total_amount));log.info(买家在支付宝唯一id: params.get(buyer_id));log.info(买家付款时间: params.get(gmt_payment));log.info(买家付款金额: params.get(buyer_pay_amount));} else {log.error(异步通知验签失败);return Result.error(fail);}} catch (Exception e) {log.error(异步发生异常{}, e.getMessage());return Result.error(fail);}//#进行一些业务逻辑,如更新订单等操作}return Result.success();}