前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >支付宝支付-PC电脑网站支付

支付宝支付-PC电脑网站支付

作者头像
Javen
发布于 2018-08-21 03:22:09
发布于 2018-08-21 03:22:09
2.4K00
代码可运行
举报
文章被收录于专栏:酷玩时刻酷玩时刻
运行总次数:0
代码可运行

支付产品全面升级(更新时间:2017/05/05 ),若您使用的是老接口,请移步老版本即时到账文档

支持沙盒环境的测试

此项目已开源欢迎Start、PR、发起Issues一起讨论交流共同进步

https://github.com/Javen205/IJPay

http://git.oschina.net/javen205/IJPay

1、有图有真相

使用手机扫码进行支付

i统一收单下单并支付页面接口alipay.trade.page.pay

手机扫码进行支付

PC 端登录账号进行支付

登录账号进行支付

进去支付宝收银台

输入交易密码进行支付

付款完成

正在跳转到商户页面

商户页面、这里只是将签名验证的结果显示在页面上

PC支付两次扣款记录

2、如何申请PC电脑网站支付

费率、申请条件、签约、使用场景 传送门接入指引

签约流程

3、如何快速接入PC电脑网站支付

如果你是使用新版本接入就比较方便了,因为官方提供了开放平台服务端SDK

3.1 接口调用流程图

主要涉及到的接口有:

3.2 支付接口alipay.trade.page.pay封装

初始化接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static {
        alipayClient = new DefaultAlipayClient(SERVICE_URL, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
    }

封装支付接口并将SDK生成的表单响应给页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 电脑网站支付(PC支付)
     * @param model
     * @param notifyUrl
     * @param returnUrl
     * @return
     * @throws AlipayApiException
     * @throws IOException 
     */
    public static void tradePage(HttpServletResponse httpResponse, AlipayTradePayModel model, String notifyUrl, String returnUrl) throws AlipayApiException, IOException{
        AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
        request.setBizModel(model);
        request.setNotifyUrl(notifyUrl);
        request.setReturnUrl(returnUrl);
        String form  = alipayClient.pageExecute(request).getBody();//调用SDK生成表单
        httpResponse.setContentType("text/html;charset=" + CHARSET);
        httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
        httpResponse.getWriter().flush();
        httpResponse.getWriter().close();
    }
3.3 其他支付接口封装

可以参考 支付宝支付-常用支付API详解(查询、退款、提现等)

3.4 封装测试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * PC支付
     */
    public void pcPay(){
        try {
            String totalAmount = "88.88"; 
            String outTradeNo =StringUtils.getOutTradeNo();
            log.info("pc outTradeNo>"+outTradeNo);
            
            String returnUrl = AliPayApi.NOTIFY_DOMAIN + "/alipay/return_url";
            String notifyUrl = AliPayApi.NOTIFY_DOMAIN + "/alipay/notify_url";
            AlipayTradePayModel model = new AlipayTradePayModel();
            
            model.setOutTradeNo(outTradeNo);
            model.setProductCode("FAST_INSTANT_TRADE_PAY");
            model.setTotalAmount(totalAmount);
            model.setSubject("Javen PC支付测试");
            model.setBody("Javen IJPay PC支付测试");
            
            AliPayApi.tradePage(getResponse(),model , notifyUrl, returnUrl);
        } catch (Exception e) {
            e.printStackTrace();
            
        }
        
    }

异步通知处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void notify_url() {
        try {
            // 获取支付宝POST过来反馈信息
            Map<String, String> params = AliPayApi.toMap(getRequest());

            for (Map.Entry<String, String> entry : params.entrySet()) {
                System.out.println(entry.getKey() + " = " + entry.getValue());
            }

            boolean verify_result = AlipaySignature.rsaCheckV1(params, AliPayApi.ALIPAY_PUBLIC_KEY, AliPayApi.CHARSET,
                    AliPayApi.SIGN_TYPE);

            if (verify_result) {// 验证成功
                // TODO 请在这里加上商户的业务逻辑程序代码 异步通知可能出现订单重复通知 需要做去重处理
                System.out.println("notify_url 验证成功succcess");
                renderText("success");
                return;
            } else {
                System.out.println("notify_url 验证失败");
                // TODO
                renderText("failure");
                return;
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            renderText("failure");
        }
    }

同步商户页面验签,这里只是返回验签的状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void return_url() {
        try {
            // 获取支付宝GET过来反馈信息
            Map<String, String> map = AliPayApi.toMap(getRequest());
            for (Map.Entry<String, String> entry : map.entrySet()) {
                System.out.println(entry.getKey() + " = " + entry.getValue());
            }

            boolean verify_result = AlipaySignature.rsaCheckV1(map, AliPayApi.ALIPAY_PUBLIC_KEY, AliPayApi.CHARSET,
                    AliPayApi.SIGN_TYPE);

            if (verify_result) {// 验证成功
                // TODO 请在这里加上商户的业务逻辑程序代码 
                System.out.println("return_url 验证成功");
                renderText("success");
                return;
            } else {
                System.out.println("return_url 验证失败");
                // TODO
                renderText("failure");
                return;
            }
        } catch (AlipayApiException e) {
            e.printStackTrace();
            renderText("failure");
        }
    }

将参数转化为Map,为验签做准备

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
     * 
     * @param request
     * @return
     */
    public static Map<String, String> toMap(HttpServletRequest request) {
        System.out.println(">>>>" + request.getQueryString());
        Map<String, String> params = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
            String name = (String) iter.next();
            String[] values = (String[]) requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            // 乱码解决,这段代码在出现乱码时使用。
            // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        return params;
    }
4、测试数据

异步通知的参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gmt_create = 2017-05-14 13:26:58
charset = UTF-8
notify_time = 2017-05-14 13:28:04
gmt_payment = 2017-05-14 13:28:03
subject = Javen PC支付测试
sign = ZYQO+lzxAMDj8Al25KoJzSXegrx1rriBMGLOAEyiNHEac0OMe5e49ZW6m0waDSmTBDX8bwEHUjAk8rdCXTXPzNQSVP0p+46V+8k9AHiEiom6OzV3ZTLzGXGw8A8lnrGPYeCDmKSa3pogJKP0Ob7PyBRgz4HWydWC4P+G1yYEjvVX8kK2XbM6bMauW23a0AklvZbve6WUwUpkioMNLCOHAQzPBDW/LaoDUGx6GN6f3sFDsomBJ03w9rJgqZCs1zw29HHIW4kNFrLcQFleaC+2NnNPLhVanH1iXcK8800dsOXagRPuoy9Gr2EYGV+hSOiVE+XszBKIWTlAbZpE5QgJ6g==
buyer_id = 2088102169474200
body = Javen IJPay PC支付测试
invoice_amount = 88.88
version = 1.0
notify_id = 43749ffb4d02c02f4bfc5ee4fe5761ehjm
fund_bill_list = [{"amount":"88.88","fundChannel":"ALIPAYACCOUNT"}]
notify_type = trade_status_sync
out_trade_no = 051413260514947
total_amount = 88.88
trade_status = TRADE_SUCCESS
trade_no = 2017051421001004200200241311
auth_app_id = 2016102000727659
receipt_amount = 88.88
point_amount = 0.00
sign_type = RSA2
buyer_pay_amount = 88.88
app_id = 2016102000727659
seller_id = 2088102180432465
notify_url 验证成功succcess

商户页面同步的参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>>>total_amount=88.88&timestamp=2017-05-14+13%3A28%3A11&sign=KRn%2FEi%2B8lOpPdmSBg8ZsB9dUsV8la2bMWaFGFs5R2hhQOP283m%2BolOwFamfC%2B1thxfIsEi92w99lH24K044yj6aLAN8mJq3umQTRI6j2SvZgn1Ufgpd5KdjfmpEAR5omFOJJP%2FDXIb2zEFs6VvA60RmpwYT5mHbujSWDUvj7X0LX1SGd5l90DbyUDtfMe%2FRSqBFd0iIDLloa78a3dPqHcId3mUKP4RrzZBGWNbAYxrZiEslmZiU%2BnT9K0zL9t%2BVm%2B24pHWsgVOR7hb4UicT%2FfHk6VnDPTnOlfVfJD3vOE2FP6N0jgj0QEKNIynOp6t74zmE8Xkca3pGQnkYyrUEQyg%3D%3D&trade_no=2017051421001004200200241311&sign_type=RSA2&auth_app_id=2016102000727659&charset=UTF-8&seller_id=2088102180432465&method=alipay.trade.page.pay.return&app_id=2016102000727659&out_trade_no=051413260514947&version=1.0
charset = UTF-8
out_trade_no = 051413260514947
method = alipay.trade.page.pay.return
total_amount = 88.88
sign = KRn/Ei+8lOpPdmSBg8ZsB9dUsV8la2bMWaFGFs5R2hhQOP283m+olOwFamfC+1thxfIsEi92w99lH24K044yj6aLAN8mJq3umQTRI6j2SvZgn1Ufgpd5KdjfmpEAR5omFOJJP/DXIb2zEFs6VvA60RmpwYT5mHbujSWDUvj7X0LX1SGd5l90DbyUDtfMe/RSqBFd0iIDLloa78a3dPqHcId3mUKP4RrzZBGWNbAYxrZiEslmZiU+nT9K0zL9t+Vm+24pHWsgVOR7hb4UicT/fHk6VnDPTnOlfVfJD3vOE2FP6N0jgj0QEKNIynOp6t74zmE8Xkca3pGQnkYyrUEQyg==
trade_no = 2017051421001004200200241311
auth_app_id = 2016102000727659
version = 1.0
sign_type = RSA2
app_id = 2016102000727659
seller_id = 2088102180432465
timestamp = 2017-05-14 13:28:11
return_url 验证成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Hexo + Git 搭建免费的个人博客
个人博客日益流行,大家都开始搭建自己的博客,记录成长中学习中的点点滴滴,最近觉得自己也需要有一个平台整理自己的所学所想,于是用了将近3天的时间 (实际上一天就能搞定的!) 使用 Hexo + Git 搭建了自己的个人博客,提高自己的学习动力,没事的时候可以拿出来温习下,提高下本人的渣渣水平。目前仍有很多功能没有添加,留着日后慢慢完善。准备将自己的第一篇博客献给 Hexo,表示对 Hexo 的感谢。下面详细介绍下搭建流程,有任何不懂的问题欢迎 联系我 或者在下面评论。另外个人能力有限,接受任何建议或者吐槽!共同进步(●’◡’●)。
零式的天空
2022/03/22
7560
[免费域名]免费撸.tk、.ml、.gq、.ga、.cf域名亲测教程
看到很多友友还在用别人的二级域名,要想自己的网站让更多人访问,域名也是一个很关键的,好的域名一天什么都不干都有流量。所以赶快去撸几个简短,好看,炫酷的一级域名吧,不要落后了,说不定以后这域名很值钱呢。
Youngxj
2018/06/07
54.5K7
域名解析后主机记录和记录值怎么填写?都是什么意思?
>之前我买的域名在腾讯云解析之后,需要添加记录,开始一脸懵啊,在网上搜查了一些资料,整理了一下,希望为大家解点惑吧! 主机记录: 主机记录就是域名前缀,常见用法有: www:解析后的域名为 www.1
双愚
2018/05/28
78.8K3
11个国内外免费域名解析服务
 一般域名使用注册商提供的域名解析服务虽然方便,但功能大多有限,特别是目前国内还会针对某些DNS服务器进行屏蔽,造成网站无法解析的情况出现,因此,使用第三方域名解析服务也是中国网站的必要选择,这里就介绍一些常见的免费域名解析服务。 域名注册商提供的免费服务 Godaddy:不在Godaddy注册域名,也可以使用Godaddy的域名解析服务,使用方法很简单,登录Godaddy网站后,点击“Add Off-site DNS”即可添加用户的域名,之后将用户域名的DNS设置为Godaddy指定的地址,域名DNS生效
小小科
2018/05/02
26.8K1
域名是如何关联到CDN的
用户在访问一个域名的时候,网络中是怎么知道这个域名到底是配置在哪一个CDN厂商的呢?
灰子学技术
2020/04/26
4.1K0
CloudFlare:免费CDN加速-自定义节点IP教程
为什么要使用CDN? 内容分发网络(英语:Content Delivery Network或Content Distribution Network,缩写:CDN)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、影片、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。简单总结有以下几点优势。
骤雨重山
2022/01/17
15.5K0
CloudFlare:免费CDN加速-自定义节点IP教程
2015年最后一波儿优惠~
据国外媒体报道,本月初互联网域名根服务器遭两次大规模DDoS攻击,每秒500万次!相当于一个根服务器正常数据加载量的250倍!13个关键服务器有3个在几个小时里基本瘫痪。 又到年终岁末,任何对DNS基础架构的攻击都应备受重视。游戏网站经常被攻击?电商网站载入太慢?视频网站卡顿太多?是时候尝试使用云解析了~ >>>> 云解析为网站护航! DNSPOD云解析,拥有全球最领先的云DNS集群技术,超过463台服务器在同时提供专业解析服务,能实时监测并抵御DNS攻击,单机可承受高达1100万Q/s请求量,时刻为你的网
腾讯云DNSPod团队
2023/05/04
2.4K0
2015年最后一波儿优惠~
使用 github, gitbook, markdown 写博客/写书
s1mba
2017/12/28
2.2K0
使用 github, gitbook, markdown 写博客/写书
国内外提供免费的域名DNS解析的服务商
是不是该来的时候了!CloudXNS将很快停止免费用户的域名解析!还是世界上没有“永久”的免费服务?! 哪个适合我们的域名?让我们给你推荐一些。 博客作者计划将xtboke.cn域名放入域名。博客部署在滕循云,域名解析也由滕循云~ 获得 也有很多老板把域名放入华为的云中~ ~ 我们可以根据以下几点进行选择。 1)您网站的用户群是国内的还是国外的? 2)域名是否存档? 3)域名是否已被工业和信息化部列入黑名单? 4)国内域名系统为国内提供智能线路划分。 5)它是合法网站吗? 6)参考服务提供商的规模。 7)服务提供商提供高级功能。我们能使用它们吗?
Erwin
2020/01/02
28.9K0
负载均衡结合DNSPOD实现全局负载
接到一个客户的需求,想让北京的用户就近访问北京的服务节点,上海用户访问上海的服务节点,通过负载均衡绑定后端服务,怎么实现?
喜子
2021/12/29
1.2K0
使用DNSPod管理 华夏名网 DNS域名解析
DNSPod 免费域名解析服务是很不错的,设置方便、解析稳定、生效快。站长使用 DNSPod 一年多了,一直很稳定,以前分享过 DNSPod域名解析管理最新教程(以GoDaddy域名为例) ,今天看到蓝冰介绍的 华夏名网 域名如何修改DNS到DNSPOD,正好站长一直没有在国内注册过域名,转载过来,估计有朋友用的上。
星哥玩云
2022/08/13
5.5K0
使用DNSPod管理 华夏名网 DNS域名解析
速来围观,你们要的迁移合集来啦!
今年的双十一,腾讯云各大产品新购都给出了新高的优惠力度。 除了新购,续费活动比初恋还令人心动。 这种时候,相信很多人都想把自己的各种业务都转来我们良心云了! 因为,D妹最近经常会被问到以下各种问题: 我的服务器在xx云,怎么迁移过来呢? 我的域名和DNS解析在xx云,迁移过来影响备案吗? 我的对象存储在xx云,怎么转到腾讯云呢? 我的CDN在xx云,想切换到腾讯云怎么做? 那么今天,我们整理了五个最常见的迁移场景,强烈建议各位转发收藏,妈妈再也不用担心我需要全网找攻略啦! 01 域名转入 简
腾讯云DNSPod团队
2020/11/23
10.1K0
腾讯云服务器域名解析教程 ?
步骤1:添加记录 登录 腾讯云 DNS 解析控制台。 在 “域名解析列表” 中,可查看全部已添加的域名。如下图所示: 说明: 若您的域名已在腾讯云注册,则默认添加到 DNS 解析列表。 若您需添加解析的域名未在腾讯云注册,请单击【添加域名】,在弹出的窗口中,根据实际需求,填写您需要解析的域名。 图片 在 “域名解析列表” 中,选择需要解析的域名行,单击【解析】。 在 “记录管理” 页签中,可以通过单击【快速添加网站/邮箱解析】添加解析记录。 注意: 快速添加网站解析将为您添加两条 A 记录,主机记
青梅煮码
2023/01/16
33K0
腾讯云服务器域名解析教程 ?
GoDaddy 域名解析最新图文教程(A记录/CNAME/MX/NS)
GoDaddy是全球最大的域名注册商之一,具备功能强大、服务稳定、解析快速等特点,深受国内外站长的喜欢。今天笔者分享 GoDaddy.com 域名解析最新图文教程,包括A记录、CNAME、MX、NS等方面。
星哥玩云
2022/08/13
7.5K0
GoDaddy 域名解析最新图文教程(A记录/CNAME/MX/NS)
我是如何在两天内做完一个网站的
有点标题党的嫌疑,不过确实网站的主体是在两天内的完成的,后面只是抓取了素材和完善细节。以下内容绝对是赤裸裸的干货。
lyb-geek
2019/08/12
12.6K1
我是如何在两天内做完一个网站的
GoDaddy设置DNS绑定主机以及添加A记录域名解析完整过程
不论我们在哪家域名注册商购买域名,我们如果需要搭建网站就需要用到解析域名至主机IP的操作。比如我们在Godaddy注册域名之后,很多用户不会操作Godaddy域名解析的设置,因为后台界面是英文以及面板不是我们熟悉的界面,尤其是新手用户可能不知如何解决,网上搜索出来的很多教程都是过期的,因为Godaddy经过多次的改版目前的界面比较新。
老蒋
2021/12/24
16.5K0
GoDaddy设置DNS绑定主机以及添加A记录域名解析完整过程
DNSPod携手腾讯云布局云服务一体化战略
DNSPOD在创业道路上一路驰骋壮大,在日行千里的互联网大业中我们始终保持着以服务用户为我们逐梦的目标。未来我们将携手腾讯云一起布局云服务一体化战略。站在巨人肩上,我们一起腾云起航。你的解析,我们不变的梦想。 为感谢新老用户对DNSPod的厚爱与支持,9月15日-9月26日,我们携手腾讯云重磅推出一大波D优惠活动,立买立送!助力企业新梦想。逐梦的岁月里,我们一起疯狂…….新注册DNSPod帐号和腾讯云帐号,即送100元腾讯云服务现金劵哦~ 助力对象:所有新购买DNSPOD产品及老客户续约均可享受,已经是腾讯
腾讯云DNSPod团队
2023/05/04
1K0
DNSPod携手腾讯云布局云服务一体化战略
小白搭建博客教程-域名解析(3)
2016-06-1015:56:17 发表评论 1,115℃热度 上一回说道:小白搭建博客教程之流程,这次趁着端午节写完它,也算是一个了结。 教程有4篇: 购买域名; 购买虚拟主机并搭建(Linux)
timhbw
2018/05/03
3.6K0
如何正确变更 DNSPod 解析套餐(降级场景)
本文将指导您如何完成 DNSPod 解析套餐的变更,适用于降级场景(将套餐由高版本改至低版本,如企业版更换为专业版)。
Im小泽
2024/04/02
2580
绑定Github上的个人博客到Godaddy域名
一、首先在Godaddy官网购买域名 二、配置Github 1、在我们的Hexo项目的sources目录下新建个CNAME文件,里面写上我们的域名。 之后重新部署项目: hexo g hexo d
Daotin
2018/12/04
6.9K0
绑定Github上的个人博客到Godaddy域名
相关推荐
Hexo + Git 搭建免费的个人博客
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 1、有图有真相
  • 2、如何申请PC电脑网站支付
  • 3、如何快速接入PC电脑网站支付
    • 3.1 接口调用流程图
    • 3.2 支付接口alipay.trade.page.pay封装
    • 3.3 其他支付接口封装
    • 3.4 封装测试
  • 4、测试数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档