支付宝支付 沙箱测试

支付宝平台文档中心

https://opendocs.alipay.com/open/270/105900

开发者中心

https://developers.alipay.com/platform/developerIndex.htm

沙箱账号地址

https://openhome.alipay.com/platform/appDaily.htm?tab=account

首先登陆,到开发者中心

下载生成公钥和私钥的工具

扫描二维码关注公众号,回复: 10435696 查看本文章

将获取的公钥设置

这样基本配置就已经完成,接下来我们可以看下文档  https://opendocs.alipay.com/open/270/105900

这里会详解介绍操作流程

点击api 列表,统一收单下单并支付页面接口 alipay.trade.page.pay

这就是我们待会调用请求必须设置的参数,接下来看代码

支付的配置类:

package com.lxq.httpclient.pay;

public class AlipayConfig {

	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
	public static String app_id = "20161021007302901";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCeSaKJQxolIySJevdA05kDgdfiVIJsqek55J12bxje3BHt5K3s6Hh5kyKClWhj59Q7gUif9sD+MobOs6pc7jhpZw/VqHP4LIJMVQ+gmWfgiD7ClJ3086jfRLIu+mxXlT49t5SEbTknbVAhcXPGNwJEsCHgMFSOiVBywRuRn5RMOP5bXSxZAMcYKn05ywWy7fgLP8kdk/yNuyN/giVm7x6H7w1GSqnsXv/o5jboKPrjjM0B+dc2cFb5oxlgT05Gv7zx3PqhWwlyqC/dg7eFNEq3smtaizECGD1rNoiFEqd1PMU/oNZgyZ9AZTpOgQxnt9dEscXODCpLkkNXJ0wyf6rNAgMBAAECggEAL2sdvwMUJQX3HxxwT8JT94IBW3M3szfff5FmPqGfkLvavyqfk/Y8iScz0mzR3gQIR18+k3VHcZ9PVULriXVv/tt6Geah/znOOvHMga8TOGd4bbA59bS85U3eF0a8CCzUfYauflF+KrqLo8kqBrpZ+pvNOi0gV6b5K7d/+8sTkRWTDxlAut9BnEmwfYlfuMhPGS2V7wxnkQtjXNudZKTNNaAor0melvXMUd2C8JNQOgFmzk4YDjgORatNrq7u0YF4RPdDOGrw9saMwFEVb4ernrDXOHQKJhHOtW0YlYBQn54G/ohNh41rZMCYYo+3vYQhMu0DqvURIpsh4tbMyA3ZvQKBgQDzOyy+y+WEKi71f+K1ALx7Yxc20Kg/tcBQm0vs8Yqa3aCfXFCAJnoV/lfHgcGS/gCegkSjNQCb3rnqNXikc4k/Z1nnrcO1RrKFPZecKobwRH21xOkzwnFAgsAETj4Cqce1plqgXmwsq+SZDZI6L8Mx0T9KJJERI11jSGDxXdppWwKBgQCmmOO/CC8xM8Bzv0FevME1E/VQCifGhqeJYsjHVurVcSaDGNLF7HxBxCUX6x1EYvbRunAhIjqQOPjQUeIUSPQmRs4gKhswoV8fCoHnvJ0eEtBIMbj045h6ZRuenGUT/poSSmH/MawTOL7JS5JUZkyFiwulytNizp+OXfdmhAdM9wKBgQCDXvGy96O2d6Y3WORUyNoEdqfCJn7JMlx17PrcNjWboZqwmAauwJluKZq1mgK4ZtJkyo1R7T2v8mNN+aV4hSKbCTJI7NRoo4+mYXbylRGe0g9nzrv6Bcpvgm89pBjgDV1dYkVOmtEoa4sjk23oWYW+8XqSjB+CNyyohB5AH2XpQwKBgFGlxqBeK3rKqTxQ9IGwsmQIBwcWIw5J+hv7/PitIWRAEybW6J212+QDdEZ3pR1Z/yskW0Xx14/NTCwUpV9ZrcaAlw7uc+rue4bkCGyBZONTRx7Kt6HVVWpO2S1v6p3U/r+OEt8WAgZdnitbTTjt9fzQ+4FimRzotQv6A4ELneRbAoGBAKGJOxzgv3fnTdg4qNLTXB+UkfQOz4EtB1SSnl3OjS0felz7SpHpvCnpP9cQolcKUhpkWE2JocOxbo+V5bRBQrSu9z6z9/AJ6rBNFzrGcA3X3hxG+8+tErd17ArLOuq4utBezWDLTM3LnuJd5Vp9uhQR54lK6M4RfufWEdfYrg7R";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnkmiiUMaJSMkiXr3QNOZA4HX4lSCbKnpOeSddm8Y3twR7eSt7Oh4eZMigpVoY+fUO4FIn/bA/jKGzrOqXO44aWcP1ahz+CyCTFUPoJln4Ig+wpSd9POo30SyLvpsV5U+PbeUhG05J21QIXFzxjcCRLAh4DBUjolQcsEbkZ+UTDj+W10sWQDHGCp9OcsFsu34Cz/JHZP8jbsjf4IlZu8eh+8NRkqp7F7/6OY26Cj644zNAfnXNnBW+aMZYE9ORr+88dz6oVsJcqgv3YO3hTRKt7JrWosxAhg9azaIhRKndTzFP6DWYMmfQGU6ToEMZ7fXRLHFzgwqS5JDVydMMn+qzQIDAQAB";

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

	// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	public static String return_url = "http://localhost:8761/dgwl/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";
	

}

package com.lxq.httpclient.controller;

import com.alibaba.fastjson.JSON;
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 org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

import static com.lxq.httpclient.pay.AlipayConfig.*;

/**
 * @Author Lxq
 * @Date 2020/4/3 0:31
 * @Version 1.0
 */
@RestController
public class PayController {

    @GetMapping("pay")
    private String alipayPay() throws AlipayApiException {

        Map<Object,Object> vo = new HashMap<>();
        //这里模拟了一个订单的id
        vo.put("out_trade_no",UUID.randomUUID().toString().replace("-", ""));
        vo.put("product_code","FAST_INSTANT_TRADE_PAY");
        vo.put("total_amount",99);
        vo.put("subject","Test my demo");
        String json = JSON.toJSONString(vo);
        AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id,
                merchant_private_key, "json", charset, alipay_public_key, sign_type);
        // 设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);
        alipayRequest.setBizContent(json);
        String result = null;
        try {
            result = alipayClient.pageExecute(alipayRequest).getBody();
        } catch (Exception e) {
            System.out.println(result);
        }

        return result;
    }

    /**
     * @Description: 支付宝回调接口
     * @param out_trade_no 商户订单号
     * @param trade_no     支付宝交易凭证号
     * @param trade_status 交易状态
     * @return String
     * @throws AlipayApiException
     */
    @PostMapping("notify")
    private String alipayNotify(HttpServletRequest request, String out_trade_no, String trade_no, String trade_status)
            throws AlipayApiException {
        Map<String, String> map = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = iter.next();
            String[] values = requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
            }
            map.put(name, valueStr);
        }
        boolean signVerified = false;
        try {
            signVerified = AlipaySignature.rsaCheckV1(map, alipay_public_key, charset, sign_type);
        } catch (com.alipay.api.AlipayApiException e) {
            // 验签发生异常,则直接返回失败
            return ("--failed--");
        }
        if (signVerified) {
            //处理你的业务逻辑,更细订单状态等
            return ("--success--");
        } else {
            return ("--failed--");
        }
    }


    /**
     * @Description: 支付宝回调接口
     * @param out_trade_no 商户订单号
     * @param trade_no     支付宝交易凭证号
     * @return String
     * @throws AlipayApiException
     */
    @GetMapping("return")
    private String alipayReturn(Map<String, String> params, HttpServletRequest request, String out_trade_no, String trade_no, String total_amount)
            throws AlipayApiException {
        Map<String, String> map = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
            String name = iter.next();
            String[] values = requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
                System.out.println(valueStr);
            }
            map.put(name, valueStr);
        }
        boolean signVerified = false;
        try {
            signVerified = AlipaySignature.rsaCheckV1(map, alipay_public_key, charset, sign_type);
        } catch (AlipayApiException e) {
            // 验签发生异常,则直接返回失败
            return ("--fail--");
        }
        if (signVerified) {
            return ("--success--");
        } else {
            return ("--fail--");
        }
    }

}
发布了90 篇原创文章 · 获赞 29 · 访问量 7235

猜你喜欢

转载自blog.csdn.net/weixin_38982591/article/details/105286627