day17【前台】支付案例
1、支付宝开放平台
1.1、首页网址
https://open.alipay.com/
![image-20200706202551962](https://i-blog.csdnimg.cn/blog_migrate/16051c1b6817ab49698756e4f01a735a.png)
1.2、文档中心
![image-20200706202631243](https://i-blog.csdnimg.cn/blog_migrate/0f29c5234187512cbd3ce831aa76c080.png)
1.3、创建应用
![image-20200706203228946](https://i-blog.csdnimg.cn/blog_migrate/6987a3e8c5150e38b583f2254d8b7a2a.png)
1.4、配置应用
1.5、配置秘钥
1.5.1、关于加密
1、对称加密
- 加密过程与解密过程对称,即如果黑客截获密文并知道加密过程就能够反推出明文
2、非对称加密
- 加密过程与解密过程非对称:
- 发送方用公钥加密明文,接收方使用私钥解密密文,得到明文,私钥与公钥成对出现
- 私钥加密的密文必须使用公钥解密
- 公钥加密的密文必须使用私钥解密
![image-20200706203434270](https://i-blog.csdnimg.cn/blog_migrate/7af64d2e297ac08d2827d0d3ff140996.png)
1.5.2、支付宝秘钥
- 调用关系捋清楚:
- 商户应用会调用支付宝支付接口
- 支付宝也会调用我们提供的商户支付接口
- 所以:
- 支付宝需要知道我们商户的公钥
- 我们也需要知道支付宝的公钥
- 秘钥、公钥关系捋清楚:
- 在支付宝开放平台的应用中 :
- 在我们的程序中设置:
![image-20200706203632260](https://i-blog.csdnimg.cn/blog_migrate/f8390e14a449e76eeb44ad4b520f8f29.png)
1.5.3、生成秘钥
1、下载工具
![image-20200706221550277](https://i-blog.csdnimg.cn/blog_migrate/b735e53f732cc7fb2352a5d14ebea928.png)
2、安装工具
3、生成秘钥
![image-20201002143829133](https://i-blog.csdnimg.cn/blog_migrate/c915c245e866a515a531eb4f72a0bb59.png)
1.6、支付流程
- 支付流程如下:
- 用户下单,调用商户系统,商户系统调用支付宝接口
- 支付宝接口直接将登录页面返回给用户(不经过商户系统)
- 用户输入账户、密码进行登录(不经过商户系统)
- 用户确认支付(不经过商户系统)
- 用户支付之后,剩下的就是商户系统与支付宝接口之间的相互调用啦~~~
![电脑网站支付.png](https://i-blog.csdnimg.cn/blog_migrate/0d66cc65c3146d4924b4c1f6fa53a838.png)
1.7、内网穿透
1.7.1、内网穿透原理
- 我们现在在内网开发环境下, 需要让外网的支付宝来调用内网中的项目。 如果不采用特殊处理这种情况是访问不到的。
- 内网穿透外网服务器–>内网穿透客户端–>内网应用(内网服务器)
- 内网穿透外网服务器:有人专门就是做这种服务器滴
- 内网穿透客户端:需要安装在我们的电脑上,外网服务器首先找到内网穿透客户端,然后内网穿透客户端再来访问我们的内网应用
![image-20200706222304486](https://i-blog.csdnimg.cn/blog_migrate/fab546eafca7b69471aa6d5842448549.png)
1.7.2、NATAPP工具
1.7.3、NATAPP文档
![image-20200706222722340](https://i-blog.csdnimg.cn/blog_migrate/da9fc345f3893cb55aadbd49a7bea401.png)
![image-20200706223525387](https://i-blog.csdnimg.cn/blog_migrate/f7adc61c230cff1fa67fb6ea23129cde.png)
1.7.4、实名认证
![image-20200706223114986](https://i-blog.csdnimg.cn/blog_migrate/73ed282fb457df24cb1421aec2a87ac7.png)
1.7.5、创建隧道
![image-20200706223155426](https://i-blog.csdnimg.cn/blog_migrate/1e6b8ebd4ef9ff57fc31aa6fecd9c520.png)
![image-20200706223225696](https://i-blog.csdnimg.cn/blog_migrate/bbf9276856698bdd2fca798270afab84.png)
![image-20201002143900862](https://i-blog.csdnimg.cn/blog_migrate/6fe67daa23bd441ee4788fbcf223182d.png)
1.7.6、下载客户端
- 下载
NATAPP
客户端,解压出来是一个.exe
文件,运行之后是个小黑窗,不过我们需要先创建配置文件,才能运行
![image-20200706223443112](https://i-blog.csdnimg.cn/blog_migrate/691a0426fdc06151e61c8e2d9393a45a.png)
![image-20200706223346915](https://i-blog.csdnimg.cn/blog_migrate/4773b246e8da1db34941b7062099c610.png)
1.7.7、创建配置文件
- 在运行客户端程序之前,我们需要先创建配置文件,指定一些参数
![image-20200706223631658](https://i-blog.csdnimg.cn/blog_migrate/5ee20252b969a3dcd6bcfb7e565b8052.png)
- 在客户端工具的同级目录下,创建配置文件,所需的参数去隧道页面复制
![image-20200706223717082](https://i-blog.csdnimg.cn/blog_migrate/7d6868bcb76c9b31fb50c69e8caae256.png)
#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=<填入你的authtoken> #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=stdout #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=DEBUG #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
![image-20201002144009368](https://i-blog.csdnimg.cn/blog_migrate/c6a651cf8cf37e65f6079b19abfb3fed.png)
1.7.8、启动NATAPP
- 双击客户端工具即可启动
NATAPP
,不过每次生成的域名都是不一样滴
![image-20201002144209700](https://i-blog.csdnimg.cn/blog_migrate/e686a3aadc9ba6b981efc7049ac3fc01.png)
1.7.9、启动Tomcat
![image-20200706224119347](https://i-blog.csdnimg.cn/blog_migrate/7fcdea18a53bb86af12db60f2ab5159a.png)
![image-20200706224146615](https://i-blog.csdnimg.cn/blog_migrate/f40358db3702637de37d305e42db65f3.png)
![image-20200706224214113](https://i-blog.csdnimg.cn/blog_migrate/e0ab9c69f148715d5f32340c59d80fd8.png)
1.7.10、测试内网穿透
- 访问:
http://gysn2b.natappfree.cc/
![image-20200706224529188](https://i-blog.csdnimg.cn/blog_migrate/81cba35ca0e6be327e66986b76084f48.png)
2、支付示例
2.1、下载demo
- 下载地址:https://opendocs.alipay.com/open/270/106291/
![image-20200707140649871](https://i-blog.csdnimg.cn/blog_migrate/4b59ebe3b5870d99b66f5ddec8a461f1.png)
2.2、导入demo
2.2.1、导入工程
- 由于是
Eclipse
工程,不是Maven
工程,我们选择导入Existing Project
![image-20200707140909550](https://i-blog.csdnimg.cn/blog_migrate/b434824b14635fc66f14d8356ec0202f.png)
![image-20200707141016022](https://i-blog.csdnimg.cn/blog_migrate/c40bfdce88585234ea1641c846b6c50b.png)
![image-20200707141304739](https://i-blog.csdnimg.cn/blog_migrate/b1747c6f0833a2cf141462a0b6004259.png)
2.2.2、工程报错解决
1、报错原因
- 没有找到
javax.servlet.http.HttpServlet
这个类
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
![image-20200707141714971](https://i-blog.csdnimg.cn/blog_migrate/3095a53d850f4dd714a91df0acdb42ef.png)
2、配置Tomcat运行环境
![image-20200707141734527](https://i-blog.csdnimg.cn/blog_migrate/0dc5e5d825ea573055e9582fa654da3f.png)
![image-20200707142027340](https://i-blog.csdnimg.cn/blog_migrate/3d8bae2411b93c1ecd617d5bb661601c.png)
2.2.3、工程目录
![image-20200707142052284](https://i-blog.csdnimg.cn/blog_migrate/d2fc3fa84ef13bd62b0840b7d6c92aed.png)
2.3、沙箱环境
2.3.1、进入沙箱环境
![image-20200707142231106](https://i-blog.csdnimg.cn/blog_migrate/a08ba66a4fb46e66beb61381e7ed39a3.png)
2.3.2、获取APPID和支付宝网关
![image-20201002144256766](https://i-blog.csdnimg.cn/blog_migrate/6e38d0b7186ba1f17c131b50732ef7b1.png)
2.3.3、获取支付宝公钥
![image-20201002144316309](https://i-blog.csdnimg.cn/blog_migrate/852faa307117ae4c560b3a792d40534c.png)
![image-20201002144350232](https://i-blog.csdnimg.cn/blog_migrate/cfdbeaebd8a5dcd13b113164c8078bc7.png)
![image-20201002144424740](https://i-blog.csdnimg.cn/blog_migrate/a7d761265cdac6b06f3e4ce2b3fd0a39.png)
2.4、修改配置
- 修改支付接口的相关配置
- 配置
APPID
- 配置商户私钥
- 配置支付宝公钥
- 配置内网穿透地址
- 配置支付宝网关
![image-20200707142052284](https://i-blog.csdnimg.cn/blog_migrate/d2fc3fa84ef13bd62b0840b7d6c92aed.png)
public class AlipayConfig {
public static String app_id = "<填入你的APPID>";
public static String merchant_private_key = "<填入你的商户私钥>";
public static String alipay_public_key = "<填入字支付宝公钥>";
public static String notify_url = "http://35aj75.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
public static String return_url = "http://35aj75.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
public static String sign_type = "RSA2";
public static String charset = "utf-8";
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
public static String log_path = "D:\\";
public static void logResult(String sWord) {
FileWriter writer = null;
try {
writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
writer.write(sWord);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.5、启动demo
2.5.1、修改Tomcat配置
HTTP
端口号修改为80
端口,因为我们的隧道端口号为80
端口
![image-20200707164457212](https://i-blog.csdnimg.cn/blog_migrate/5fe163a85403be087e3ca58fb141a28b.png)
2.5.2、测试
- 访问:
http://localhost/alipay.trade.page.pay-JAVA-UTF-8/
![image-20200707164809679](https://i-blog.csdnimg.cn/blog_migrate/f6ff3977c7390984492881070ecb690d.png)
![image-20200707144425049](https://i-blog.csdnimg.cn/blog_migrate/f8416e21bcbc9923d6dbe16005af9c10.png)
- 问题原因:https://blog.csdn.net/weixin_40652498/article/details/104201892
- 开发的时候,必然要打开这三个页面
- 沙箱开发平台
- 我的系统开发请求支付页面
- 请求支付宝系统扣款
- 用自己的支付宝账号登录了
1
,开发的网站打开2
页面,在2
中跳转到3
页面请求扣款,可能存在检测操作,在检测的时候,检测到我1
账号的存在,所以认为是异常,所以给我跳转到了钓鱼提醒页面 - 反正我换个浏览器就解决了问题
![image-20200707144935692](https://i-blog.csdnimg.cn/blog_migrate/5ad84de0e2f6e4348c1a2ea6fb5690b2.png)
![image-20200707164835595](https://i-blog.csdnimg.cn/blog_migrate/7d554f5dfb3a2f4431886742f92203f9.png)
![image-20201002144622020](https://i-blog.csdnimg.cn/blog_migrate/da5547441d2468a69d8e5b53300d144a.png)
![image-20200707145214696](https://i-blog.csdnimg.cn/blog_migrate/06e7f4f3c8153d6fd2d68d1285145108.png)
![image-20200707145704530](https://i-blog.csdnimg.cn/blog_migrate/4ce6b266fa55d51a2aebc6b5ddd831c2.png)
![image-20200707145654407](https://i-blog.csdnimg.cn/blog_migrate/257dea33a0df31093fa6b546c99930a5.png)
![image-20200707162536451](https://i-blog.csdnimg.cn/blog_migrate/b66f52e99fe5f05e42adc6b7fa286dbd.png)
- 干啊,买家的钱确实扣除成功了,商家的钱也涨了。。。难道是沙箱环境在维护???【交易查询】接口也显示
trade_status: "TRADE_SUCCESS"
![image-20201002144705750](https://i-blog.csdnimg.cn/blog_migrate/05a67f4a7bec067e3e2b5c3820e8231c.png)
![image-20201002144743670](https://i-blog.csdnimg.cn/blog_migrate/f881524ec68897969e8200ec1191b4e4.png)