Java如何实现支付宝电脑支付基于servlet版本
作者:涛先森の日常 发布时间:2021-12-11 04:39:47
标签:java,支付宝,电脑,支付,servlet
这篇文章主要介绍了Java如何实现支付宝电脑支付基于servlet版本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
前期准备:
蚂蚁金融开放平台进行登录操作
进入我的开放平台
在上方找到沙箱,进入沙箱(网络编程虚拟执行环境)。
这里的RSA2密钥设置下,我已经设置好了,所以便有了支付宝公钥(公钥是对外公开的,私钥是自己保留的具体的不多做解释)
至于RSA2密钥的生成,可参考如下操作:
生成后在工具文件夹如下路径可以查看自己生成的公钥和私钥一对
私钥保留,公钥设置到开发者平台RSA2上便可以了。
官方DEMO因为我们需要一些jar包和可参考类,所以拿个DEMO方便很多
所需要的jar包路径如下
实例编写:
工具我这里用的是eclipse,这个影响不大~
新建web项目
项目所需要的类如下
AlipayConfig.java
package cn.taosir.demo;
public class AlipayConfig {
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
public static String return_url = "http://localhost:8080/success.jsp";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://localhost:8080/notify";
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "";
// 签名方式
public static String sign_type = "RSA2";
// 字符编码格式
public static String charset = "utf-8";
// 支付宝网关
public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
}
APPID(在查看支付宝公钥位置上方)、支付宝公钥、自己的私钥,记得配上
NoitfyServlet.java
package cn.taosir.demo;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/notify")
public class NotifyServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("接收到支付宝的异步通知请求——");
Map<String,String[]> parameterMap=request.getParameterMap();
System.out.println(parameterMap);
//成功处理后返回success
response.getWriter().write("success");
}
}
OrderServlet.java
package cn.taosir.demo;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
@WebServlet("/order/confirm")
public class OrderServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("开始处理OrderServlet的服务");
String title = "涛先森";
String total = "666666";
String message = "如有什么建议欢迎留言评论";
//生成订单号
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String orderSn = simpleDateFormat.format(Calendar.getInstance().getTime());
//向支付宝发送请求
//获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
AlipayConfig.sign_type);
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(AlipayConfig.return_url);
alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = orderSn;
//付款金额,必填
String total_amount = total;
//订单名称,必填
String subject = title;
//商品描述,可空
String body = message;
alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\""
+ total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明
//alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
// + "\"total_amount\":\""+ total_amount +"\","
// + "\"subject\":\""+ subject +"\","
// + "\"body\":\""+ body +"\","
// + "\"timeout_express\":\"10m\","
// + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
//请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节
AlipayTradePagePayResponse alipayResponse = null;
try {
alipayResponse=alipayClient.pageExecute(alipayRequest);
System.out.println(alipayResponse.getBody());
System.out.println(alipayResponse.getMsg());
} catch (AlipayApiException e) {
e.printStackTrace();
}
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(alipayResponse.getBody());
}
}
至此,大功告成
下面开始测试
将项目部署到tomcat上run起来
http://localhost:8080/alipay-demo/order/confirm 可以看到页面通过该请求跳转到了支付宝的接口
下载沙箱环境的支付宝APP可以扫码测试喔
这里我们点击右边登录账户付款
账号和密码可在沙箱平台查看个人账号
之后登录就支付了,正常就跳转到了支付成功页面。
来源:https://www.cnblogs.com/it-taosir/p/9728374.html


猜你喜欢
- 前言之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是
- 简介一般情况下我们在flutter中搭建的app基本上都是用的是MaterialApp这种设计模式,MaterialApp中为我们接下来使用
- 背景kafka有分区机制,一个主题topic在创建的时候,会设置分区。如果只有一个分区,那所有的消费者都订阅的是这一个分区消息;如果有多个分
- Android CardView详解Android5.0中向我们介绍了一个全新的控件–CardView,从本质上看,可以将Car
- 一般项目做到后期,在测试的时候,需要在测试版本和正式版本之间进行频繁的切换,怎么办呢?土豪的话可以考虑使用两台机器,同时测试,然而为了方便测
- 因重定向无法正常goBack()解决方案首先说下问题,初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/),B页面重定
- 一、概述应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe
- 前段时间学习JDBC,要连接mysql获取数据。按照老师的样例数据,要存一些名字之类的信息,用的都是英文名,我当时就不太想用英文,就把我室友
- 前言此文章主要解决拦截用户点击手机底部导航栏中的返回键时该事件的拦截;此方法依然可以适用于fragmentonBackPressed()这是
- 本文实例为大家分享了Android实现京东上滑效果的具体代码,供大家参考,具体内容如下前言:现在很多app首页的结构都有头部广告,上滑固定t
- Environment的中文意思是环境,它表示整个spring应用运行时的环境信息,它包含两个关键因素profilespropertiesp
- IntelliJ IDEA2022 springboot 热部署 html#pom.xml<dependency>
- 前言作为一个新手,最近在学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站。第一次搞爬虫,涉及到了网
- Android 版本更替,新的版本带来新的特性,新的方法。新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版
- 本文实例讲述了C#逐行读取文件的方法。分享给大家供大家参考。具体如下:这里使用C#逐行读取文件,对于大文件的读取非常有用。StreamRea
- 目录Java 中线程池创建的几种方式🐱🏍Executors 工厂方法创建👏 new ThreadPoolExecutor() 自
- 接着上次的实现, 添加 mybatis 查询 orcale 数据库第一步: 新建几个必须的包, 结果如下第二步: 在service包下新建p
- 窗体展示开始后展示结束摇色展示代码导入的命名空间using System;using System.Collections.Generic;
- XmlTextReader 提供对 XML 数据流的只进只读访问。当前节点指读取器定位到的节点。使用任何读方法推进读取器并且属性反映当前节点
- 一、简介随着 Apple 发布 iPhone X 之后,各大手机厂商也开始模仿这种刘海屏的设计,而且刘海屏手机的用户也是越来越大,前段时间将