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可以扫码测试喔
这里我们点击右边登录账户付款
账号和密码可在沙箱平台查看个人账号
之后登录就支付了,正常就跳转到了支付成功页面。
如有错误的地方或建议欢迎留言,谢谢!
java实现支付宝电脑支付(servlet版本)的更多相关文章
- 支付宝电脑支付沙箱配置(JAVA)
支付宝电脑支付API地址:https://docs.open.alipay.com/270/105899/.支付宝提供了沙箱环境提供测试,具体配置步骤如下 1.先下载测试DEMO工程 下载地址:htt ...
- tp5实现支付宝电脑支付(详解)
首先吐槽一下支付宝的官方文档,它只是简单介绍一下开发的流程和参数,而对于新人来说如果只看它的官方文档很多时候是看不懂的,我也是边看文档边网上查资料才把它弄懂.下面我详细介绍支付宝的电脑支付是如何实现 ...
- 支付宝APP支付(基于Java实现支付宝APP支付)
贴一下支付核心代码,以供后续参考: 业务层 import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; ...
- 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)
java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写 一.流程步骤 1.执行流程 当手机端app(就是你公司开发的app)在支付 ...
- 手把手教你完成App支付JAVA后台-支付宝支付JAVA
接着上一篇博客,我们暂时完成了手机端的部分支付代码,接下来,我们继续写后台的代码. 后台基本需要到以下几个参数,我都将他们写在了properties文件中: 支付宝参数 AliPay.payURL = ...
- ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...
- 【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
转自:http://www.cnblogs.com/essenroc/p/8627775.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付 ...
- java 支付宝wap支付初识
最近突然想弄下支付宝的支付,因为感觉很好玩.中间遇到很多问题,查查找找,总算是整了两天给整出来了,这里为自己记录下. 第一步:直接去安卓支付宝的官方文档去,写的很清楚了已经,这里有源码https:// ...
- 支付宝手机网站支付(基于Java实现支付宝手机网站支付)
支付宝支付核心需要的参数是(APPID,PRIVATE_KEY,ALIPAY_PUBLIC_KEY) APPID:创建应用后就有的APPID. PRIVATE_KEY:应用私钥 ALIPAY_PUBL ...
随机推荐
- PHP面向对象(一)
1 面向对象介绍 1.1 介绍 面向对象是一个编思想. 编程思想有面向过程和面向对象. 面向过程: 编程思路集中的是过程上 面向对象: 编程思路集中在参与的对象 1.2 好处 多人合作方便 ...
- SQL-Oracle-创建Dblink
create database link DBLINK_IMARK_RAC connect to imark identified by imarkDB12345 using '(DESCRIPTIO ...
- java-类生命周期(二)
上文介绍了java-类生命周期(一),理论性比較强.认为太复杂的同学,瞟一下本文的样例加深理解. 先给道题目,看看答对没. /** * 类载入试验基类 * * @author peter_wang * ...
- 微软ASP.NET网站部署指南(3):使用Web.Config文件的Transformations
1. 综述 大多数程序里都会在Web.config里设置參数,而且在部署的时候须要更改. 每次都手工更改这些配置非常乏味,也easy出错. 该章节将会告诉你假设通过自己主动化更新Web.config文 ...
- 浅析Context Class Loader
浅析Context Class Loader 2010-05-11 16:58:49 分类: Java 转载自 薛笛的专栏http://blog.csdn.net/kabini/archive/200 ...
- unity3d Pathfinding插件使用
Overview The central script of the A* Pathfinding Project is the script 'astarpath.cs', it acts as a ...
- Cocos Code IDE
https://www.cnblogs.com/luorende/p/6464181.html http://www.cocoachina.com/bbs/read.php?tid-464164.ht ...
- 英语发音规则---F字母
英语发音规则---F字母 一.总结 一句话总结: 1.F/FF发[f]音? fly [flaɪ] vi. 飞 fine [faɪn] adj. 好的 float [fləʊt] vt. 使漂浮 fra ...
- python matplot 绘图
import numpy as np import matplotlib.pyplot as plt plt.figure(1) # 创建图表1 plt.figure(2) # 创建图表2 ax1 = ...
- 41.使用SAX读取XML
main.cpp #include <QtGui> #include <iostream> #include "saxhandler.h" int main ...