这篇文章主要是给只想要入门调取支付宝支付接口的小伙伴一个入门的展示
首先我们要去支付宝开放平台的官网去获取我们需要获取的配置
点击下面的链接即可进入支付宝开放平台
我们进行支付宝的开发的时候一般都是使用的沙箱环境进行测试的 点击研发服务就可进入沙箱环境,进行研发了
进入沙箱环境我们可以查看到我们专属的APPID和对应生成的公钥私钥,这些都是我们进行开发时必须要使用的数据,同时我们可以看到地址都是aipaydev,等项目正式上线的时候将地址改为正式的就可以了
获取到这些数据之后我们就可以进入开发代码的阶段了
首先我们就需要去官方文档里面去查看我们需要给哪些数据,也可以查看光放给的一些demo,这里官方一共给了两种方法去网站上去调取支付宝的支付接口,一种普通版,一种是easy版,普通版较为繁杂,我们这里使用的就是easy版,点击下面的链接就可以进入官方文档中了。
首先我们需要去引入相应的包依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.1.2</version>
</dependency>
然后我们要去yml文件中去配置我们需要的那些配置,注意这里的回调需要的内网回调的地址
alibabapay:
app-id: "2021000118609644"
protocol: "https"
gateway-host: "openapi.alipaydev.com"
alibaba-public-key: #自己的应用公钥
merchant-private-key: #商户私钥
sign-type: "RSA2"
#同步回调和异步回调地址
notify-url: "http://w6rndb.natappfree.cc/pay/alipay/notify"
return-url: "http://w6rndb.natappfree.cc/order/alipay/return"
准备工作准备好以后,就可以进入代码阶段了
首先去接收前台的请求
@RestController
public class PayController {
@Autowired
IAliPayService aliPayService;
//支付请求
@PostMapping("/alipay/apply/{orderSN}")
public AjaxResult payApply(@PathVariable("orderSN")String orderSN, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=utf-8");
String s = aliPayService.payApply(orderSN);
return AjaxResult.me().setResultObj(s);
}
}
这里我们前台传了个订单号,用来查询订单里面的需要显示的包括订单金额等的数据。
我们需要一个封装类去读取相应的配置,让我们更好调用,代码看起来更加的整洁
@Component
@ConfigurationProperties(prefix = "alibabapay")
@Data
public class AlipayProperties {
private String appId ;
private String protocol ;
private String gatewayHost ;
private String alibabaPublicKey ;
private String merchantPrivateKey ;
private String signType ;
private String notifyUrl ;
private String returnUrl ;
public Config getOptions() {
Config config = new Config();
config.protocol = protocol;
config.gatewayHost = gatewayHost;
config.signType = signType;
config.appId = appId;
//应用私钥
config.merchantPrivateKey = merchantPrivateKey;
//支付宝公钥
config.alipayPublicKey = alibabaPublicKey;
//可设置异步通知接收服务地址(可选)
config.notifyUrl = notifyUrl;
return config;
}
}
然后我们就去实现payApply的方法就可以了,中间的接口层大家就自己去实现了,我们就直接进入实现层
@Service
public class IAliPayServiceImpl implements IAliPayService {
@Autowired
private AlipayProperties alipayProperties;
@Override
public String payApply(String orderSN) {
Factory.setOptions(alipayProperties.getOptions());
try {
// 2. 发起API调用(以创建当面付收款二维码为例)
AlipayTradePagePayResponse response = Factory.Payment.Page().pay("1","11","11","11");
// 3. 处理响应或异常
if (ResponseChecker.success(response)) {
System.out.println("调用成功");
} else {
System.err.println("调用失败,原因:" + response.getBody() + "," + response.getBody());
}
System.out.println(response.body);
return response.body;
} catch (Exception e) {
System.err.println("调用遭遇异常,原因:" + e.getMessage());
throw new RuntimeException(e.getMessage(), e);
}
}
}
这里我们要实现哪种支付的方式就去选择哪种,具体的可以见下图,更详细的就可以自己登录网站来进行查看。
然后我们直接利用postman进行测试
可以看到我们的请求成功了并且返回了一个表单数据,但是注意我们不能用这个去进行访问,格式不正确,要使用后台打印的表单
然后将表单复制到文件中保存为html文件运行就可以了
这里我用的notepad++这里随便用什么都是可以的
保存后进入我们就可以跳转到支付宝的支付的界面了