支付宝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网页支付的更多相关文章
- 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,实现接入支付宝-电脑网页支付 ...
- php支付宝手机网页支付类实例
<?php $alipayConfig = array( 'key' => 'xxxxx', //买卖安全校验码,用于签名的32位密钥 'transport' => 'https', ...
- 用MVC做支付宝手机网页支付问题
支付宝支付接口手机网页支付 从官网扒下来的demo阿里做得还是相当不错的,只要参数改正确了基本上都是能跑通,WebForm的没什么大问题,这次要讲的主要是几个要注意的问题,因为是用MVC来做. 1.要 ...
- ASP.NET Core2.0 环境下MVC模式的支付宝PC网站支付接口-沙箱环境开发测试
1.新建.NET Core web项目 2.Controllers-Models-Views 分三个大部分 3.下载安装最新sdk 官方的SDK以及Demo都还是.NET Framework的,根据官 ...
- Android学习笔记_69_android 支付宝之网页支付和快捷支付
参考资料: https://b.alipay.com/order/productDetail.htm?productId=2013080604609654 https://b.alipay.com/o ...
- ASP.NET Core 2.0 使用支付宝PC网站支付
前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的 ...
- ASP.NET Core 2.0 使用支付宝PC网站支付实现代码(转)
最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的源码, ...
- 支付宝pc端支付接入PHP实现
引入支付宝接口 放入一个插件库中,方便管理 创建支付类 1.发起支付 public function init() { $order_id = $_REQUEST['order_id']; $orde ...
随机推荐
- Ubuntu 编译安装 OpenCV 3.1
目标系统:Ubuntu 16.04-64bit OpenCV 版本:opencv-3.1.0 安装步骤 安装 cmake.sudo apt-get isntall cmake cmake-qt-gui ...
- spring-struts2-mybatis-maven 转账开发记录
最近写一个转账需求向外提供接口,用的是spring+struts2+maven 方式,数据库是oracle.我先新建maven类,然后引入spring相关jar包和mybatis包,配置s ...
- [array] leetcode - 42. Trapping Rain Water - Hard
leetcode - 42. Trapping Rain Water - Hard descrition Given n non-negative integers representing an e ...
- Oracle数据库部分迁至闪存存储方案
Oracle数据库部分迁至闪存存储方案 1.实施需求 2.确认迁移表空间信息 3.确认redo信息 4.确认undo信息 5.表空间迁移到闪存 6.redo迁移到闪存 7.undo迁移到闪存 8.备库 ...
- Java I/O---File类
1.File概述 File(文件)类可能有一定的误导性,它不仅仅指代的是文件.它既能代表一个特定的文件的名称,又能代表一个目录下的一组文件集的名称,这样就可以用集合List方法调用和遍历.实际上Fil ...
- asp.net MVC分页
.Net MVC 分页代码,分页的关键就是在于这几个参数pageIndex ,recordCount,pageSize ,下面是张林的网站做的一个简单的分页代码 效果如图 public class ...
- iOS学习——iOS常用的存储方式
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置.需要在本地缓存的数据等等.根据要存储的的数据的大小.存储性质以及存储类型,在iOS和An ...
- ubuntu12.04destdrop删除不必要的软件
sudo apt-get -y --auto-remove purge unity unity-2d* sudo apt-get -y purge empathy sudo apt-get -y ...
- Extjs 取消backspace事件
Ext.getDoc().on('keydown',function(e){ if(e.getKey() == 8 && e.getTarget().type =='text' &am ...
- precmd:6: job table full or recursion limit exceeded
使用GDC Data Transfer Tool下载10999个isoforms.quantification.txt文件时,写了shell循环的小脚本: cat all_id_file |while ...