day17【前台】支付案例

day17【前台】支付案例

1、支付宝开放平台

1.1、首页网址

  • 首页网址
https://open.alipay.com/

image-20200706202551962

1.2、文档中心

  • 看这些

image-20200706202631243

1.3、创建应用

  • 开发时暂时使用沙箱环境

image-20200706203228946

1.4、配置应用

  • 沙箱环境暂不考虑

1.5、配置秘钥

1.5.1、关于加密
1、对称加密
  • 加密过程与解密过程对称,即如果黑客截获密文并知道加密过程就能够反推出明文
2、非对称加密
  • 加密过程与解密过程非对称:
    • 发送方用公钥加密明文,接收方使用私钥解密密文,得到明文,私钥与公钥成对出现
    • 私钥加密的密文必须使用公钥解密
    • 公钥加密的密文必须使用私钥解密

image-20200706203434270

1.5.2、支付宝秘钥
  • 调用关系捋清楚:
    • 商户应用会调用支付宝支付接口
    • 支付宝也会调用我们提供的商户支付接口
  • 所以:
    • 支付宝需要知道我们商户的公钥
    • 我们也需要知道支付宝的公钥
  • 秘钥、公钥关系捋清楚:
    • 在支付宝开放平台的应用中 :
      • 设置商户公钥
      • 获取支付宝公钥
    • 在我们的程序中设置:
      • 支付宝公钥
      • 商户私钥

image-20200706203632260

1.5.3、生成秘钥
1、下载工具
  • 下载秘钥生成工具

image-20200706221550277

2、安装工具
  • 注意:安装路径千万不要有空格
3、生成秘钥

image-20201002143829133

1.6、支付流程

  • 支付流程如下:
    • 用户下单,调用商户系统,商户系统调用支付宝接口
    • 支付宝接口直接将登录页面返回给用户(不经过商户系统)
    • 用户输入账户、密码进行登录(不经过商户系统)
    • 用户确认支付(不经过商户系统)
    • 用户支付之后,剩下的就是商户系统与支付宝接口之间的相互调用啦~~~

电脑网站支付.png

1.7、内网穿透

1.7.1、内网穿透原理
  • 我们现在在内网开发环境下, 需要让外网的支付宝来调用内网中的项目。 如果不采用特殊处理这种情况是访问不到的。
  • 内网穿透外网服务器–>内网穿透客户端–>内网应用(内网服务器)
    • 内网穿透外网服务器:有人专门就是做这种服务器滴
    • 内网穿透客户端:需要安装在我们的电脑上,外网服务器首先找到内网穿透客户端,然后内网穿透客户端再来访问我们的内网应用

image-20200706222304486

1.7.2、NATAPP工具
  • 网址:https://natapp.cn/
1.7.3、NATAPP文档
  • 文档汇总

image-20200706222722340

  • 一分钟快速上手

image-20200706223525387

1.7.4、实名认证
  • 需要完成实名认证才能使用

image-20200706223114986

1.7.5、创建隧道
  • 购买免费隧道

image-20200706223155426

  • 点击免费购买

image-20200706223225696

  • 呐~

image-20201002143900862

1.7.6、下载客户端
  • 下载NATAPP客户端,解压出来是一个.exe文件,运行之后是个小黑窗,不过我们需要先创建配置文件,才能运行

image-20200706223443112

image-20200706223346915

1.7.7、创建配置文件
  • 在运行客户端程序之前,我们需要先创建配置文件,指定一些参数

image-20200706223631658

  • 在客户端工具的同级目录下,创建配置文件,所需的参数去隧道页面复制

image-20200706223717082

#将本文件放置于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 非代理上网用户请务必留空
  • 上面的配置也就只需要这一个authtoken参数

image-20201002144009368

1.7.8、启动NATAPP
  • 双击客户端工具即可启动NATAPP,不过每次生成的域名都是不一样滴

image-20201002144209700

1.7.9、启动Tomcat
  • 修改Tomcat端口号为80端口

image-20200706224119347

image-20200706224146615

  • 启动Tomcat

image-20200706224214113

1.7.10、测试内网穿透
  • 访问:http://gysn2b.natappfree.cc/

image-20200706224529188

2、支付示例

2.1、下载demo

  • 下载地址:https://opendocs.alipay.com/open/270/106291/

image-20200707140649871

2.2、导入demo

2.2.1、导入工程
  • 由于是Eclipse工程,不是Maven工程,我们选择导入Existing Project

image-20200707140909550

  • 导入已有工程,将其复制到工作区

image-20200707141016022

image-20200707141304739

2.2.2、工程报错解决
1、报错原因
  • 没有找到javax.servlet.http.HttpServlet这个类
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

image-20200707141714971

2、配置Tomcat运行环境
  • 右击工程,选择Properties

image-20200707141734527

  • 设置【目标运行环境】为Tomcat 8.0

image-20200707142027340

2.2.3、工程目录

image-20200707142052284

2.3、沙箱环境

2.3.1、进入沙箱环境

image-20200707142231106

2.3.2、获取APPID和支付宝网关

image-20201002144256766

2.3.3、获取支付宝公钥
  • 先设置商户公钥

image-20201002144316309

image-20201002144350232

  • 得到支付宝公钥

image-20201002144424740

2.4、修改配置

  • 修改支付接口的相关配置
    • 配置APPID
    • 配置商户私钥
    • 配置支付宝公钥
    • 配置内网穿透地址
    • 配置支付宝网关

image-20200707142052284

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
	
	//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号(使用沙箱环境的APPID)
	public static String app_id = "<填入你的APPID>";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "<填入你的商户私钥>";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "<填入字支付宝公钥>";

	// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    // 工程公网访问地址使用内网穿透客户端提供的域名
	public static String notify_url = "http://35aj75.natappfree.cc/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";

	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	// 工程公网访问地址使用内网穿透客户端提供的域名
	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.alipay.com/gateway.do";
	
	// 支付宝网关(沙箱环境)
	public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
	
	// 日志路径
	public static String log_path = "D:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /** 
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    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

2.5.2、测试
  • 访问:http://localhost/alipay.trade.page.pay-JAVA-UTF-8/

image-20200707164809679

  • 草。。。

image-20200707144425049

  • 问题原因:https://blog.csdn.net/weixin_40652498/article/details/104201892
    • 开发的时候,必然要打开这三个页面
      • 沙箱开发平台
      • 我的系统开发请求支付页面
      • 请求支付宝系统扣款
    • 用自己的支付宝账号登录了1,开发的网站打开2页面,在2中跳转到3页面请求扣款,可能存在检测操作,在检测的时候,检测到我1账号的存在,所以认为是异常,所以给我跳转到了钓鱼提醒页面
    • 反正我换个浏览器就解决了问题

image-20200707144935692

  • 订单页面

image-20200707164835595

  • 登录账户进行付款

image-20201002144622020

  • 执行付款

image-20200707145214696

  • 额,不知道为啥,一直无法跳转至成功页面

image-20200707145704530

image-20200707145654407

  • 支付成功后进行跳转时,内网穿透工具也会报错

image-20200707162536451

  • 干啊,买家的钱确实扣除成功了,商家的钱也涨了。。。难道是沙箱环境在维护???【交易查询】接口也显示trade_status: "TRADE_SUCCESS"

image-20201002144705750

image-20201002144743670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值