2

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

 1 year ago
source link: https://blog.51cto.com/wangzhenjun/5757130
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

二、知识储备

我们在之前,要先了解到加密方式:
公钥、私钥、加密、签名和验签

1、公钥私钥

公钥和私钥是一个相对概念
它们的公私性是相对于生成者来说的。
一对密钥生成后,保存在生成者手里的就是私钥,
生成者发布出去大家用的就是公钥

 加密是指:
 我们使用一对公私钥中的一个密钥来对数据进行加密,而使用另一个密钥来进行解
密的技术。
 公钥和私钥都可以用来加密,也都可以用来解密。
 但这个加解密必须是一对密钥之间的互相加解密,否则不能成功。
 加密的目的是:
 为了确保数据传输过程中的不可读性,就是不想让别人看到。

 给我们将要发送的数据,做上一个唯一签名(类似于指纹)
 用来互相验证接收方和发送方的身份;
 在验证身份的基础上再验证一下传递的数据是否被篡改过。因此使用数字签名可以
用来达到数据的明文传输。

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

三、下载demo

链接地址: java版demo

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

四、Idea打开

1、 idea中新建

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

2、选择项目

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

选择为eclipse项目

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

直接一路下一步即可!

1、配置为web项目

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

选中项目:

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

添加依赖

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

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

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

解决方案:
WebContent指定为读取页面的目录

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

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

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

3、配置tomcat

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

六、测试运行

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

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。点击生效

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

重复操作换为UTF-8即可

再次运行:

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

前端页面:

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

七、对接沙箱

 沙箱环境控制台

1、打开配置类

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

2、填充信息

APPID:

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

私钥和公钥:

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

上面为: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";

同步路径时支付成功的跳转页面,一般会跳到订单详情页,
异步一般是支付成功我们进行修改订单的支付状态的请求地址,
两者必须外网可以正常访问,不能加?参数=这类自定义参数。

全部配置如下:

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";
}

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

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

八、页面支付测试

进入首页:

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

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

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

选择继续浏览器付款:

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

登录账号:

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

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

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

输入账号密码:

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

确认付款:

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

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

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

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

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

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

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


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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK