• Idea运行支付宝网站支付demo踩坑解决及其测试注意事项


    一、前言

    在一些商城网上中,必不可少的是支付,支付宝和微信比较常见,最近小编也是在研究这一块,看看支付宝怎么进行支付的,支付宝给我们提供了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代码中,这样就可以使用了!


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

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

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

  • 相关阅读:
    c++桥接模式,中介者模式应用实现状态跳转
    16:状态模式
    软件版本号详解
    java基于springboot+vue+elementui的校园志愿者活动管理系统
    Android Studio实现内容丰富的安卓房屋出租租赁平台
    C++下基于竞拍算法解决无人机任务分配问题
    python版李相夷
    Linux命令--压缩/解压缩--使用/实例
    驱动开发:内核测试模式过DSE签名
    C# OCR服务测试程序
  • 原文地址:https://www.cnblogs.com/wang1221/p/16790517.html