JAVA 개발 Alipay의 인터페이스 (샌드 박스 환경)

단계 설명

1. 먼저 개미 골드 드레스 개발자 센터로 이동  https://openhome.alipay.com/platform/home.htm  등록 된 상인 계정.

2. 개발자 인증, 공개 키, 개인 사용 RSARSA 서명 검증 검사 도구를 생성합니다.

3.pom 프로파일 com.alipay.sdk 소개 의존하고 있습니다.

4. 액세스 가이드 샌드 박스 환경 (샌드 박스 테스트 환경으로, 휴대 전화 결제를 사용하여 스캔 코드는 Alipay의 APP의 샌드 박스 버전을 다운로드해야합니다).

지불 인터페이스 개발 5.Alipay 구성 클래스입니다.

 

 

첫째, RSA 키

판매자 계정, 등록별로, 그것은 (이 사람이 자기 연구이다), 개인 정보를 개선, 스캔 코드를 기록 할 수 귀하의 페이팔 계정 또는 계정을 사용하는 서비스의 종류를 선택하는 것입니다, 우리는 다음 바이두가 될 수 말할 수있는 개발자 인증 등록 후 검토를 위해 한 시간 기다려야 할 수도 있습니다,

그러나 샌드 박스 테스트 환경의 사용에는 영향을 미치지 않습니다, RSA 키 생성 공식 링크를 생성하기 위해 아래의 사진이있다.

 

 

 

주요 문서 공식 웹 사이트의 세대 : https://docs.open.alipay.com/291/105971
공식 문서가 매우 상세한 이야기, 당신은 공개 키와 개인 키, 사용하려면 다음의 필요성을 유지하는 기억의 단계를 수행 할 수 있습니다.

두, com.alipay.sdk 의존 소개

<의존성> 
    <의 groupId> com.alipay.sdk </의 groupId> 
     <artifactId를> Alipay의-SDK 자바 </ artifactId를> 
     <version>은 3.0.0 </ 버전> 
</ 의존성>

 

 

 

셋째, 응용 프로그램 샌드 박스 환경

선택을 클릭 개발 센터 R & D 서비스에 로그인합니다.

 

2. 정보 다음 그림은 응용 프로그램 샌드 박스를 보여줍니다

 

 

 

샌드 박스 버전 APP 다운로드

 

 

 

 

 3. 샌드 박스 테스트 계정 로그인 정보는 아래의 가상 계정 잔액을 충전 무료입니다.

 

 

 

인터페이스의 넷째, 개발

1.在config文件下创建AlipayConfig配置类。

package com.app.config;

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

/**
 * Created  on 2019-9-09
 */
public class AlipayConfig {

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,开发时使用沙箱提供的APPID,生产环境改成自己的APPID
    public static String APP_ID = "你的沙箱APPID"; //测试

    // 商户私钥,您的PKCS8格式RSA2私钥
   public static String APP_PRIVATE_KEY = "在上面第一步生成的RSA私钥";

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

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://localhost:8080/Alipay/notifyUrl";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问(其实就是支付成功后返回的页面)
    public static String return_url = "http://localhost:8080/Alipay/returnUrl";
    // 签名方式
    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 = "E:\\";

    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @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();
                }
            }
        }
    }
}

2.后台代码

 

 

 

package com.app.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.app.config.AlipayConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Created by  on 2019-9-09.
 */
@Controller
@RequestMapping(value="/Alipay")
public class AlipayController {
    /**
     * 购物车
     *
     * @return
     */
    @RequestMapping(value = "/Shopcart")
    public String Shopcart() {
        return  "pay";
    }

    /**
     * 结算界面
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/PayPage")
    public String  payController (HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.APP_ID, AlipayConfig.APP_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 = request.getParameter("Order");
        //付款金额,必填  ShopName
        String total_amount = request.getParameter("Money");
        //订单名称,必填
        String subject = request.getParameter("Name");
        //商品描述,可空
        String body =request.getParameter("购物测试");
        // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        String timeout_express = "1c";
        alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"body\":\"" + body + "\","
                + "\"timeout_express\":\""+ timeout_express +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //请求
        String url = "";
        try {
            url = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单

               /* response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);

                response.getWriter().write(url); // 直接将完整的表单html输出到页面
                response.getWriter().flush();
                response.getWriter().close();*/

        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        System.out.println(url);
        return url;
    }

    /**
     * 同步跳转
     *
     * @param request
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/returnUrl")
    public ModelAndView returnUrl(HttpServletRequest request) throws Exception {
        ModelAndView mav = new ModelAndView();

        // 获取支付宝GET过来反馈信息(官方固定代码)
        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] + ",";
            }
            params.put(name, valueStr);
        }
        boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); // 调用SDK验证签名

        // 返回界面
        if (signVerified) {
            System.out.println("前往支付成功页面");
            mav.setViewName("Shopcart");
        } else {
            System.out.println("前往支付失败页面");
            mav.setViewName("failReturn");
        }
        return mav;
    }

    /**
     * 支付宝服务器异步通知
     *
     * @param request
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/notifyUrl")
    public void notifyUrl(HttpServletRequest request) throws Exception {
        // 获取支付宝GET过来反馈信息
        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] + ",";
            }
            params.put(name, valueStr);
        }

        boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); // 调用SDK验证签名

        if (signVerified) { // 验证成功 更新订单信息
            System.out.println("异步通知成功");
            // 商户订单号
            String out_trade_no = request.getParameter("out_trade_no");
            // 交易状态
            String trade_status = request.getParameter("trade_status");
            // 修改数据库
        } else {
            System.out.println("异步通知失败");
        }
    }
}

3.前台页面html(页面比较lo,大家测试做个参考)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>沙箱下单测试</title>
    </head>

    <body>
        <div>
            <form action="http://localhost:8080/Alipay/PayPage" method="post">
                <div>
                    订单号:<input name="Order" value="20592155879901" ></input>
                </div>
                <div>
            商品名称:<input name="Name"  value="笔记本电脑"></input>
                </div>
                <DIV> 
            金额: <입력 이름 = "돈"값 = "99.99"> </ 입력>  </ DIV> 
            <입력 유형 = "제출"값 = "提交订单"> </ 입력> 
            </ FORM> 

        < / div> 

    </ BODY> 
</ HTML>

4. 테스트 결과

웹 페이지를 입력 : locahost : 8080 / Alipay의 / Shopcart 

 

 

 

 자동으로 지불하기 위해 인터페이스, Alipay의 APP 스캔 지불 가능한 샌드 박스 버전으로 이동합니다 제출을 클릭하면, 지불은 직접 로그인 할 수 있습니다

 

 

 

 샌드 박스 효과 결제 계좌

 

 

 

당신이 공식적인 환경이 필요한 경우에만 라인에 공식 APPID 및 공식 Alipay의 게이트웨이를 교체해야합니다 .......

그러나 정식으로 사업자 등록 및 업로드에 필요한 비즈니스 라이센스를 체결 한 것, 당신은 다음 시험에 관심이있을 수 있습니다 ...

 

추천

출처www.cnblogs.com/zh01/p/11512269.html