支付宝H5支付

一、前期准备

1、去蚂蚁金服开放平台 https://open.alipay.com/platform/manageHome.htm, 登录。

2、选择开发者中心–>网站&移动应用

在这里插入图片描述

3、选择支付接入

在这里插入图片描述### 4、创建应用
在这里插入图片描述

5、生成秘钥:官网地址

在这里插入图片描述
第一步:生成 RSA 密钥
第二步:上传应用公钥并获取支付宝公钥
https://open.alipay.com/dev/workspace/key-manage
在这里插入图片描述

开发代码中要使用到 支付宝公钥 和 商户应用私钥。

二、搭建和配置开发环境

服务端sdk
这里是java,maven项目,选择需要的依赖。

 <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.4.49.ALL</version>
  </dependency>

三、调用接口

手机网站支付产品包含两类API:
页面跳转类:需要从前端页面以Form表单的形式发起请求,浏览器会自动跳转至支付宝的相关页面(一般是收银台或签约页面),用户在该页面完成相关业务操作后再回跳到商户指定页面。例如本产品中的手机网站支付接口alipay.trade.wap.pay。
系统调用类:直接从服务端发起HTTP请求,支付宝会同步返回请求结果。例如本产品中的交易查询等配套API。

我这里是采用的是页面跳转类
在这里插入图片描述

java代码:

//#HTTPS请求地址: alipay_gatewayUrl= https://openapi.alipay.com/gateway.do
//应用id: app_id
//私钥: merchant_private_key
//#字符编码格式: alipay_charset=utf-8
//公钥:alipay_public_key
// #签名方式: alipay_sign_type=RSA2

 public  Map<String, String>  aliPayH5() throws AlipayApiException {
        Map<String, String> resultMap = new HashMap<>();
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);
        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request类
        //设置回调地址
        alipayRequest.setNotifyUrl(alipay_h5_notify_url);
        alipayRequest.setReturnUrl(return_url);
        Map<String,Object> map=new HashMap<>();
        map.put("out_trade_no",orderNo());     //商户订单号

        //订单总金额(元,保留2位小数)
        BigDecimal fee = new BigDecimal(orderFee).divide(new BigDecimal(100),2, RoundingMode.HALF_UP);
        map.put("total_amount" , fee);

        //订单标题
         map.put("subject", "预约订单:" + bizOrder.getOrderNo());

        //该笔订单允许的最晚付款时间,m-分钟,h-小时,d-天,1c-当天
        map.put("timeout_express","5m");
        //把订单信息转换为json对象的字符串
        String postdata = JSONObject.fromObject(map).toString();
        alipayRequest.setBizContent(postdata);
        String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        resultMap.put("form",form);
        return resultMap;

    }

这里就可以拿到form,包含自动提交的脚本。

官方文档是后端直接响应如下:

public void doPost(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
alipayRequest.setBizContent("{" +
" \"out_trade_no\":\"20150320010101002\"," +
" \"total_amount\":\"88.88\"," +
" \"subject\":\"Iphone6 16G\"," +
" \"product_code\":\"QUICK_WAP_PAY\"" +
" }");//填充业务参数
String form="";
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
}
httpResponse.setContentType("text/html;charset=" + CHARSET);
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}

因为项目是前后端分离,用了ajax渲染的。如下:

$("#payform").html(form);//这里的payform 是支付页面的<div id="payform"></div>

注意: 这个form自带自动提交的脚本,提交的是页面第一个form,从foms[0].submit可以看出。故可以将<div id="payform"></div>放的<body>标签下面来确保提交的是第一个form。

此时,即可打开支付宝登录页面。在手机端访问可以打开支付宝客户端。

后面要做的就是支付回调,支付回调主要做的是保存支付流水,处理自己支付完成的业务逻辑。

四、java代码

github 地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值