本文讲解如何在pc网页上完成支付宝的支付功能, 详细讲解了支付宝的配置信息,项目如何使用配置信息等, 本项目中代码可以直接运行, 也可以将代码迁移至你自己的项目中直接使用。 注意: 下面讲解的功能只能用在pc网页上进行支付, 不能用于其它场景支付。

1.本项目中使用的工具可以在百度云下载:

Eclipse:  https://pan.baidu.com/s/1ci4Nim

Tomcat:   https://pan.baidu.com/s/1eS6JlrO

Maven:    https://pan.baidu.com/s/1i4Ud35F

JDK1.7:   http://pan.baidu.com/s/1pLBMCHH

本文demo下载处:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=265

2.项目配置准备:

配置参数:APPID, 应用私钥,支付宝公钥,将生成的参数在代码中进行替换, 配置参数生成步骤见下面

2.1 访问支付宝开放平台官网:  https://open.alipay.com/platform/home.htm, 使用支付宝app扫码登录

2.2 访问开放平台的【开发者中心】->【研发服务】功能,进入沙箱环境

2.3 沙箱环境中, 查看【研发服务】->【沙箱应用】,页面如下

沙箱环境下默认为用户分配了APPID, 支付宝网关(注意这个地址中带dev字样,正式环境下没有dev), 用户需要手动配置

RSA2密钥,也可以配置RSA密钥(推荐RSA2)

点击上图的【设置应用公钥】后,弹出如下图A所示, 点击下图A中的【设置应用公钥】,弹出编辑框(图B),在编辑框中          填写应用公钥,此公钥可以使用工具生成, 工具的下载可参见图B中【查看密钥生成】, 图C为密钥工具截图

2.4  密钥工具生成了 应用的公钥和私钥,请上传公钥,自己保留 私钥(后面会用到), 公钥上传成功后,支付宝生成相               应的公钥(见图D)  注意: 这里分【应用公钥】和【支付宝公钥】, 代码使用中请注意使用的是哪种密钥

3 项目运行效果图

项目本地运行后,访问地址: http://localhost:8080/Alipay/index.jsp

3.1 支付页面

付款时,商户订单号(out_trade_no)必须唯一,订单号由应用程序根据算法生成, 点击【下图】(图E)付款后,弹出图F        对应的付款页面,扫码付款成功后,返回商户提前设定的页面(图G), 图G地址栏url中 return_url.jsp为提前设置的付款成        功调用页面,此页面开发者可根据业务自行定制,本例中显示支付成功后返回的支付信息,支付宝对应的订单号 trade_no

3.2 交易查询

交易查询功能为用户提供了历史订单查询功能,查询条件为: 商户订单号(out_trade_no),支付宝交易号(trade_no),

二个条件至少要选填一个, 调用此接口后,返回交易结果信息(见图I), code=10000, msg="Success" 表明交易成功

3.3 退款

退款操作将A付给B的钱退给B, 退给B的钱可以进行一次或者多次,但数次累加总和不能超过之前A给B的钱,具体见代码

4 代码详解:

4.1 支付页面jsp代码, 代码中包含了 支付宝开发网关 gatewayUrl, appid, 应用私钥:merchant_private_key

支付宝公钥:  alipay_public_key

注意: 支付宝付款成功后,支付宝服务器调用应用程序的接口告之付款是否真正成功,也就是说付款成功之后的逻辑应            该放在此接口中进行处理,一笔交易成功后,会回调多次(注意逻辑控制),

回调接口设置代码:  alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

支付成功后跳转页面设置: AlipayConfig.return_url

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>付款</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%-- <%@ page import="com.alipay.sdk.app.EnvUtils"%> --%>
<%
    //获得初始化的AlipayClient
    //com.alipay.sdk.app.EnvUtils
    /* EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX); */
    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 = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //付款金额,必填
    String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");
    //订单名称,必填
    String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
    //商品描述,可空
    String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");

    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-请求参数】章节

    //请求
    String result = alipayClient.pageExecute(alipayRequest).getBody();
    System.out.println("result:" + result);

    //输出
    out.println(result);
%>
<body>
</body>
</html>

    4.2 交易查询

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>交易查询</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%
    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
               AlipayConfig.merchant_private_key, "json", AlipayConfig.charset,
               AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

    //设置请求参数
    AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();

    //商户订单号,商户网站订单系统中唯一订单号
    String out_trade_no = new String(request.getParameter("WIDTQout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //支付宝交易号
    String trade_no = new String(request.getParameter("WIDTQtrade_no").getBytes("ISO-8859-1"),"UTF-8");
    //请二选一设置

    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+"\"trade_no\":\""+ trade_no +"\"}");

    //请求
    String result = alipayClient.execute(alipayRequest).getBody();

    //输出
    out.println(result);
%>
<body>
</body>
</html>

  4.3 交易退款

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>退款</title>
</head>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.alipay.config.*"%>
<%@ page import="com.alipay.api.*"%>
<%@ page import="com.alipay.api.request.*"%>
<%
    //获得初始化的AlipayClient
    AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
                   AlipayConfig.merchant_private_key, "json", AlipayConfig.charset,
                   AlipayConfig.alipay_public_key, AlipayConfig.sign_type);

    //设置请求参数
    AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();

    //商户订单号,商户网站订单系统中唯一订单号
    String out_trade_no = new String(request.getParameter("WIDTRout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
    //支付宝交易号
    String trade_no = new String(request.getParameter("WIDTRtrade_no").getBytes("ISO-8859-1"),"UTF-8");
    //请二选一设置
    //需要退款的金额,该金额不能大于订单金额,必填
    String refund_amount = new String(request.getParameter("WIDTRrefund_amount").getBytes("ISO-8859-1"),"UTF-8");
    //退款的原因说明
    String refund_reason = new String(request.getParameter("WIDTRrefund_reason").getBytes("ISO-8859-1"),"UTF-8");
    //标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
    String out_request_no = new String(request.getParameter("WIDTRout_request_no").getBytes("ISO-8859-1"),"UTF-8");

    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
            + "\"trade_no\":\""+ trade_no +"\","
            + "\"refund_amount\":\""+ refund_amount +"\","
            + "\"refund_reason\":\""+ refund_reason +"\","
            + "\"out_request_no\":\""+ out_request_no +"\"}");

    //请求
    String result = alipayClient.execute(alipayRequest).getBody();

    //输出
    out.println(result);
%>
<body>
</body>
</html>

  

本文demo下载处:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=265

支付宝pc网页支付的更多相关文章

  1. ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...

  2. 【转载】ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇

    转自:http://www.cnblogs.com/essenroc/p/8627775.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付 ...

  3. php支付宝手机网页支付类实例

    <?php $alipayConfig = array( 'key' => 'xxxxx', //买卖安全校验码,用于签名的32位密钥 'transport' => 'https', ...

  4. 用MVC做支付宝手机网页支付问题

    支付宝支付接口手机网页支付 从官网扒下来的demo阿里做得还是相当不错的,只要参数改正确了基本上都是能跑通,WebForm的没什么大问题,这次要讲的主要是几个要注意的问题,因为是用MVC来做. 1.要 ...

  5. ASP.NET Core2.0 环境下MVC模式的支付宝PC网站支付接口-沙箱环境开发测试

    1.新建.NET Core web项目 2.Controllers-Models-Views 分三个大部分 3.下载安装最新sdk 官方的SDK以及Demo都还是.NET Framework的,根据官 ...

  6. Android学习笔记_69_android 支付宝之网页支付和快捷支付

    参考资料: https://b.alipay.com/order/productDetail.htm?productId=2013080604609654 https://b.alipay.com/o ...

  7. ASP.NET Core 2.0 使用支付宝PC网站支付

    前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的 ...

  8. ASP.NET Core 2.0 使用支付宝PC网站支付实现代码(转)

    最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的源码, ...

  9. 支付宝pc端支付接入PHP实现

    引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $orde ...

随机推荐

  1. OS X Yosemite升级提示升级OS10.11或更高版本问题解决方法

    如图,楼主的pro久未升级,版本号已经很低.某天一时兴起,想体验最新版本的OS X.就很开心的进行软件更新: 依据iOS上的APP.系统升级经验,这是一个非常自然.毫无难度的过程,哪知道,今天一直卡在 ...

  2. CentOS7给终端配置快捷键【转发】

    1.打开Applications,选择System Tools 2.选择Setting进入如下面界面,选择Keyboard 3.选择Keyboard,进入如下面界面,再点击Shortcuts 4.再点 ...

  3. idea java 1.5 过时

    解决方案: 1.修改maven的setting.xml文件,添加以下内容,此设置为jdk1.8 <profile> <id>jdk-1.8</id> <act ...

  4. 「mysql优化专题」视图应用竟然还可以这么优化?不得不收藏(8)

    一.视图概述(技术文): (1)什么是视图? 视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.视图并不在数据 ...

  5. Java IO学习要点导图

    Java IO的一些基础知识: 导图源文件保存地址:https://github.com/wanghaoxi3000/xmind

  6. apache故障处理

    注意:修改虚拟机主机html路径不需要修改主配置这一行. DocumentRoot "/var/www" 1.Permission denied: [client 10.10.2. ...

  7. ArcGIS API for JavaScript 4.2学习笔记[15] 弹窗内容的格式与自定义格式

    先看结果截图吧(不看过程可以直接看总结,在文末): 随便点击了两个城市斑块,出现结果如图. 我来解读一下这结果和以前的有什么不同: 这个例子使用了PopupTemplate,数据是Layer(使用Po ...

  8. 关于vue 框架与后台框架的混合使用的尝试------转载

    这几天我在研究前台框架和后台框架融合的问题,进行了一些尝试; 我前台选择的是 vue,当然也可以选择 react 等其他 mvvm 框架,不过 vue 对于我来说是最熟悉的; 后台话,我选择的是 ph ...

  9. Java NIO (二) 缓冲区(Buffer)

    缓冲区(Buffer):一个用于特定基本数据类型的容器,由 java.nio 包定义的,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的Buffer 主要用于和NIO中的通道(Ch ...

  10. Oracle学习笔记_08_字符串连接

    附录:参考资料 1.Oracle中字符串连接的实现方法 2.SQL指令— CONCAT(字符串连接函数)