Spring Boot 使用支付宝沙箱环境
最近期末大作业老师要求有使用第三方支付功能,所以试着尝试了一下支付宝的沙箱环境。
要想使用支付宝的沙箱环境,需要先注册支付宝开放平台的账号,使用原有支付宝账号即可。
创建完毕后,点击控制台->研发服务
进入研发服务之后,就可以看见沙箱环境的相关内容,接下来就是要配置沙箱环境所需的各种东西。我们需要配置的有RSA2(SHA256)密钥,应用网关和授权回调地址
第一步先配置RSA2密钥,由于我们开发的是个人项目,所以使用RSA2密钥就可以了,密钥的获取需要下载一些工具,官方的密钥获取教程讲述的还是非常详细的,获取密钥并妥善保管,然后按照教程复制到页面相应位置即可。
配置完密钥是配置应用网关,和授权回调地址
这是我配置的应用网关和授权回调地址,由于应用网关是服务器发送订单状态消息给你的地址,所以最好要外网可访问吧。。。这个我也不太清楚,反正我配置了内网穿透,配置内网穿透可以下载花生壳,花生壳网站也有官方教程,十分详细,永久http服务六块软妹币。
之后是在项目内的配置。
先加载依赖,在pom.xml文件中添加配置如下代码
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.9.124.ALL</version>
</dependency>
之后配置一个配置类AliPayConfig,配置如下
public class AliPayConfig {
// 作为身份标识的应用ID
public static String app_id = "2021000116675558";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String alipay_private_key = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCBkKAnZv4pjWpjT62S9z/QW531rPH2tMOYGLNo7ANz5r5KLMjm3cN1WiO7nEr63vXzVYJarzw2XmVnR895xZvn5+90Wf3NvfxXqgWXsGrRSJ1+g8Jw8qeZngyrifi7kWoXq0YKYhVpr522SNgDvbAzYVp/uJgM3P2It2eOHvtXd2G7biPERIFvJRcU8ACMib1+nsOpyB4SuINvW3OsHraxohj4YGWzKjd/8rqAxs6isunfDAwVFaipq1+yWXNVBpW1V/dNCUTbaX+/Fn3N0CU2tbcvyeEMfGkxZr8bfuP/n4uNxGA8nDUgiiyu/QZV6zmXqyK6u3OvhiGuueGZNEGpAgMBAAECggEAdxG2XP+lrAIuNz5OQbW/i3fm3pQleZf9+JUaq93Z/nWbgwdNSf2bVwmTtSKZNZwZY5q9xSEtsLlnb1brMPmNob3grYjWWnGyqc2yfgi+4b5eHppv4uTdaat58VtGnvmwCjh4kao6C3o88fxXqHh2qYFabe3yrj+ZMD98h3upeGMKlvJtsSKTqi62nmD/xBcug8TtMOS1UV+NFAOCJOZ+URzbVDYAn0QjnHuwDKkcqORH1YapwsXXLEZ4LdVw0QomkcdnpSc05K4fQU1YvbAGvONbAOinkUI7f/NLnCpI8S0yA/UU8fK9L68NemrXvRGPRZt6oUPbexE402p+EIj8UQKBgQDCVszZ5lbFcVYa6EZ502QbeUzSXUA3h8AAOCezdpEJYf1lH5q5WItLwMbd91PS5xm101FH58ZorPTDnD/VZUMGwz+iHaV7j/ap4HxTbvsJ5tm/ds7UokMB0rsmXNHXRg8cqTgs2VMnGfGij1bkdlKPcP8KacnhI8EETB+v7hRQRwKBgQCqrItew6jJn7WDN5id+jfmJwmcmpz9n3ACdfz+uVnF5dN5KwoaXnFpQNlZJL2zpw5T0KMEeQEiXE8VDgANNFrGvypdqrGP4RZ/XZIuz+STpg0Ah01WILMeSSJBgnJWPnop9iYMbFlLoYSBlRSwAtGwKAVNxHqjzsFOiRBaHthGjwKBgQCBeCxfWpoiTeBMasRQ8yj1OLmaSC+5DwI14zNn1yzG8HZNQWHl6vxaCmMyi0xX7Ehvnwm+esXvBJLIIrdQJnch8T/adB/EEuQExp5tQzmRni8g5Djk5fj4JPkzlJDj9zOoJ4BaOKqyGRGm+BGugLl+AIyY1mN9T0GO6FwP6++yjwKBgG4zctoBY96r7LuJDlYS1j0ZP6+KdYudgulT3cNrUnfhaaZ3D9Lu4DOh17UjcAmr+ChOMrQUnZLeH4HsxEPCZkql7GkGahgIskoS1Oy8904OjZ6lvl26R21qs1+xJrphJOgrM24aF54p8DDrXaw4ZcRkUuhf0QAr480d2x0VhXgpAoGAVCOYVV5mgczwsNjSiXyrrTei9sp/1uJf4YrdAQ0lZ0DkQb6Nvxl83xVn1xLE3VVd827XrneTHbPb6E3aTGbXhjjJVo8kAeFGyiQDF6VuSEL7j38qGkMtLzaRK2unHsVr1eBPT6tzVU1WD9EAyOaDM90wWpU+166VqOhhaQvx3VE=";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAokZNbq02kZfeCuRToRGICmEYilOosT7iHXe1UZTNuZIkXLIC/27a2ZaimRw0Nn7mUOgEvgSBvx+13TrQ3qvbF+WDMmbV+Y/JINE2CQRQBNvMhvNoMAZrPU3DtnMINW2SiXuBKLEo9TcHUyhAODj/HwEvP8eGXt5jlIKcxSIZZCKI4bd/pSlpdPb+mXxPImJ3hraDEfaa6sPQ4dBmKNF9Hx4d/U4sP1+oKT0LxMWVED/KCMzLJ+guy0ls1E9CMvzgEkRgRM7eZ7mvl0flv9HCrBDc8wBrjd7/Uh6FjloLRm08zCc4Pu33SKFfw48Ea0gtnVS8M365rgnt4Q9Dev/LkwIDAQAB";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://362450r38x.zicp.vip/alipay/pay";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "https://openapi.alipaydev.com/gateway.do";
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}
配置AliPayController类如下:
@Controller
@RestController
@RequestMapping("/alipay")
public class AliPayController {
/**
* 支付接口
*
* @param orderId 订单id
* @param amount 支付金额
* @param product 商品名称
* @param body 商品描述
* @return
* @throws AlipayApiException
*/
@GetMapping("/pay/{orderId}/{amount}/{product}/{body}")
public String aliPay(@PathVariable String orderId,
@PathVariable String amount,
@PathVariable String product,
@PathVariable String body) throws AlipayApiException {
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AliPayConfig.gatewayUrl,
AliPayConfig.app_id,
AliPayConfig.alipay_private_key,
"json",
AliPayConfig.charset,
AliPayConfig.alipay_public_key,
AliPayConfig.sign_type);
// page
AlipayTradePagePayRequest alipayPageRequest = new AlipayTradePagePayRequest();
alipayPageRequest.setReturnUrl(AliPayConfig.return_url);
alipayPageRequest.setNotifyUrl(AliPayConfig.notify_url);
//拼接参数
alipayPageRequest.setBizContent("{\"out_trade_no\":\"" + orderId + "\","
+ "\"total_amount\":\"" + amount + "\","
+ "\"subject\":\"" + product + "\","
+ "\"body\":\"" + body + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求
return alipayClient.pageExecute(alipayPageRequest).getBody();
}
}
之后只要在你需要调用支付宝沙箱接口的时候,按照"/alipay/pay/订单编号/总价钱/商品名称/商品描述"调用即可,但是商品订单编号需要九位,如下处理即可。
int num = userService.getBillNum();
String str = String.format("%09d", num);