开发者社区> javen205> 正文

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

简介: 支付产品全面升级(更新时间:2017/05/05 ),若您使用的是老接口,请移步老版本即时到账文档。
+关注继续查看

支付产品全面升级(更新时间: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封装

初始化接口

static {
        alipayClient = new DefaultAlipayClient(SERVICE_URL, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
    }

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

/**
     * 电脑网站支付(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 封装测试
/**
     * 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();

        }

    }

异步通知处理

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");
        }
    }

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

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,为验签做准备

/**
     * 
     * @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、测试数据

异步通知的参数

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

商户页面同步的参数

>>>>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 验证成功

推荐阅读:
微信、支付宝App支付-JPay0.0.2发布
支付宝支付-提现到个人支付宝
支付宝支付-刷卡支付(条码支付)
支付宝支付-扫码支付一张二维码集成微信、支付宝支付
支付宝Wap支付你了解多少?
Android版-支付宝APP支付
支付宝支付-常用支付API详解(查询、退款、提现等)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
支付宝-电脑网站支付
电脑网站支付,也称扫码支付,是专门针对PC端业务而开发的一种支付方式,既有支付宝提供在网页展示一个动态生成的支付二维码,用户通过手机支付宝扫码以后可实现支付功能的一种支付方式。
248 0
抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)
字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。
1519 0
一张收款码,同时支持微信、云闪付、支付宝、信用卡支付
想必你也有过这样的经历,在门店消费时,看过商家只张贴了一张收款码,用微信或者支付宝扫码都可以支付,同时支持微信、云闪付、支付宝、信用卡支付。
157 0
支付宝PC支付
必备的Jar支持
1750 0
支付宝电脑网站接口产品介绍
产品介绍   电脑网站支付的接口主要是用于商家在PC端发起收款,用户可以扫码付款也可以登录支付宝账户网页支付。典型的PC端收款网站如:优酷网(PC端购买优酷会员)。详细的产品信息点击【查看】   使用场景流程,申请条件,产品费率点击【查看】   特别说明1:电脑网站支付接口支持沙箱测试,如果您没有...
459 0
如何在微信中使用支付宝手机网站支付
目前微信已经拦截了所有在微信内调用支付宝支付的途径,故无法直接唤起支付宝。 但您可以借助点击右上角的通过浏览器打开的方式,来试着打开支付宝。  更多详见“快速接入”部分的微信公众平台无法使用支付宝收付款的解决方案。
443 0
iPhone 手机中支付宝钱包页面电话带 +86问题解决方案
说明:   这个问题只会出现在iPhone手机系统大于11.2以上的版本,由于 UIWebview 的问题导致 电话号码(如下图) 解决方案:   一般我们写的代码如下:  拨打电话  修改成代码参考如下:  拨打电话 如果您对这个方案有任何疑问欢迎在帖子下方追问吐槽
391 0
支付宝刷表支付和手环支付-接入处理方案
说明:   如果咱们在支付宝钱包中看到手表或手环支持列表,现在也想让自己的手表或手环产品支持支付宝支付。   请按照以下格式私信下方“天籁”提供信息 ↓↓↓       公司名称+个人姓氏+手机联系方式+邮箱地址+用户群体(成人手表还是儿童手表)   请各位商户提供完整准确信息 由于接入手表或者手环支付的准入资质要求较高请各位厂商详细阅读处理流程。
754 0
+关注
javen205
一线互联网公司Android以及Java开发工程师,有多年的海外以及国内支付项目经验,热爱技术分享。 1、让支付触手可及 https://gitee.com/javen205/IJPay 2、微信指南 https://gitee.com/javen205/weixin_guide
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
万人低头时代, 支付宝APP无线网络性能该如何保障
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多