支付宝手机网站支付对接(java)

以下所有的对接都基于沙盒环境,正式环境需要和支付宝进行签约。

发起支付

由用户提交付款信息,包括金额,用户订单号,商品名称,订单描述等信息。

付款流程

扫码付款。

后端通知

付款成功后支付平台会向后台发送一个异步的消息通知,系统在接收该信息时才对订单做出状态的更改,比如说更改会员状态,修改订单信息等操作。

1.下载资料。https://opendocs.alipay.com/open/270/106291/(所有的支付宝代码Demo都可以在这里找到)

2.下载秘钥生成工具:https://opendocs.alipay.com/open/291/106097/

支付宝手机网站支付对接(java)_第1张图片

 3.进入沙箱页面https://openhome.alipay.com/platform/appDaily.htm?tab=info

把工具生成的秘钥填进去

支付宝手机网站支付对接(java)_第2张图片

支付宝手机网站支付对接(java)_第3张图片

准备工作已经做完了开始写代码:

把下载资料里面的jar包导入项目:

支付宝手机网站支付对接(java)_第4张图片

然后写一个AlipayConfig:

把应用ID、商户私钥、支付宝公钥、已经支付宝网关修改成沙箱环境下的参数。

正式环境需要把应用ID、商户私钥、支付宝公钥、已经支付宝网关修改成正式环境下的参数。

import java.io.FileWriter;
import java.io.IOException;


/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */


public class AlipayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public static String app_id = "";

    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "";

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://127.0.0.1:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String return_url = "http://127.0.0.1:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";


    // 支付宝网关
    public static String log_path = "C:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

然后写一个调用接口,不需要修改什么地方,直接复制粘贴就行。
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.baizhi.config.AlipayConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/pay")
@CrossOrigin
@Slf4j
public class payController {


    @RequestMapping("/index")
    public String index() {
        return "index";
    }
    @RequestMapping("/gopay")
    public void pay(HttpServletRequest request, HttpServletResponse resp) throws Exception {

        // 获得初始化的AlipayClient
        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 head = "";

        String result = alipayClient.pageExecute(alipayRequest).getBody();

        String buttom = "";
        // 输出
        resp.getWriter().println(head + result + buttom);
    }
}

然后写一个html前端




    
    支付宝电脑网站支付



支付宝电脑网站支付体验入口页

商户订单号 :

订单名称 :

付款金额 :

商品描述:

如果您点击“付款”按钮,即表示您同意该次的执行操作。

点击付款界面,就可以调出支付的支付界面。

支付宝手机网站支付对接(java)_第5张图片

然后就是回调信息之类的。

你可能感兴趣的:(支付宝,后端,java)