一、准备工作
首先去蚂蚁金服的开放平台注册一个开发者账号,右上角免费入住。可以选自研或者企业账号,用支付宝账号注册登录。
蚂蚁金服开放平台
注册好之后进入沙箱环境:
之所以用沙箱是因为正式应用想要使用支付宝提供的功能话要营业执照,个人学习没有,所以用沙箱环境,而且沙箱环境所有的功能都是开放的,在沙箱环境集成了后换到正式的应用,也就是改改配置的事情。
点进去是这样的:
滑到下面有一个沙箱支付宝,可以用来模拟付款,沙箱账号里的钱可以自己充的。支付宝破解版
密钥:
可以看到有几个xxx密钥,也就是几种加密方式,这里用支付宝推荐的RSA2加密。
鼠标滑到RSA2菜单边上那个蓝点上就有一个密钥生成方法,点进去下载对应的工具就可以生成我们自己的公钥和私钥:
然后把生成公钥上传到支付宝(别上传错了):
内网穿透
由于支付宝需要回调接口,通知我们支付结果,所以要有一个外网可以正常访问的网址。个人学习如果没有服务器、域名,可以使用natapp软件。这个软件可以提供免费的域名、把本地ip映射到外网,具体使用请参考博客:https://blog.youkuaiyun.com/vbirdbest/article/details/80635880
集成
在开始集成前建议先看一下阿里给的时序图,对整个支付的流程有一个大致的了解:
配置
pom添加依赖:
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.6.0.ALL</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
配置文件
把公钥、私钥、appid等写到配置文件:
这里有一个坑,就是公钥要填支付宝的公钥,而不是自己生成的公钥,不然之后回调会验签失败。
配置类
package com.example.shiroStudy.config.alipay;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author 黄豪琦
* 日期:2019-07-12 16:38
* 说明:
*/
@Data
@Slf4j
@Component
@ConfigurationProperties("pay.alipay")
public class AlipayProperties {
/**
* 商户appid
*/
private String appid;
/**
* 私钥 pkcs8格式的
*/
private String appPrivateKey;
/**
* 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
*/
private String notifyUrl;
/**
* 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
*/
private String returnUrl;
/**
* 请求网关地址
*/
private String gatewayUrl;
/**
* 编码
*/
private String charset;
/**
* 返回格式
*/
private String format;
/**
* 支付宝公钥
*/
private String alipayPublicKey;
/**
* RSA2 签名方式
*/
private String signtype;
}
@ConfigurationProperties注解的作用就是把配置文件中 前缀为"pay.alipay"下的值,赋值到这个类的属性中去。
PayService
import com.alipay.