![](/style/images/good.png)
![](/style/images/bad.png)
Idea运行支付宝网站支付demo踩坑解决及其测试注意事项
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](https://s2.51cto.com/images/blog/202210/14154828_6349144c4a5e114818.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
四、Idea打开
1、 idea中新建
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_02](https://s2.51cto.com/images/blog/202210/14154828_6349144c3481916319.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
2、选择项目
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_03](https://s2.51cto.com/images/blog/202210/14154828_6349144c2986063026.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
选择为eclipse项目
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_04](https://s2.51cto.com/images/blog/202210/14154828_6349144c26dfe67476.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
直接一路下一步即可!
1、配置为web项目
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_05](https://s2.51cto.com/images/blog/202210/14154828_6349144c2a99640791.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_06](https://s2.51cto.com/images/blog/202210/14154828_6349144c2898a27832.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
选中项目:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_07](https://s2.51cto.com/images/blog/202210/14154828_6349144c2dd2661921.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
添加依赖
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_08](https://s2.51cto.com/images/blog/202210/14154828_6349144c29f9419328.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_09](https://s2.51cto.com/images/blog/202210/14154828_6349144c345c634584.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
由于支付宝重新建了一个web
目录,我们要自己给指定上,所有的页面都在新的目录下:WebContent
里面,默认会指定到web
目录!不然会报404!
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_10](https://s2.51cto.com/images/blog/202210/14154828_6349144c2d72640602.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
解决方案:
把WebContent
指定为读取页面的目录
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_11](https://s2.51cto.com/images/blog/202210/14154828_6349144c498ff59521.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_12](https://s2.51cto.com/images/blog/202210/14154828_6349144c3fd5778562.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
我们发现,WebContent
可以被读取了!!
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_13](https://s2.51cto.com/images/blog/202210/14154828_6349144c3998d59118.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
3、配置tomcat
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_14](https://s2.51cto.com/images/blog/202210/14154828_6349144c3218f56587.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_15](https://s2.51cto.com/images/blog/202210/14154828_6349144c3979195516.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
六、测试运行
直接运行,我们发现编译报错:
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](https://s2.51cto.com/images/blog/202210/14154828_6349144c342b820653.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
重复操作换为UTF-8
即可
再次运行:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_18](https://s2.51cto.com/images/blog/202210/14154828_6349144c3678d13106.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
前端页面:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_19](https://s2.51cto.com/images/blog/202210/14154828_6349144c2f12319562.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
七、对接沙箱
1、打开配置类
下面是需要我们修改的字段,如果是springboot
把这些配置在配置文件中即可!
2、填充信息
APPID:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_java_21](https://s2.51cto.com/images/blog/202210/14154828_6349144c38ff019592.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
私钥和公钥:
上图点击启用即可,不需要向以前自己生成,这样就可以直接使用!
上面为:RSA_PRIVATE_KEY
下面为:ALIPAY_PUBLIC_KEY
配置请求网关地址:URL
:https://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](https://s2.51cto.com/images/blog/202210/14154828_6349144c41b9084790.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
点击第一个进入支付,点击确认!
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_24](https://s2.51cto.com/images/blog/202210/14154828_6349144c2917158585.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
选择继续浏览器付款:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_25](https://s2.51cto.com/images/blog/202210/14154828_6349144c327cb177.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
登录账号:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_26](https://s2.51cto.com/images/blog/202210/14154828_6349144c3a4dd65349.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
在沙箱中找到买家的账号密码:
沙箱地址
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_27](https://s2.51cto.com/images/blog/202210/14154828_6349144c45ce586431.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
输入账号密码:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_28](https://s2.51cto.com/images/blog/202210/14154828_6349144c3341168613.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
确认付款:
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_29](https://s2.51cto.com/images/blog/202210/14154828_6349144c3414971662.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_Idea_30](https://s2.51cto.com/images/blog/202210/14154828_6349144c3482c14896.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
付款成功后会在5秒跳转到我们上面配置的同步地址中去!
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_31](https://s2.51cto.com/images/blog/202210/14154828_6349144c3da4483952.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
提醒:
在异步请求中,我们必须返回支付宝success
,不然支付宝会不断重发,详情如下:
程序执行完后必须打印输出“success”(不包含引号)。如果商家反馈给支付宝的字符不是 success 这7个字符,支付宝服务器会不断重发通知,直到超过 24 小时 22 分钟。一般情况下,25 小时以内完成 8 次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h)。
详细链接
我们一般在修改订单支付状态后返回即可!
这样就完成了支付宝的简单调试和注意事项,我们可以把配置和jsp的支付相关搬到java代码中,这样就可以使用了!
看到这里了,如果对你有帮助,还不给小编来个一键三连!谢谢大家了!!
可以看下一小编的微信公众号,和网站文章首发看,欢迎关注!!
![Idea运行支付宝网站支付demo踩坑解决及其测试注意事项_支付宝_32](https://s2.51cto.com/images/202210/691d98465c8b6446f9d875bbaa25c883a0b016.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp/resize,m_fixed,w_750)
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK