一、前言

在一些商城网上中,必不可少的是支付,支付宝和微信比较常见,最近小编也是在研究这一块,看看支付宝怎么进行支付的,支付宝给我们提供了demo和沙箱测试。减少我们的申请的麻烦,公钥和秘钥也比之前方便了,还是挺简单的,沙箱和正式的区别就是申请一下权限和把网关修改了就可以了!

不过支付宝的案例还是jsp,我们就可以把java代码抽离出来就可以了!!

话不多说,我们直接开始!!

二、知识储备

我们在之前,要先了解到加密方式:

公钥、私钥、加密、签名和验签

1、公钥私钥

公钥和私钥是一个相对概念

它们的公私性是相对于生成者来说的。

一对密钥生成后,保存在生成者手里的就是私钥,

生成者发布出去大家用的就是公钥

2、加密

 加密是指:

 我们使用一对公私钥中的一个密钥来对数据进行加密,而使用另一个密钥来进行解

密的技术。

 公钥和私钥都可以用来加密,也都可以用来解密。

 但这个加解密必须是一对密钥之间的互相加解密,否则不能成功。

 加密的目的是:

 为了确保数据传输过程中的不可读性,就是不想让别人看到。

3、签名

 给我们将要发送的数据,做上一个唯一签名(类似于指纹)

 用来互相验证接收方和发送方的身份;

 在验证身份的基础上再验证一下传递的数据是否被篡改过。因此使用数字签名可以

用来达到数据的明文传输。

4、验签

 支付宝为了验证请求的数据是否商户本人发的,

 商户为了验证响应的数据是否支付宝发的

三、下载demo

链接地址:java版demo

四、Idea打开

1、 idea中新建

2、选择项目



选择为eclipse项目



直接一路下一步即可!

五、配置

1、配置为web项目

选中项目:



添加依赖

2、大坑

由于支付宝重新建了一个web目录,我们要自己给指定上,所有的页面都在新的目录下:WebContent里面,默认会指定到web目录!不然会报404!

解决方案:

WebContent指定为读取页面的目录

我们发现,WebContent可以被读取了!!

3、配置tomcat





六、测试运行

直接运行,我们发现编译报错:

D:\data\alipay.trade.wap.pay-java-utf-8\alipay.trade.wap.pay-java-utf-8\src\com\alipay\config\AlipayConfig.java
java: 需要class, interface或enum

在这里插入图片描述

报错原因

是因为编码格式不对,我们发现右下角是UTF-8没问题,原因是没有生效,需要先切换一下另一个编码,然后再换回来,这样UTF-8就会生效!!

点击UTF-8,选型中选择GBK。点击生效



重复操作换为UTF-8即可

再次运行:



前端页面:

七、对接沙箱

沙箱环境控制台

1、打开配置类

下面是需要我们修改的字段,如果是springboot把这些配置在配置文件中即可!

2、填充信息

APPID:



私钥和公钥:

上图点击启用即可,不需要向以前自己生成,这样就可以直接使用!

上面为:RSA_PRIVATE_KEY

下面为:ALIPAY_PUBLIC_KEY



配置请求网关地址:URLhttps://openapi.alipaydev.com/gateway.do

和正式的加了一个dev

配置同步通知页面路径和异步通知页面路径:

例子:

public static String notify_url = "http://localhost:8080/notify_url.jsp";
public static String return_url = "http://localhost:8080/return_url.jsp";

同步路径时支付成功的跳转页面,一般会跳到订单详情页,

异步一般是支付成功我们进行修改订单的支付状态的请求地址,

两者必须外网可以正常访问,不能加?id=123这类自定义参数。

全部配置如下:

public class AlipayConfig {
// 商户appid
public static String APPID = "2021000117627470";
// 私钥 pkcs8格式的
public static String RSA_PRIVATE_KEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCwJO/zYxYYjLW3AKUEKJSzl/tisAMV7Nycc2+p9pZuuVE+yEDr/9rTYtWBGdsoQap4P8hbsvz2JXEUnJHdzBajCWyM85eVCV5fVO9RUb1kzhjrPdqyRzvJvPXic2UkXueKkQ2H/b5BryHQRfjAotY+jjhcre/Ikxx2GkOCNbEOzmcSkBZTG3QZgOl9O151DFkUj8H7u4wu9X2CHvXiV9g9H/8iIHlcf2KNf1pmnHYfOaYj/8v9/gxQg+r3+0F5oJhm4TKm8Ot+7I1rNAnBTLAe03qbPXLrZIASRJkEMG1cQb4mCmVDNAdqdXxBCAQnT+ggylvhiB9jXuqVp9zXVTMtAgMBAAECggEAJHuiD2EohHEwefTyOMhG9GO4N5qJKRNkJitqp2NhiRFtGHnVqIvXwQypeBHo6I+hRULAtu19o2Xh5AkB1VSeI6qiBxe0/7NvDoPDBa7OcYCWfLLVBzPl2EUBEKQiAMR/ZJ3ilZYiv+wMLt0vRobzpQVD+z4zefGuZW/PJ7sDLzOMwbtaQ3nCUYor4GAZuA+WKfkLKYj3HmApvyhb2o/8Yl+GmE9It91vCI7RTyhOr9CBw3Rz6d3xeVnfbHr2lQ4AGrzYvAlS77R+0YWla3x9MqnM/iFUjWzV3QdBOTmM/4ga0JVdeLKJtfW3fdn2WdRrydfMTffWLOTH/MUhfltCgQKBgQDlFfBotzFTpJCNv9lQkIGorpVSQkp1shlkob5SWVKufshS2/m5AkSAkvpc3TmUH1GDfIneMdelLeJwvx3gho/lyQayGD6og1Z6CQGwVVvZxO65aejEjyruo/zfrSn260nACd2CyKHBg3spsxfE0U8lt7zmmk7JSzrU4+UxaJiQEQKBgQDE1rbDKzWRqk1ihNepLfTTmUDpgjfuVEmX9xUbIBalm0PtdLL4y+AAFCI01VwiTvs6rpXjkc0Yp624t1RwJmPYvJ1LPlp4hkpTZIbI5e0gv9RkGmQ1YXEQ/+SON8d3qmTrRnSDKUlRBSBQ5yeT3lfcNI4nNDX6Ag6kxYq6JxgNXQKBgD01wnnIUQa/Vtx5IXC0W+CdXUqQaeLOxpgr23WXZk83kwEIw83aPEF6hCjh92uLfrU6RoA3Ix6AhxuHBU2jxrkoIIDfl4ZhKW8MDwZ1mEg0pXCnSsmSU29WI9AELc1LCvaj7Crwvr+9COCYeMZfAt3aHUAkhN6mGj8d8XRlNTZxAoGAHCIwNw769hnoO5ePF3ApGQFDhNyGz/qeFilLi/f3JK5fdBYE6oiBOKGoDfMc2w582/NOGxugu9BjhQ429FyYUscKmFGOLsHK58ZreVVboh2o5rHa9sI5ndtlOGqCiPkCuZn1VzXUc88OwmF3h6v01NVyJ+pPeK9IloZhgJ/L0UUCgYAB99cEMRSdWZ6QLbgIPdLkMmo3eIHQAvzWAI560uSgQwBZYXBHvJyPF3qL3Yn2QAghOuwcRYT4Y+jDhf3eXoy25flpROqzhmeWXQf/ksjmmEA/qdWi6pHTDLd4FPiHhCsp9gjo8lheJMvPcIiMt3+tOnkS4/vwoS+bOEZJqTlSnw==";
// 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://localhost:8080/notify_url.jsp";
// 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
public static String return_url = "http://localhost:8080/return_url.jsp";
// 请求网关地址
public static String URL = "https://openapi.alipaydev.com/gateway.do";
// 编码
public static String CHARSET = "UTF-8";
// 返回格式
public static String FORMAT = "json";
// 支付宝公钥
public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw2+1X9+g/YkZCqpyiN9EGEu951ODowp627WCxu/thtI5J0b8XDGsfK0gabH0Jz7o1JRTC37ZHaEPMUCd8NjeWb6tsnWZzhmxr7dqHu9Umy2QKl41UFMxMnvuwKjmXx7+jxNIeNv/fpdV9r+K6Gm0qHmaL23OuS/RB37cZ/kZ7SCzmIweca7f93wpO5knpT0DFRF48l2Js/rJm4/03vxjadCywKsSx2LnhdSpsypzHShTQJBolryzav0fp9gkBEW35n4v/261ZIepWpEtFcWSO+YTqeOjR9ciOjmMXjc/HYZTyMro9RzSfFqHouONZj+E3V0MPg1/Qea8el78p5QVwwIDAQAB";
// 日志记录目录
public static String log_path = "/log";
// RSA2
public static String SIGNTYPE = "RSA2";
}

自己测试可以使用内网穿透技术来实现,
常见的技术有三种:

花生壳不支持输入域名,续断可以支持域名!

八、页面支付测试

进入首页:



点击第一个进入支付,点击确认!



选择继续浏览器付款:



登录账号:



在沙箱中找到买家的账号密码:

沙箱地址



输入账号密码:



确认付款:



付款成功后会在5秒跳转到我们上面配置的同步地址中去!

提醒:

在异步请求中,我们必须返回支付宝success,不然支付宝会不断重发,详情如下:

程序执行完后必须打印输出“success”(不包含引号)。如果商家反馈给支付宝的字符不是 success 这7个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)。

详细链接

我们一般在修改订单支付状态后返回即可!

九、总结

这样就完成了支付宝的简单调试和注意事项,我们可以把配置和jsp的支付相关搬到java代码中,这样就可以使用了!


看到这里了,如果对你有帮助,还不给小编来个一键三连!谢谢大家了!!

可以看下一小编的微信公众号,和网站文章首发看,欢迎关注!!!

点击访问!小编自己的网站,里面也是有很多好的文章哦!

Idea运行支付宝网站支付demo踩坑解决及其测试注意事项的更多相关文章

  1. 支付宝H5支付demo

    支付宝H5支付 首先我们必须注册一个支付宝应用(本案例就直接用支付宝的沙箱环境,这个沙箱也就是支付宝提供给开发者的一个测试环境) 登录地址:https://open.alipay.com/platfo ...

  2. IDEA打包javaFX及踩坑解决

    开门见山的说,先打包,再说坑. File-->Project Structure --> Artifacts-->(此处点加号)JAR-->From modules with ...

  3. 支付宝使用流程和踩坑小记(附Demo)

    # 支付宝使用整理 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym, ...

  4. 微信APP支付,支付宝APP支付demo

    最近公司新开发的APP中,需要集成微信支付和支付宝支付,2个平台申请的都是APP支付.这是个人第一次单独的,完整的做完2个平台的支付. 这里我主要用到了2个接口:支付接口,订单查询接口,虽然2个平台的 ...

  5. 支付宝网站支付接口配置 RSA 公钥 私钥

    个人博客 地址:http://www.wenhaofan.com/article/20190419143333 下载签名工具 访问:https://docs.open.alipay.com/291/1 ...

  6. EasyPoi 导入导出Excel时使用GroupName的踩坑解决过程

    一.开发功能介绍: 简单的一个excel导入功能 二.Excel导入模板(大致模板没写全): 姓名 性别 生日 客户分类 联系人姓名 联系人部门 备注 材料 综合 采购 张三 男 1994/05/25 ...

  7. CompletionService用法踩坑解决优化

    转自:https://blog.csdn.net/xiao__miao/article/details/86352380 1.近期工作的时候,运维通知一个系统的内存一直在增长,leader叫我去排查, ...

  8. ubuntu18.04 搭建scrapy环境(连环踩坑+解决办法)

    ---恢复内容开始--- 预期需求: 打算搭建scrapy环境,基于python3.x的 环境描述: ubuntu18.04自带了python3.6,打算在虚拟环境vlenv中跑scrapy,装好虚拟 ...

  9. 编译课设·CLion到VS踩坑·解决·备忘录

    应试用,VS使用习惯和JB系差别还是蛮大的 打不过他们就加入他们 键位修改 工具-选项 键盘:改keymap 字体和颜色:宋体必改. 自动恢复:自动保存默认3分钟 CMake:自救时可以看一下 键位名 ...

随机推荐

  1. 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...

  2. 云原生Devops 的实现方法

    DevOps 是一个持续改善软件产品的过程,它通过极短的发布周期.全面自动化的集成和交付流水线,以及团队间的紧密协作来不断改善产品.DevOps 的目标是缩短将创意变成用户可以使用的产品的时间,并降低 ...

  3. DolphinScheduler 在绿瘦的实践成果,开启了我的开源之路!

    点击上方 蓝字关注我们 ✎ 编 者 按 2021 年,Apache DolphinScheduler 社区又迎来了新的蓬勃发展,社区活跃度持续提高.目前,项目 GitHub Star 已达 6.7k, ...

  4. Dolphin Scheduler 1.2.0 部署参数分析

    本文章经授权转载 1 组件介绍 Apache Dolphin Scheduler是一个分布式易扩展的可视化DAG工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程 ...

  5. flutter系列之:flutter架构什么的,看完这篇文章就全懂了

    目录 简介 Flutter的架构图 embedder engine Flutter framework Widgets Widgets的可扩展性 Widgets的状态管理 渲染和布局 总结 简介 Fl ...

  6. Go 语言图片处理简明教程

    虽然 Go 语言主要用于 Web 后端以及各类中间件和基础设施开发,也难免遇到一些图像处理的需求.Go 语言提供的 image 标准库提供了基本的图片加载.裁剪.绘制等能力,可以帮助我们实现一些绘图需 ...

  7. 入门 Socket.io

    概念 Socket.io 是一个支持客户端和服务器之间的低延迟.双向和基于事件的通信的库,除了支持 JavaScript 以外,还支持 Java.Python.Golang. Socket.io 构建 ...

  8. jsp获取下拉框组件的值

    jsp获取下拉框组件的值 1.首先,写一个带有下拉框的前台页 1 <%@ page language="java" contentType="text/html; ...

  9. 关于Copy On Write Array List,你会安全使用么

    摘要:JDK中提供了CopyOnWriteArrayList类,简称COW.为了将读取的性能发挥到极致,CopyOnWriteArrayList读取是完全不用加锁的,并且更厉害的是:写入也不会阻塞读取 ...

  10. 【NOI P模拟赛】混凝土粉末(整体二分)

    题面 样例输入 5 8 1 1 4 2 2 3 1 2 3 3 1 2 5 1 2 3 3 2 5 2 2 1 2 2 1 3 样例输出 1 0 4 0 1 0 样例解释 题解 比这道题简单了不知多少 ...