文章目录
环境如下
Version | |
---|---|
手机 | 安卓 |
支付平台 | 支付宝 |
SpringBoot | 3.2.1 |
alipay-sdk-java | 4.38.200.ALL |
一、介绍
系统处于开发阶段时,无需营业执照,无需任何费用,沙箱模拟网站在线完整支付流程。
参考资料如下:
1. 支付
有一个在线网站,可以为商品生成支付二维码,手机支付宝扫码,支付。
支付流程大体如下:
2. 支付结果
获取支付结果有两种方法
- 一种为
主动查询
。在顾客支付后再查询方可得到正确的结果,然而这个时机是无法确定的。 - 一种为
被动接收
。顾客支付后,支付宝服务器向微服务发送消息通知。
二、前提准备
1. 支付宝开放平台
-
注册
支付宝开放平台
https://openhome.alipay.com/ -
来到
控制台
下滑找到沙箱
https://openhome.alipay.com/develop/manage
或者点这里进入沙箱环境
https://openhome.alipay.com/develop/sandbox/app
-
下载
支付宝沙箱版
到手机
2. 内网穿透
-
下载软件
https://hsk.oray.com/download
本文选择的是贝锐花生壳
,会赠送一个域名。 -
添加映射
- 映射类型:
HTTPS
- 外网端口:貌似改不了
- 内网
ip:port
:order微服务的地址端口。
- 映射类型:
这样之后,谁往https://5m34y83626.vicp.fun/orders/receivenotify
发送请求,就相当于往order微服务的/orders/receivenotify
这个端点发送请求。
3. 局域网
参考这篇文章
同一Wifi下允许手机访问电脑(win10)
主要目的就是要知道,手机通过什么ip
可以访问到电脑。本文是192.168.0.102
,所以访问192.168.0.102:63030
就相当于访问到了order微服务
。
三、order微服务
1. 依赖、配置
<!-- 支付宝SDK -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.38.200.ALL</version>
</dependency>
<!--生成二维码-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
server:
servlet:
context-path: /orders
port: 63030
pay:
#扫描二维码得到url
qrcodeurl: http://???:63030/orders/requestpay?payNo=%s
alipay:
APP_ID: ???
APP_PRIVATE_KEY: ???
ALIPAY_PUBLIC_KEY: ???
???
填充分别为
-
在同一局域网中手机访问电脑的ip
-
沙箱环境->沙箱应用->应用信息->基本信息
-
沙箱环境->沙箱应用->应用信息->开发信息->应用私钥
-
沙箱环境->沙箱应用->应用信息->开发信息->支付宝公钥
2. 工具类
1. 二维码生成
package com.xuecheng.orders.config;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.xuecheng.base.utils.EncryptUtil;
import jakarta.servlet.ServletOutputStream;
import org.apache.commons.lang3.StringUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
/**
* @author mumu
* @version 1.0
* @description 二维码生成工具
* @date 2024/02/16 14:56
*/
public class QRCodeUtil {
/**
* 生成二维码
*
* @param content 二维码对应的URL
* @param width 二维码图片宽度
* @param height 二维码图片高度
* @return
*/
public String createQRCode(String content, int width, int height) throws IOException {
String resultImage = "";
//除了尺寸,传入内容不能为空
if (!StringUtils.isEmpty(content)) {
ServletOutputStream stream = null;
ByteArrayOutputStream os = new ByteArrayOutputStream();
//二维码参数
@SuppressWarnings("rawtypes")
HashMap<EncodeHintType,<