环境如下
|
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. 依赖、配置
language-xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!-- 支付宝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>
|
language-yml1 2 3 4 5 6 7 8 9 10 11 12
| 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. 二维码生成
language-java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 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,<
|